HelloWorld是每一个java程序员都知道的,几乎是所有java入门书籍的开始。它很简单,但是一个简单的开始会将我们引向更加深入更加复杂的过程。
HelloWorld.java
1.为什么一切都以类开始
java程序是建立在类上的,每一个方法和类都在类中,这是由于java语言是以对象为特征的,以对象为特征的语言有很多优点,例如:模块化,可扩展性等等
2.main方法----程序的入口
main方法是程序的入口并且它是static的,“staitc”意味着这个方法是类的一部分而不是对象的一部分。
为什么要这样?为什么我们不拿一个非静态的方法作为程序的入口呢?
如果方法不是静态的,那么一个对象需要创建第一个使用方法。因为该方法具有在对象上被调用。对于一个入口,这是不现实的。因此,程序的入口方法是静态的。
参数“String [] args”表明一个字符串数组能够被发送到程序中,帮助程序初始化
3.HelloWorld 的字节码
执行一段程序,java文件首先被编译成字节码,存放在.class文件中
那么字节码长什么样子呢?
字节码本事是不可读的,如果我们用16进制编辑器,它就像下面这个样子
我们能够看到在字节码上有很多操作码(例如:CA,4C,等),每一个都对应相应的助记码。助记码也是不可读的,但是我们能使用javap去看来自.class文件的助记码
javap -classpath . -c HelloWorld
Compiled from "HelloWorld.java"
public class HelloWorld extends java.lang.Object{
public HelloWorld();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3; //String Hello World
5: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
}
4.它在JVM里是怎么执行的
现在我们的问题时jvm是如何加载类和调用主方法的
在main方法执行之前,jvm需要加载,连接和初始化类。将class以二进制形式放进Jvm中。连接二进制组成码放进正在运行的状态的jvm中。连接分为三步:确认,准备,选择解决。确认class/interface 结构是否正确,准备涉及分配存储。最后是初始化步骤,类变量都给予适当的初始值。