在 java 虚拟机中,方法的调用并不等于方法执行,方法调用阶段唯一的任务就是确定被调用的方法的阿布呢不能,不涉及方法内部的棘突执行过程。一切方法调用在class文件里面存储的都只是符号引用,不是方法在实际运行时内存布局中的入口地址。
JVM在解析时, 在调用目标程序代码写好、编译器进行编译时就必须确定下来;
在java中, 符合“编译期可知,运行期不可变” 这个要求的方法主要有:静态方法(与类型直接关联)和私有方法(外部不可访问),这些方法都不能通过继承或者重写来修改,因此他们在类加载阶段进行解析。
与上边对应的 就是在Java虚拟机里边提供了四条方法调用字节码指令:
1.invkestatic:调用静态方法
2.invokespecial:调用实例构造器<init>方法、私有方法和父类方法
3.invokevirtual:调用所有虚方法
4.invokeinterface:调用接口方法
”编译期可知,运行期不可变“ 这类方法 只能被 invokestatic 和 invokespecial 指令调用,包含:
静态方法、私有方法、实例构造器、父类方法。
解析调用是个静态过程,编译期间就完全确定了。
分派调用测可能是静态也可能是动态的,可以分为单分派和多分派这样就有了:
静态单分派
静态多分派
动态单分派
动态多分派
静态分派:(overload)重载
动态分派:(override) 重写
待续....................
相关推荐
总结来说,Java中的多态性主要通过方法的重载和重写,以及JVM的动态分派机制来实现。理解这些原理有助于深入掌握Java的面向对象特性和虚拟机的运作机制。在编程实践中,利用多态可以编写出更加灵活、可扩展的代码。
- `Overload` 指在同一类中重载同名方法。 18. **接口与抽象类的区别**: - 接口只能定义常量和抽象方法。 - 抽象类可以定义变量和具体方法。 19. **静态类与非静态类的区别**: - 静态类成员独立于任何特定...
Java中实现多态的机制主要依赖于继承和接口,多态性表现为方法的重载和重写。 35. 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 垃圾回收器的基本原理是...
在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。...
- 例如,在Java中,如果需要实现一个线程安全的容器类,可以使用组合的方式在内部使用一个非线程安全的容器,并添加必要的同步机制,而不是尝试继承并覆盖容器类的方法。 **2. 不同的测试框架有什么区别?** - ...
在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。...