Java常见错误信息及解决方法
编译错误
Windows系统下常见编译错误
'javac' is not recognized as an internal or external command, operable program or batch file.
此提示信息表示Windows系统找不到编译器(compiler)。
解决方法:(假设JDK的安装位置为C:\jdk1.7.0)
1. 在命令行中包含JDK的安装路径;
>C:\jdk1.7.0\bin\javac HelloWorldApp.java
默认情况下,编译器(javac)在JDK安装路径下的bin文件夹中。
2. 在Windows的环境变量中包含JDK的安装路径。
PATH变量的值为:<原PATH值末尾>;C:\jdk1.7.0\bin
添加完PATH变量后,可以在命令行直接使用编译器(javac),而不用输入编译器所在的路径。
Class names, "HelloWorldApp", are only accepted if annotation processing is explicitly requested
在编译时发现此提示信息,表示在编译文件时没有添加.java后缀。编译java文件的命令行为javac HelloWorldApp.java,而不是javac HelloWorldApp。
UNIX系统下常见编译错误
javac: Command not found
此提示信息为UNIX系统找不到编译器(javac)。
解决方法:(假设JDK安装位置为 /usr/local/jdk1.7.0)
1. 在命令行中包含JDK的安装路径;
/usr/local/jdk1.7.0/javac HelloWorldApp.java
主要是加入编译器(javac)所在位置。
2. 修改系统的PATH变量。
需要根据使用的Shell修改,不同的Shell修改方式不同。
Class name, 'HelloWorldApp', are only accepted if annotation processing is explicitly requested
此提示信息与Windows系统下相同,都表示编译文件时,命令行中的文件名没有加入.java后缀。
语法错误(所有平台) - Synatx Errors
在程序源文件中有输入错误的时候,编译器会显示语法错误消息。错误信息包含错误发生的文件名、行号、错误类型、出错行代码、出错代码位置。
如以下出错信息:
testing.java:14:';' expected.
System.out.println("Input has " + count + " chars.")
^
1 error
出错文件名:testing.java
出错行号:第14行
出错信息:需要分号(;)
出错行代码:System.out.println("Input has " + count + " chars.")
出错位置:^指示位置,出错代码的末尾
错误数:1
如果由于缩进、代码块范围、缺少分号等错误,编译器不能准确定位错误位置,则会给出多个错误消息。
任何编译错误的出现都表示编译不成功,且不会生成.class文件。需要找到并修复所有的编译错误,然后再重新编译。
语义错误
编译器除了检查语法以外,还会检查基础语义,例如没有定义的变量,没有实例化的对象被直接使用等。
运行时错误
Windows/UNIX系统下的运行时错误消息
Exception in thread "main" java.lang.NoClassDefFoundError: HellowWorldApp
以上错误表示启动器程序(java)没有找到可以执行的字节码(bytecode)文件(.class)。Java启动器程序默认先在当前目录下寻找被启动的.class文件。需要将当前工作目录切换到包含目标.class文件的目录下,再次执行java HelloWorldApp。
Could not find or load main class HelloWorldApp.class
以上错误信息表示执行了java HelloWorldApp.class。在命令行中,java命令后应该用需要用到的类名,而不是.clas的文件名。正确的执行方式为java HelloWorldApp。
Exception in thread "main" java.lang.NoSuchMethodError:main
以上错误信息表示所用到的类中没有包含main函数。Java虚拟机要求被java命令执行的的类中必须包含一个main函数。
Ref: http://docs.oracle.com/javase/tutorial/getStarted/problems/index.html
编译错误
Windows系统下常见编译错误
'javac' is not recognized as an internal or external command, operable program or batch file.
此提示信息表示Windows系统找不到编译器(compiler)。
解决方法:(假设JDK的安装位置为C:\jdk1.7.0)
1. 在命令行中包含JDK的安装路径;
>C:\jdk1.7.0\bin\javac HelloWorldApp.java
默认情况下,编译器(javac)在JDK安装路径下的bin文件夹中。
2. 在Windows的环境变量中包含JDK的安装路径。
1) Start > Control Panel > System > Advanced > Environment Variables;
(开始 > 控制面板 > 系统 > 高级系统设置 > 环境变量...)
PATH变量的值为:<原PATH值末尾>;C:\jdk1.7.0\bin
添加完PATH变量后,可以在命令行直接使用编译器(javac),而不用输入编译器所在的路径。
Class names, "HelloWorldApp", are only accepted if annotation processing is explicitly requested
在编译时发现此提示信息,表示在编译文件时没有添加.java后缀。编译java文件的命令行为javac HelloWorldApp.java,而不是javac HelloWorldApp。
UNIX系统下常见编译错误
javac: Command not found
此提示信息为UNIX系统找不到编译器(javac)。
解决方法:(假设JDK安装位置为 /usr/local/jdk1.7.0)
1. 在命令行中包含JDK的安装路径;
/usr/local/jdk1.7.0/javac HelloWorldApp.java
主要是加入编译器(javac)所在位置。
2. 修改系统的PATH变量。
需要根据使用的Shell修改,不同的Shell修改方式不同。
Class name, 'HelloWorldApp', are only accepted if annotation processing is explicitly requested
此提示信息与Windows系统下相同,都表示编译文件时,命令行中的文件名没有加入.java后缀。
语法错误(所有平台) - Synatx Errors
在程序源文件中有输入错误的时候,编译器会显示语法错误消息。错误信息包含错误发生的文件名、行号、错误类型、出错行代码、出错代码位置。
如以下出错信息:
testing.java:14:';' expected.
System.out.println("Input has " + count + " chars.")
^
1 error
出错文件名:testing.java
出错行号:第14行
出错信息:需要分号(;)
出错行代码:System.out.println("Input has " + count + " chars.")
出错位置:^指示位置,出错代码的末尾
错误数:1
如果由于缩进、代码块范围、缺少分号等错误,编译器不能准确定位错误位置,则会给出多个错误消息。
任何编译错误的出现都表示编译不成功,且不会生成.class文件。需要找到并修复所有的编译错误,然后再重新编译。
语义错误
编译器除了检查语法以外,还会检查基础语义,例如没有定义的变量,没有实例化的对象被直接使用等。
运行时错误
Windows/UNIX系统下的运行时错误消息
Exception in thread "main" java.lang.NoClassDefFoundError: HellowWorldApp
以上错误表示启动器程序(java)没有找到可以执行的字节码(bytecode)文件(.class)。Java启动器程序默认先在当前目录下寻找被启动的.class文件。需要将当前工作目录切换到包含目标.class文件的目录下,再次执行java HelloWorldApp。
Could not find or load main class HelloWorldApp.class
以上错误信息表示执行了java HelloWorldApp.class。在命令行中,java命令后应该用需要用到的类名,而不是.clas的文件名。正确的执行方式为java HelloWorldApp。
Exception in thread "main" java.lang.NoSuchMethodError:main
以上错误信息表示所用到的类中没有包含main函数。Java虚拟机要求被java命令执行的的类中必须包含一个main函数。
Ref: http://docs.oracle.com/javase/tutorial/getStarted/problems/index.html