新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
实现方法请具体参照《Eclipse swt/Jface核心编程》
成都创新互联公司是一家集网站建设,龙江企业网站建设,龙江品牌网站建设,网站定制,龙江网站建设报价,网络营销,网络优化,龙江网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
第21章 文本处理.
21.1 文本处理概述... 409
21.2 项目实战:JavaScript编辑器... 409
21.2.1 主窗口预览... 409
21.2.2 项目文件结构... 410
21.3 主窗口模块... 411
21.3.1 代码实现... 411
21.3.2 主窗口程序代码分析... 414
21.3.3 启动主窗口程序... 416
21.4 代码着色... 417
21.4.1 源代码配置类(SourceViewerConfiguration)... 417
21.4.2 基于规则的代码扫描器类(RuleBasedScanner)... 419
21.4.3 设置代码扫描规则... 420
21.4.4 提取类(Token)和文本属性类(TextAttribute)... 423
21.5 内容辅助... 423
21.5.1 配置编辑器的内容助手... 424
21.5.2 内容辅助类... 424
21.5.3 辅助建议类(CompletionProposal)... 426
21.6 文档的撤销与重复... 427
21.6.1 文档管理器对象(DefaultUndoManager)... 427
21.6.2 撤销操作的实现... 427
21.6.3 恢复操作的实现... 428
21.7 查找与替换窗口... 429
21.7.1 窗口的界面设计... 429
21.7.2 查找功能的实现... 433
21.7.3 替换功能的实现... 434
21.8 首选项的对话框... 434
21.8.1 首选项页面的代码实现... 435
21.8.2 打开首选项页面的代码... 436
21.9 文件的打开、保存与打印... 437
21.9.1 打开文件... 437
21.9.2 保存文件... 437
21.9.3 打印文件... 438
21.10 帮助对话框... 439
21.11 其他的一些工具类... 440
21.11.1 事件管理类... 440
21.11.2 资源管理类... 441
21.11.3 程序中使用的常量... 443
21.12 本章小结... 444
某个java编译成class后,放到classes下面,然后lib目录下,也有这个class所在的jar包,这样就导致classpath实际上有两个相同的class,通过方法class.getProtectionDomain()找到class所在的jar包,然后删除。
1.首先打开Eclipse开发软件,然后在工具栏的【Window】,点击后找到弹出列表中的【Preferences】选项,然后点击这个选项。
2.现在弹出的窗口就是JAVA开发人员常见的设置窗口了,我们依次点开【JAVA】【Editor】【Content Assist】,最后把鼠标点击在【Content Assist】上。
3.现在,我们关注右边的面板,有一个【Auto activation triggers for JAVA】,这个配置的意思就是,什么情况下会触发自动提示,默认里面应该是只有一个【.】的符号,这也是为什么我们写代码的时候在输入【.】的时候会出现自动提示的原因,现在,我们需要做的是,把qwertyu...等键盘上所有你想触发自动提示的字符都输入后面那个框里。
4.到这里你已经是设置完了,然后一次点击【Apply】和【OK】两个剑,现在随便找一个JAVA类测试下,看看是不是已经可以了呢如果有任何疑问欢迎在下方留言,我会耐心解答。
首先你需要懂得编译原理这门学科,JDK将java代码编译成机器能够识别的二进制字节码,然后用JVM(java虚拟机)来加载这些二进制字节码并进行解析(翻译),然后形成指令并执行。jre其实就是java虚拟机的实现,全名叫做Java
Runtime
Environment
Java编译原理:
Java 虚拟机(JVM)是可运行Java 代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。
一.Java源文件的编译、下载 、解释和执行
Java应用程序的开发周期包括编译、下载 、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行代码?字节码。这一编译过程同C/C++ 的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全 性。
运行JVM字节码的工作是由解释器来完成的。解释执行过程分三部进行:代码的装入、代码的校验和代码的执行。装入代码的工作由"类装载器"(class loader)完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其他类。在本台计算机上的所有类都在同一地址空间内,而所有从外部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。当装入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用同特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内存布局,Java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码对地址的非法访问。
随后,被装入的代码由字节码校验器进行检查。校验器可发现操作数栈溢出,非法数据类型转化等多种错误。通过校验后,代码便开始执行了。
Java字节码的执行有两种方式:
1.即时编译方式:解释器先将字节码编译成机器码,然后再执行该机器码。
2.解释执行方式:解释器通过每次解释并执行一小段代码来完成Java字节码程 序的所有操作。
通常采用的是第二种方法。由于JVM规格描述具有足够的灵活性,这使得将字节码翻译为机器代码的工作
具有较高的效率。对于那些对运行速度要求较高的应用程序,解释器可将Java字节码即时编译为机器码,从而很好地保证了Java代码的可移植性和高性能。
一楼的说的够全面了,不过稍有误解.
再来表示抱歉,我对编程语言中的中文名词非常不了解,所以如果以下的回复对你的阅读或者理解造成困难,请见谅.
1.首先,要明白这个问题的答案,需要了解call (pass) by value 和 call (pass) by reference 的区别.简单来说:
call by value通常是复制这个parameter的值去另外一块内存里,然后传给function, 所以在method/function里边对这个变量的所有变更,实际上都是对复制过来的镜像进行操作,不会对原本的variable有任何影响.
call by reference是将parameter的reference传给function,简单点理解就是直接把variable传给function.所以说这个variable的值是可以被function改变的.这个用法在c/c++中非常常见,用法是variable_name.
2.再来,在Java里边,你可以很简单的理解为: Java中只有call by value, 也就是说,所以所有传给function的parameter本身都不会被改变. (这是最简单直白的理解,当然也有另一种常从sun的人那边听到的说法:Java是call by value + call by reference by value)
3.那么现在的问题就是为什么第二个结果是2了. 首先说一下sun官方的解释: 对于reference type在作为parameter/argument的时候,也是call by value, 但是在你拥有足够权限时(比方说那个变量是public的, 不是final的等等各种符合的情况),可以修改这个object中fields的值(也就是属于这个object(严谨点讲是an instance of the object) 内部的变量, 在你的例子中, ko 里边的 a 就是一个field, 所以update(ko)会使ko.a变成2).
4.如果你是一个有过c/c++学习经验的人或者你以上的解释很难理解,以下这种说法或许更适合你 (当然了,这只是大多包括我在内有c经验的人的一种理解方式)
这里可以引入一个新的概念,pointer. 这是一种比较特殊的变量,它内部所储存的东西,其实只是另外一个变量的内存地址. 如果对内存没有概念,你可以把它简单理解为是风筝的线轴,虽然看它本身看不出什么端倪,但是顺着摸过去总会找到风筝,看到它是什么样子. 以pointer方式理解Java的人,通常会说: Type variable = new Type(); 这个过程中,最后生成的这个variable其实就是一个pointer,而不是instance本身.
在Java中, 有c/c++经验的人通常认为Java是call by value.同时,当一个变量用在储存reference type的时候,实际上储存的是它的pointer,这也一样可以解释为什么ko.a会有2这个结果,因为虽然pointer被传到function里边时,本身是call by value,无法被改变.但这并不影响function本身对这个pointer指向的object的内容做任何改变. 当然,再次声明,这只是一种帮助有c/c++经验的人理解的方法. Sun本身严正声明Java里边没有pointer这个东西的存在.
5. 再来解释一下为什么说楼上所说的(或者说楼上引用的)理解略有偏差.
引用"我们上面刚学习了JAVA的数据类型,则有:值类型就是按值传递的,而引用类型是按引用传递的" 这句话很明显的有两点错误. 第一点,如果我上面所说的,Java是没有call by reference的.
第二点,暂且假设Java里边是有call by reference的, 这句话依然不成立.
Java中的变量有两种类型: primitive types 和 reference type.
primitive type包括byte, short, int, long, char, boolean, float和double.
而这8种之外的所有的,都是reference type.
下面是一段对你的贴上来的code的一点延伸,希望可以帮助你更好的理解Java中的argument / parameter到底是如何运作的.
public class Test {
public static void main(String[] args) {
int a = 1;
Koo koo = new Koo();
Object o = new Integer(1);
Koo newKoo = new Koo();
update(a);
update(koo);
update(o);
update(newKoo);
newUpdate(newKoo);
System.out.println(a);
System.out.println(koo.a);
System.out.println(o);
System.out.println(newKoo.a);
}
static void update(int a) {
a++;
}
static void update(Koo koo) {
koo.a++;
}
static void update(Object o) {
o = (int) (Integer.parseInt(o.toString()) + 1);
}
static void newUpdate(Koo koo) {
koo = new Koo();
}
}
class Koo {
int a = 1;
}
/*
o = (int) (Integer.parseInt(o.toString()) + 1); 这一行中的(int)纯粹是多余的,是否有这个casting对code本身没有任何影响. 如果你高兴也可以用
o = new Integer(Integer.parseInt(o.toString()) + 1);
或者干脆
o = Integer.parseInt(o.toString()) + 1;
*/
以上这些code运行之后会得到1 2 1 2的结果. 后面两个结果可以很好的说明, 即使对objects (reference type variables) 来看, Java所应用的也并不是call by reference. 否则的话,以上code运行结果应该是1 2 2 1
希望你可以真正理解这个新的例子中,产生1212这个结果的原因,从而对Java中的arguments有一个系统全面的认识.
图片是相关资料的链接,知道里貌似不能加网址
首先你要有java源程序吧,假设你有A.java文件,然后编译它,这时就会出来一个以A.class。然后再控制台输入java A ,重点来了:Java虚拟机JVM会首先加载这个类,虚拟机会启动一个一个Main线程,程序就会从main()方法开始执行,然后退出main方法。程序执行完毕。
其中类加载过程比较复杂,建议看关于JVM的书籍或者博客