有关java的编译过程-类文件存在词法或语法错误时

本文详细解析了Java类编译过程中的错误处理机制,包括语法和词法错误的即时中断,以及语义错误的延迟检测。通过具体示例展示了编译器如何在不同阶段识别并报告错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结

1)当java类文件中存在语法或词法错误时,在编译过程中的第一步(解析文件)就会中断;

2)到了语法分析阶段,一处发现错误,并不会中断,即我们会看到多个出错的提示信息;

注意:有时候自动化提示出错脚本需要注意第一种情况的存在;

简单示例:类编译过程

[解析开始时间 HelloWorld.java]
[解析已完成时间 10ms]
[源文件的搜索路径: .,/home/luogw/dev-tool/jdk/jdk1.6.0_34/lib]
[类文件的搜索路径: /home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/resources.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/rt.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/sunrsasign.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/jsse.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/jce.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/charsets.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/modules/jdk.boot.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/classes,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/ext/localedata.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/ext/dnsns.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/ext/sunjce_provider.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/ext/sunpkcs11.jar,.,/home/luogw/dev-tool/jdk/jdk1.6.0_34/lib]
[正在装入 java/lang/Object.class(java/lang:Object.class)]
[正在装入 java/lang/String.class(java/lang:String.class)]
[正在检查 HelloWorld]
[正在装入 java/lang/System.class(java/lang:System.class)]
[正在装入 java/io/PrintStream.class(java/io:PrintStream.class)]
[正在装入 java/io/FilterOutputStream.class(java/io:FilterOutputStream.class)]
[正在装入 java/io/OutputStream.class(java/io:OutputStream.class)]
[已写入 HelloWorld.class]
[总时间 101ms]

简单示例:存在语法错误的情况

luogw@ubuntu:~/temp$ javac -verbose HelloWorld.java 
[解析开始时间 HelloWorld.java]
HelloWorld.java:3: 需要 ';'
		int error
		         ^
[解析已完成时间 13ms]
[总时间 25ms]
1 错误


简单示例:存在两处语义错误的情况

luogw@ubuntu:~/temp$ javac -verbose HelloWorld.java 
[解析开始时间 HelloWorld.java]
[解析已完成时间 11ms]
[源文件的搜索路径: .,/home/luogw/dev-tool/jdk/jdk1.6.0_34/lib]
[类文件的搜索路径: /home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/resources.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/rt.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/sunrsasign.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/jsse.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/jce.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/charsets.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/modules/jdk.boot.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/classes,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/ext/localedata.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/ext/dnsns.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/ext/sunjce_provider.jar,/home/luogw/dev-tool/jdk/jdk1.6.0_34/jre/lib/ext/sunpkcs11.jar,.,/home/luogw/dev-tool/jdk/jdk1.6.0_34/lib]
[正在装入 java/lang/Object.class(java/lang:Object.class)]
[正在装入 java/lang/String.class(java/lang:String.class)]
[正在检查 HelloWorld]
[正在装入 java/lang/System.class(java/lang:System.class)]
[正在装入 java/io/PrintStream.class(java/io:PrintStream.class)]
[正在装入 java/io/FilterOutputStream.class(java/io:FilterOutputStream.class)]
[正在装入 java/io/OutputStream.class(java/io:OutputStream.class)]
HelloWorld.java:5: 找不到符号
符号: 方法 error1()
位置: 类 HelloWorld
		new HelloWorld().error1();
		                ^
HelloWorld.java:6: 找不到符号
符号: 方法 error2()
位置: 类 HelloWorld
		new HelloWorld().error2();
		                ^
[总时间 99ms]
2 错误



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值