码迷,mamicode.com
首页 > 其他好文 > 详细

jvm方法调用

时间:2014-08-14 03:57:38      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:方法调用

java程序在运行中无时无刻不再进行着方法的调用。方法调用和方法执行是两个过程。方法调用是指找到要执行的方法版本。方法执行是真正的执行方法。

java的方法调用是由两个重要对象来决定的,一个是编译器,一个是jvm。不是说编译器和jvm是两个独立的对象啦,只是对应程序运行两个不同的阶段,即编译期和运行期。java里的方法调用可以分为两种,一种是在编译期就能决定的,这种方法大致包括:静态方法、私有方法、实例构造器、父类方法和final修饰的方法。所有方法调用的目标方法在class文件中都是常量池的一条符号引用,方法调用的过程就是把符号引用转化为方法的直接引用。在编译期就能确定方法调用的目标,并且目标方法不会变化的话,在类加载过程中就会直接将符号引用转化为直接引用,这个过程叫静态解析。

另外一种就是在运行期才能确定的。这种方法调用叫做分派,分派也分静态和动态。一个引用类型的变量有其实有两种属性,比方  Animal  a = new Cat();  Animal是a的静态类型或外表类型,而Cat则是a的实际类型,当方法重载时,比如  sayMyName(Animal c)和sayMyName(Cat c)  我们调用sayMyName(a)的时候,实际发生的调用目标方法是sayMyName(Animal c),也就是说这种情况下发生的调用是根据参数的静态类型来判断的,这种调用可以在编译期就可以确定,称之为静态分派。另外一种情况是Animal有 一个方法sayHello(){System.out.println("I am a Animal!");},在Cat里重写了这个方法sayHello(){System.out.println("Meow~~");},  当执行  a.sayHello()时,实际调用的目标方法是Cat里的sayHello,这种方式就叫动态分派。

jvm方法调用,布布扣,bubuko.com

jvm方法调用

标签:方法调用

原文地址:http://abiton.blog.51cto.com/8317381/1539674

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!