Java教程已针对JDK 8编写。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言功能的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或不推荐使用的选项的信息,请参阅JDK发布说明。
Microsoft Windows系统上的常见错误信息
'javac' 不是内部或外部命令,也不是可运行的程序或批处理文件
如果你收到这个错误,表示Windows无法找到编译器(javac
)。
以下是一种告诉Windows如何找到javac
的方法。假设你将JDK安装在C:\jdk1.8.0
中。在命令提示符下,你需要输入以下命令并按Enter键:
C:\jdk1.8.0\bin\javac HelloWorldApp.java
如果你选择这个选项,每次编译或运行程序时,都需要在javac
和java
命令前加上C:\jdk1.8.0\bin\
。为了避免这样额外的输入,可以参考JDK 8安装说明中的更新PATH变量部分。
类名'HelloWorldApp'只有在显式请求注释处理时才被接受
如果你收到这个错误,表示在编译程序时忘记了包含.java
后缀。记住,命令应该是javac HelloWorldApp.java
而不是javac HelloWorldApp
。
UNIX系统上的常见错误信息
javac: Command not found
如果你收到这个错误,表示UNIX找不到编译器javac
。
以下是一种告诉UNIX如何找到javac
的方法。假设你将JDK安装在/usr/local/jdk1.8.0
中。在命令提示符下,你需要输入以下命令并按Enter键:
/usr/local/jdk1.8.0/javac HelloWorldApp.java
注意:如果你选择这个选项,每次编译或运行程序时,都需要在javac
和java
命令前加上/usr/local/jdk1.8.0/
。为了避免这样额外的输入,你可以将这些信息添加到你的PATH变量中。具体步骤将根据你当前运行的shell而有所不同。
类名'HelloWorldApp'只有在显式请求注释处理时才被接受
如果你收到这个错误,表示在编译程序时忘记了包含.java
后缀。记住,命令应该是javac HelloWorldApp.java
而不是javac HelloWorldApp
。
语法错误(所有平台通用)
如果你在程序中拼写错误,编译器可能会发出语法错误。错误消息通常会显示错误的类型、检测到错误的行号、该行的代码以及错误在代码中的位置。以下是因为省略了语句末尾的分号(;
)而导致的错误示例:
Testing.java:8: 错误: 应有';' count++ ^ 1 个错误
如果你看到任何编译器错误,那么你的程序没有成功编译,编译器也没有创建.class
文件。仔细检查程序,修复任何错误,并再试一次。
语义错误
除了验证程序在语法上是否正确之外,编译器还检查其他基本正确性。例如,每次你使用一个未初始化的变量时,编译器都会警告你:
Testing.java:8: 错误: 变量 count 可能未被初始化 count++; ^ Testing.java:9: 错误: 变量 count 可能未被初始化 System.out.println("输入中有 " + count + " 个字符。"); ^ 2 个错误
同样,你的程序没有成功编译,编译器也没有创建.class
文件。修复错误后再试一次。
Microsoft Windows系统上的错误信息
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp
如果你收到这个错误,java
找不到你的字节码文件HelloWorldApp.class
。
java
尝试查找.class
文件的位置之一是当前目录。所以,如果你的.class
文件在C:\java
中,你应该将当前目录更改为该目录。要更改目录,键入以下命令并按Enter:
cd c:\java
提示符应该变为C:\java>
。如果你在提示符处输入dir
,你应该看到你的.java
和.class
文件。现在再次输入java HelloWorldApp
。
如果仍然有问题,你可能需要更改CLASSPATH变量。要查看是否需要这样做,请尝试使用以下命令清除classpath。
set CLASSPATH=
现在再次输入java HelloWorldApp
。如果程序现在可以工作,你将需要更改CLASSPATH变量。要设置此变量,请参考JDK 8安装说明中的更新PATH变量部分。CLASSPATH变量的设置方式相同。
无法找到或加载主类 HelloWorldApp.class
初学者程序员常犯的一个错误是尝试在编译器创建的.class
文件上运行java
启动器。例如,如果你尝试使用java HelloWorldApp.class
而不是java HelloWorldApp
来运行程序,就会出现这个错误。记住,参数是你想要使用的类的名称,而不是文件名。
主线程中的异常 "main" java.lang.NoSuchMethodError: main
Java虚拟机要求您执行的类必须有一个main
方法作为应用程序的入口点。《深入了解“Hello World!”应用程序》详细讨论了main
方法。
UNIX系统上的错误信息
主线程中的异常 "main" java.lang.NoClassDefFoundError: HelloWorldApp
如果您收到此错误消息,java
无法找到您的字节码文件HelloWorldApp.class
。
java
尝试查找字节码文件的位置之一是您的当前目录。因此,例如,如果您的字节码文件位于/home/jdoe/java
中,您应该将当前目录更改为该目录。要更改目录,请在提示符处键入以下命令并按回车:
cd /home/jdoe/java
如果在提示符处输入pwd
,您应该看到/home/jdoe/java
。如果在提示符处输入ls
,您应该看到您的.java
和.class
文件。现在再次输入java HelloWorldApp
。
如果仍然存在问题,您可能需要更改CLASSPATH环境变量。要查看是否需要此操作,请尝试使用以下命令清除类路径。
unset CLASSPATH
现在再次输入java HelloWorldApp
。如果程序现在可以正常运行,您将需要以与上述PATH变量相同的方式更改CLASSPATH变量。
主线程中的异常 "main" java.lang.NoClassDefFoundError: HelloWorldApp/class
初学者常犯的一个错误是尝试在编译器创建的.class
文件上运行java
启动器。例如,如果您尝试使用java HelloWorldApp.class
而不是java HelloWorldApp
来运行程序,您将收到此错误。请记住,参数是您想要使用的类的名称,而不是文件名。
主线程中的异常 "main" java.lang.NoSuchMethodError: main
Java虚拟机要求您执行的类必须有一个main
方法作为应用程序的入口点。《深入了解“Hello World!”应用程序》详细讨论了main
方法。
小程序或Java Web Start应用程序被阻止
如果您在浏览器中运行应用程序并收到安全警告,指示应用程序被阻止,请检查以下内容:
验证JAR文件清单中的属性是否针对应用程序运行的环境设置正确。Permissions属性是必需的。在NetBeans项目中,您可以通过展开项目文件夹并双击manifest.mf在NetBeans IDE的文件选项卡中打开清单文件。
验证应用程序是否由有效证书签名,并且证书位于签名者CA密钥库中。
如果您正在运行本地小程序,请设置一个用于测试的Web服务器。您还可以将应用程序添加到例外站点列表中,该列表在Java控制面板的安全选项卡中管理。