一、执行流程
1、示例
//第一个Java程序
public class Hello{public static void main(String[] args){System.out.println("Hello World!");}
}
编译:
执行:
我们可以看到这里的是类名,而不是字节码文件名 Hello.class ,这是因为对于java
命令是用于启动 Java 虚拟机(JVM)并执行编译后的 Java 应用程序的,Java 虚拟机(JVM)在运行时期待的是一个类的名称,而不是文件名或文件路径。
运行结果:
2、编译
使用 javac 工具将 java 源文件编译成 JVM 可以识别的字节码文件,即为 .class 文件。
如果源文件中没有错误,最终编译完成会出现一个 Hello.class 文件。
上面的指令时在 Hello.java 文件所在的目录下使用的,如果不是在源文件的目录下,要加上具体路径。使用 javac 可以直接在源文件上加上路径:
如果使用java指令的话,要配合 -classpath
选项来指定类的路径,或者使用 -cp
作为 -classpath
的简写:
也可以在系统环境变量中设置 CLASSPATH
环境变量,这样 Java 类加载器如果在当前的路径下找不到,则使用系统变量中的路径来查找类文件。
3、执行
我们通过使用 java 这个指令运行 Hello.class 文件,它的本质就是 java.exe 将这个字节码文件装载在 JVM 中执行。
当我们对源文件更改之后,需要再次编译,才能使 .class 文件更新,然后再运行,才能使执行后的结果更新。
二、一些知识点
1、每个源文件中只能有一个 public 类
Java 中每个源文件中只能有一个 public 类,而且这个 public 类的类名必须和源文件文件名相同,也就是说,如果你的一个源文件中的 public 类的类名为 Hello ,那你的源文件名就要是Hello.java。
其他的非 public 类个数不限。
2、对一个 Java 源文件编译,会产生一个对应的 .class 文件
在对一个 Java 源文件编译时,每一个类都会产生一个对应的 .class 文件。
//第一个Java程序
public class Hello{public static void main(String[] args){System.out.println("Hello World!");}
}//非public类
class Dog {}//非public类
class Tiger {}
当我们对以上的代码进行编译后,会发现产生了对应的 .class 文件:
3、可以将 main 方法放到非 public 类中
我们还可以将 main 方法放到非 public 类中,然后指定运行这个非 public 类,这样入口方法就变成了非 public 类的 main 方法。
//第一个Java程序
public class Hello{public static void main(String[] args){System.out.println("Hello World!");}
}//非public类
class Dog {public static void main(String[] args) {System.out.println("This is Dog.");}
}//非public类
class Tiger {public static void main(String[] args) {System.out.println("This is Tiger.");}
}
我们可以对上面的代码编译后,然后指定运行特定的类: