我们从java HelloWorld学到了什么?

      HelloWorld是每一个java程序员都知道的,几乎是所有java入门书籍的开始。它很简单,但是一个简单的开始会将我们引向更加深入更加复杂的过程。

     

    HelloWorld.java

public class HelloWorld { 
         /** * @param args */
     public static void main(String[] args) {
                 // TODO Auto-generated method stub
                System.out.println("Hello World");
     }
 }

1.为什么一切都以类开始

java程序是建立在类上的,每一个方法和类都在类中,这是由于java语言是以对象为特征的,以对象为特征的语言有很多优点,例如:模块化,可扩展性等等

 

2.main方法----程序的入口

        main方法是程序的入口并且它是static的,“staitc”意味着这个方法是类的一部分而不是对象的一部分。

        为什么要这样?为什么我们不拿一个非静态的方法作为程序的入口呢?

        如果方法不是静态的,那么一个对象需要创建第一个使用方法。因为该方法具有在对象上被调用。对于一个入口,这是不现实的。因此,程序的入口方法是静态的。

        参数“String []  args”表明一个字符串数组能够被发送到程序中,帮助程序初始化

 

3.HelloWorld 的字节码

          执行一段程序,java文件首先被编译成字节码,存放在.class文件中

          那么字节码长什么样子呢?

         字节码本事是不可读的,如果我们用16进制编辑器,它就像下面这个样子

   

java-bytecode-example

我们能够看到在字节码上有很多操作码(例如: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 结构是否正确,准备涉及分配存储。最后是初始化步骤,类变量都给予适当的初始值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值