1.4 常见疑难解答
对于初学者而言,在Java程序的开发、编译和执行过程中,都会或多或少遇到问题,如环境变量设置不正确,源程序的语法错误、语义错误,或在程序编译、运行期发生错误等。如果这些错误或问题不能得到适当的处理,那么会对初学者造成很大的障碍。本节将介绍几种常见的错误,以使读者在学习过程中少走弯路。
1.4.1 环境变量设置错误
在编译并运行Java应用程序之前,需要设置环境变量,其目的是使Windows系统可以知道DOS窗口中运行的Java工具可执行程序,如Javac源程序编译工具等。图1-12说明Windows操作系统无法发现Javac编译程序。
图1-12 无法找到Javac可执行程序
当然如果已经安装了JDK,则可以在DOS提示符下输入Javac的绝对路径,通过绝对路径来识别该命令的位置。显然这种方式很烦琐,因为每次编译源文件都要输入一串路径和命令信息。读者可以通过2.1节掌握如何设置JDK环境变量。
1.4.2 语法错误
Java语言规范设计了语法规则,但是如果疏漏了部分内容,违反了Java的语法规则,编译器会发出语法错误消息,该消息包含错误类型、发生错误的代码在程序中的位置(以该错误代码行号为标识)等,并且在错误处标识一个“^”。出现语法错误的情况如图1-13所示。
图1-13 语法错误
在HelloWorld.java源程序中将语句System.out.println(“HelloWorld!”)后的分号去掉,使得程序语句缺少结束标志,这就违反了Java语法规则。在编译期发生任何类型的错误都会导致无法生成.class文件。所以此时需要读者仔细分析错误类型,细致检查程序中的错误,直到源程序顺利通过编译。
1.4.3 语义错误
编译器也会发现语义错误。编译器无法识别一个标识的语义时就会产生语义错误,如发现一个未定义的变量、错误输入了系统类库的类名等。图1-14演示了一个语义错误,笔者故意将语句System的首字母改为小写,使编译器无法识别,从而输出语义错误。
图1-14 语义错误
注意 Java程序区分大小写。
1.4.4 运行时错误
运行时错误指在执行程序过程中发生的错误,如某个类没有实例化而造成空指针、无法找到指定的类文件等。下面介绍三种初学者常见的运行时错误。
1.无法发现类文件
在用户编译或执行Java程序时,由于种种原因可能输入了不正确的类名,使得编译器或虚拟机无法发现该文件所在位置。类文件名输入错误如图1-15所示。
图1-15 类文件名输入错误
在图1-15中,笔者想运行HelloWorld程序,但是输入了错误的类名HelloWorldd,所以执行时系统抛出java.lang.ClassNotFoundException错误。
使用Java工具会启动Java虚拟机,此时系统会首先在当前目录下寻找类文件,如果没有则默认到操作系统的系统环境变量ClassPath中搜索,所以读者也可以在该变量中设置需要编译的类文件所在的目录。
注意 变量的设置方式可以参考2.1.2节“设定环境变量”。
2.类名输入错误
对于初学者而言,很容易出现的一个错误是,执行Java程序时往往会输入类文件名,如HelloWorld.class,这是不允许的,此时会抛出类名输入错误异常,如图1-16所示。
图1-16 类名输入错误
注意 在调用Java工具执行程序时,需要在其后输入类名而不是类文件名,如输入java HelloWorld才是正确的方式。
3.无法发现main()方法
在1.3节已经知道,任何Java应用程序执行的类中必须有main()方法,该方法是程序的入口,以后才可以继续调用程序所需的各种其他资源。如果在类中没有定义main()方法或该方法书写错误,都会导致如图1-17所示的缺少main()方法错误。
图1-17 缺少main()方法错误
笔者在HelloWorld.java源程序中修改了main()方法的名字,继续编译并执行该程序,虚拟机将无法装载该类,因为无法发现类HelloWorld的程序入口。
1.4.5 初学者如何选择Java参考书
一个程序员如果没有半米多高的技术书堆,就没有人会认为他是真正的程序员。如何从眼花缭乱的开发丛书中找到适合自己的书,也是一门学问。
书评:比较成功的书籍在上市的前后,都会有名家撰写的书评,这些书评包括对该书积极一面的评价,也有对书中内容的指摘,通过正反两面的对照,相信可以帮助初学者做出购买的选择。
道听途说:口碑的重要性在现代社会中日益突出,如果真是一本好书,可能会在不同场合听到不同的人对它给予相同的赞许,这就是该书的价值了。
不要忘记旧书摊:这不是在鼓励怀旧,而事实是老书的质量和作者的写书态度也许更严谨端正,这就是老书的好处。多次印刷的书也是值得考虑购买的对象,多版本说明作者对该书的精益求精和新技术的更新,同时也反映了该书在市场上的受欢迎程度。
预先阅览:最好的当然是自己能够预先浏览,从朋友那里借也好,在网上看看电子版也好,觉得自己喜欢,或是觉得有收藏的价值,再进行购买。