1.4 Java程序开发体验--Hello World
1. 将Java代码编写到扩展名为.java的文件中。
2. 通过javac命令对该java文件进行编译。
3. 通过java命令对生成的class文件进行运行。
步骤一:编写
• 选择最简单的编辑器记事本。
• 敲入代码
class Demo
{}
• 将文件保存成Demo.java,这个文件是存放java代
码的文件,称为源文件。
步骤二:编译
• 有了java源文件,将其编译成JVM可以识别的文件。
• 在该源文件目录下,通过javac编译工具对Demo.java文件进行编译。
• 如果程序没有错误,没有任何提示,但在当前目录下会出现一个Demo.class文件,该文件称为字节码文件,也是可以执行的java的程序。
步骤三:运行
• 有了可执行的java程序(Demo.class字节码文件)
• 通过运行工具java.exe对字节码文件进行执行。
• 出现提示:缺少一个名称为main的方法。
• 因为一个程序的执行需要一个起始点或者入口,所以在Demo类中的加入public static void main(String[] args){}
• 对修改后的Demo.java源文件需要重新编译,生成新的class文件后,在进行执行。
• 发现没有编译失败,但也没有任何效果,因为并没有告诉JVM要帮我们做什么事情,也就是没有可以具体执行的语句。
• 想要和JVM来个互动,只要在main方法中加入一句
• System.out.println("hello java");在重新编译,运行即可。
深入细节: 类名和文件名的关系
一个.java 文件,可以有多个类,但是文件名只能有一个,用哪一个类名来充当文件名呢?其实文件名是无所谓的,因为将来用javac进行编译的时候,最终会生成多个 .class 文件,每一个类对应个 .class 文件。运行时只要运行对应的 .class文件就可以了,这时.java文件就显得没什么用了( 运行时不需要 )。
此段代码文件名为Hello,java,编译通过
class Hello2 {
public static void main(String[] args) {
System.out.println("Hello2");
}
}
class Hello3 {
public static void main(String[] args) {
System.out.println("Hello3");
}
}
但是当你的类被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("类名是中文也可以");
}
}
JAVA把一个.java文件叫做一个编译单元(Compiling Unit), 一个编译单元中可以有N个类, 但最多只能有一个public类. 而且, 如果有一个public类的话, 那么这个类的类名必须与.java文件的名称一致.
对于这个规定, 我个人认为是与JAVA的隐藏机制和开源策略有关的.
因为, 根据JAVA的隐藏机制, 只有public的类才可以被其他人直接使用, 也就是说, 对于其他人来说, 他所熟悉的只有这个public类的类名, 这样, 如果源文件的名字和它保持一致, 就可以非常方便地让别人找到这个源文件.
总结
1.Java保存的文件名必须与类名一致;
2.如果文件中只有一个类,文件名必须与类名一致;
3.一个Java文件中只能有一个public类;
4.如果文件中不止一个类,文件名必须与public类名一致;
5.如果文件中不止一个类,而且没有public类,文件名可与任一类名一致。