1.代码编写
public class Hello {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("HelloWorld");
}
}
深入细节: 类名和文件名的关系
一个 .java 文件,可以有多个类,但是文件名只能有一个,用哪一个类名来充当文件名呢?其实文件名是无所谓的,
因为将来用javac进行编译的时候,最终会生成多个 .class 文件,每一个类对应个 .class 文件。运行时只要运行
对应的 .class文件就可以了,这时 .java 文件就显得没什么用了( 运行时不需要 )。
此段代码文件名为Hello2,java,编译通过
class Hello3 {
public static void main(String[] args) {
System.out.println("Hello3");
}
}
class Hello4 {
public static void main(String[] args) {
System.out.println("Hello4");
}
}
但是当你的类被public修饰时,此时文件名必须和该类保持一致(例如 public class A{} 只能放在
A.java文件中,否则在用javac编译时会提示错误:类A是公共的,应在名为A.java的文件中声明)。
也就是说在同一个.java文件中,不应该出现2个或2个以上的public class。如果有一个public class
类,就应该让文件名和此类名相同;那如果没有呢,即所有的class都没有修饰符,那么可以给该文
件随便起名字,甚至可以不和任意一个类同名,哪怕是汉字名称都可以,但是后缀还是要有.java的。
此段代码文件名为测试,java,编译通过
public class 测试 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("类名是中文也可以");
}
}
问题:SUN为什么规定public class的名字与文件名一致?(目前找到的最佳解答)
JAVA把一个.java文件叫做一个编译单元(Compiling Unit), 一个编译单元中可以有N个类, 但最多只能有一个public类. 而且, 如果有一个public类的话, 那么这个类的类名必须与.java文件的名称一致.
对于这个规定, 我个人认为是与JAVA的隐藏机制和开源策略有关的.
因为, 根据JAVA的隐藏机制, 只有public的类才可以被其他人直接使用, 也就是说, 对于其他人来说, 他所熟悉的只有这个public类的类名, 这样, 如果源文件的名字和它保持一致, 就可以非常方便地让别人找到这个源文件.
总结
1.Java保存的文件名必须与类名一致;
2.如果文件中只有一个类,文件名必须与类名一致;
3.一个Java文件中只能有一个public类;
4.如果文件中不止一个类,文件名必须与public类名一致;
5.如果文件中不止一个类,而且没有public类,文件名可与任一类名一致。
2.编译阶段
编译器创建class字节码文件
3.执行阶段