我在这里做错了什么:
class Helo {
// main: generate some simple output
public static void main (String[] args) {
System.out.println ("Hello, world."); // print one line
System.out.println ("How are you?"); // print another
}
}
当我进入终端时,我会这样做:
cd ~
javac Atempt2.java (//that's the file name)
java Atempt2
然后它给了我这个错误信息:
Exception in thread "main" java.lang.NoClassDefFoundError: Atempt2
所有这一切都是我做的和发生的事情:
david-allenders-macbook-pro:~ davidallender$ cd ~
david-allenders-macbook-pro:~ davidallender$ javac Atempt2.java
david-allenders-macbook-pro:~ davidallender$ java Atempt2
Exception in thread "main" java.lang.NoClassDefFoundError: Atempt2
david-allenders-macbook-pro:~ davidallender$
我是新手,所以请以非常简单的方式解释。
感谢。
答案 0 :(得分:9)
自从我完成任何java工作以来已经有一段时间了,但我很确定你的类名需要与你的文件名相匹配。
答案 1 :(得分:7)
javac使用类名生成输出而不是文件名。 所以它会生成一个Helo.class类文件 java将取一个类名并在相应的类文件中调用main函数,这里是Hello.class。
抛出ClassNotFoundError是因为javac从未生成Atemp2类文件,因为源文件中没有Atemp2类。
答案 2 :(得分:6)
将您的Atempt2.java
重命名为Hello.java
以便继续,然后:
javac Helo.java
java Helo
答案 3 :(得分:3)
变化:
class Helo
到
class Atempt2
在源文件中。
声明类的.java文件必须具有与声明的类名匹配的文件名。
答案 4 :(得分:1)
文件名必须与文件中定义的public class
的名称相匹配。在这种情况下,您要么必须将文件命名为“Helo.java”,要么将该类重命名为Atempt2
。
答案 5 :(得分:1)
这是从java编程开始的最基本的。你编写的任何程序文件的名称必须与程序的公共类相匹配。 在你的程序中,文件的公共类是Helo,所以你的文件名必须是Helo.java.Here编译器能够编译但JVM将搜索Helo.class文件来运行。由于没有Helo.class文件,您在线程“main”中获得运行时异常异常java.lang.NoClassDefFoundError:Atempt2
答案 6 :(得分:1)
补充 josefx 的答案。
编译器的参数(javac
)是要编译的文件的名称(正如您所做的那样)。
另一方面,虚拟机(java
)获取要执行main
方法的类的名称。
一个选项是
javac Atempt2.java // the file name
java Helo // the class name
通常,以与该类相同的方式命名文件是个好主意。对于public class
,这是必须的(由编译器检查)。