JVM规范(五)特定方法
来源:互联网 发布:sql字符串中的单引号 编辑:程序博客网 时间:2024/06/05 09:23
Special Method
Instance Initialization Methods(实例初始化方法)
一个类可以有0个或者多个实例初始化方法,每个通常都对应一个用java程序语言编写的构造器。
如果满足以下条件可看作是一个实例初始化方法:
- 在类中定义,而非接口。
- 它有专有名字init.
- 它返回空
在一个类中,其他命名为init的方法不是实例初始化方法。在一个接口,任何一个名字为init的方法都不是实例初始化方法。这些方法不能被java虚拟机指令调用,其在格式检查时被拒绝。
一个实例初始化方法的声明与使用是受Java虚拟机的约束的。对于其声明,方法的access_flags项和code数组是受约束的,对于其使用,一个实例初始个方法仅会被invokespecial指令在未初化的类实例上调用。
注:因为方法名init在java程序语言中不是个有效的标识符,它不能再使用java程序语言的程序中直接书写。
Class Initialization Methods
一个类或者接口至少有一个类或者实例初始化方法,且其初始化是通过Java虚拟机调用那个方法完成。
如果满足以下条件则是一个类或者接口初始化方法:
- 名字为cinit.
- 返回空
- 在一个class文件中,版本号为51.0或者更高,方法拥有ACC_STATIC标志集且没有参数。
class文件中其他名字为cinit的方法不是类或者接口初始化方法,它们从不会被Java虚拟机自身调用,也不会被虚拟机指令调用,会在格式检查时被拒绝。
注:cinit同样不能在使用Java程序语言编写的程序中使用。
Signature Polymorphic Methods
一个方法满足如下条件为signature(签名) polymorphic(多态的):
- 在java.lang.invoke.MethodHandle类或者java.lang.invoke.VarHandle类中声明。
- 拥有单一格式的Object数组类型的参数。
- 拥有ACC_VARARGS和ACC_NATIVE标志集。
Java虚拟机在invokevirtual指令中对Signature Polymorphic方法特殊对待,目的是达到方法句柄的调用或者被指向java.lang.invoke.VarHandle实例的变量的访问的目的。
一个方法句柄是动态强类型的且直接可执行的引用底层方法、构造函数、域(field)、或者类似的带有可选的参数传递和结果返回的底层操作。一个java.lang.invoke.VarHandle实例对一个变量或者变量簇,包括静态域、非静态域、数组元素或者堆外数据结构的动态强类型引用。可以查看SE平台API中的java.lang.invoke包查看查阅更多信息。
- JVM规范(五)特定方法
- JVM规范一(简介)
- JVM规范二(数据类型)
- JVM规范(四)Frames
- JVM规范中的五大java内存区域
- JVM规范
- jvm面试题(五)
- JVM规范(三)内存区域
- JVM学习笔记(五):根据字节码指令介绍方法执行流程
- 聊聊JVM(五)从JVM角度理解线程
- JVM调优总结(五)--调优方法及反思
- WCF编码规范(五)实例管理
- c++编程规范学习笔记(五)
- (五)设计博客内容规范
- BlueTooth蓝牙协议规范(五)
- 代码编程:(五)函数规范
- Java JVM(五):JDK8 新特性
- JVM(五) 类的连接
- Spring Boot 自定义favicon.ico
- JAVA中的移位运算
- C语言数据结构将链串里所有值为x的字符删除
- 线程的基础学习之创建线程
- eclipse对Tomcat应用进行远程调试
- JVM规范(五)特定方法
- Power BI 疑难问题辨析
- django -----原生SQL语句查询与前端数据传递
- 消息中间件概述 mq工作原理
- lesson26 用switch语句解决问题
- JVM原理
- SQL中EXISTS的用法
- 文章标题4.3(2)
- 线程--Thread和Runnable创建线程的区别