to JeromeLiu(烛光): javac是不区分大小写的,这个命令只是寻找相应的文件名,你的文件名可以是Hello.javac、HELLO.java、也可以是HeLLo.java。但是在编译过程中,最终能通过的是:文件名与类名一致的那个文件。其实在命令javac *.java中,这个*应该是你的类名,而不应该是你的文件名。如果用JBuilder、Eclipse或者JCreator写的,就不会有这样的问题,因为在编译时,如果类名和文件名不一致,是不能通过编译的。 我想你是用notepad写的吧?完成后可以存为任何名字,但在编译时却不一定通过。编译通过后生成的class文件同样是根据类名来生成。由于你的类名是HELLO,所以生成的是HELLO.CLASS。
情况2: 文件名:D:\Hello.java public class HELLO { public static void main(String[] args) { System.out.println("Hello,world!"); } } 这个类的名字应该是HELLO而不是Hello,你应该把public class HELLO改成public class Hello
运行则是调用与文件名相同的类,注意大小写是敏感的!
Hello.class与HELLO.class是两个完全不同的类。
文件名:D:\HELLO.java
^^^^^
情况2:
文件名:D:\Hello.java
public class HELLO {
public static void main(String[] args) {
System.out.println("Hello,world!");
}
}
D:\>javac Hello.java --错误
D:\>javac HELLO.java --正确 大家看这里,这里为什么可以通过??请解释
D:\>javac HeLLo.java --错误
D:\>javac HELLO.java --正确 大家看这里,这里为什么可以通过??请解释
因为public class HELLO {
这里是大写的。
此问题无需深究,按规范定义类名,保证public类名与所属文件名大小写相同,也许其他操作系统下如上编译通不过,也许下一个版本会排除此现象。
如要文件是Hello
类名要为 class Hello如要文件是HELLO
类名要为 class HELLO
如果你的HELLO类加了public 修饰,那么文件名必须和这个类名相同,也就是要d:\HELLO.javaplayboylee(老婆说我是最棒的) :
一个JAVA程序,只能有一个public,如果那个类用了public,那么类名和文件名必须一样.-----------------------
不一定的,上面语句说了,你们没有仔细看回复:
public HELLO类保存在Hello.java内,而javac HELLO.java未报错,且生成HELLO.class
这样的现象怎么解释
但因为你的类是public HELLO,而文件名是hello.java
那么编译器执行javac Hello.java时发现文件名不是HELLO.JAVA 所以报错
执行javac HELLO.java时则可以顺利通过,因为类名和文件名一样(Hello==HELLO)
javac是不区分大小写的,这个命令只是寻找相应的文件名,你的文件名可以是Hello.javac、HELLO.java、也可以是HeLLo.java。但是在编译过程中,最终能通过的是:文件名与类名一致的那个文件。其实在命令javac *.java中,这个*应该是你的类名,而不应该是你的文件名。如果用JBuilder、Eclipse或者JCreator写的,就不会有这样的问题,因为在编译时,如果类名和文件名不一致,是不能通过编译的。
我想你是用notepad写的吧?完成后可以存为任何名字,但在编译时却不一定通过。编译通过后生成的class文件同样是根据类名来生成。由于你的类名是HELLO,所以生成的是HELLO.CLASS。
文件名:D:\Hello.java
public class HELLO {
public static void main(String[] args) {
System.out.println("Hello,world!");
}
}
这个类的名字应该是HELLO而不是Hello,你应该把public class HELLO改成public class Hello
--
这里前提应该是:文件中有public类。
那么*是你的文件中的public的类名。