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

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()函数。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值