java学习笔记——程序运行过程

来源:互联网 发布:晕血学生物 知乎 编辑:程序博客网 时间:2024/06/14 14:31

class Phone{

                       String pcolour;

                       String psize;

                    void telephone(String num){

                             System.out.println("calling");

                              }

                     void information(String text,String num){

                           System.out.println("send a message");

             }

}


class Main{

   public static void main(String []args){

       Phone noble=new Phone;

     noble.telephone("12306");

   }

}

源文件创建完成后,由被编译为.class文件,java编译一个类时,若这个类所依赖的另一个类还未被编译,编译器会先编译这个被依赖的类,然后再引用,否则,就直接引用。编译过后的程序可在javaJVM上运行。JVM大致可分为三个模块:方法区、堆、栈。

方法区:加载class文件
堆:存放实例化对象
栈:方法的运行

在本例中,具体过程如下:编译java程序得到Main.class文件和Phone.class文件后,在命令行上输入java Main。JVM加载Main.class文件到方法区,在加载过程中,分析此类有一个特殊的方法main,并运行main方法。它的第一条命令为Phone noble=new Phone;JVM创建一个Phone对象,此时方法区中是没有Phone.class的信息的,JVM加载Phone.class,把它的类型信息放到方法区中,然后,JVM在堆区里为一个新的Phone分配实例内存,然后调用构造函数初始化Phone实例(这个Phone实例有着指向方法区的Phone.class的类型信息)。执行noble.telephone("12306");时,JVM根据noble找到Phone对象,根据Phone对象持有的引用定位到方法区中Phone.class的类型信息的方法表,获得telephone()函数的字节码地址。开始执行telephone()函数。


原创粉丝点击