ASM_Guide - 学习笔记1 - Part 1 Core API:
2. Classess:
2.1 Structure :
2.1.1 Overview:
1. 一个类文件包含以下几部分的内容(In fact a compiled class contains):
<1> A section describing the modifiers(such as public or private),the name, the super class,the interfaces and the
annotations of a field.
可见性(public/private..), 类名称, 超类, 接口,以及Annotation.
<2> One section per field declared in this class . Each section describes the modifiers, the name, the type and the
annotations of a field.
类中声明的每个成员变量,每一个成员变量部分包含可见性,名称,类型和Annotation.
<3> One section per method and constructor declared in this class. Each section describes the modifiters, the name ,
the return and parameter types, and annotations of a method. It also contains the compiled code of the method,
in the form of a sequence of Java bytecode instructions.
类中的每一个方法和构造函数. 每一个方法或者构造函数部分描述了可见性,名称,返回值,参数类型以及方法的Annotation.也
同时包含以Java字节码方式表示的方法编译后的代码.
2. Java源文件与Java class文件的不同之处:
<1> 一个类文件只包含一个类,然而一个Java源文件包含多个类.
<2> 一个类文件不能包含注释.
<3> 一个类文件不能包含package和import部分,因此所有的类型名称必须是全限定名.
<4> 一个重要的不同是: 一个类文件包含一个常量池部分.这个池是一个包含在类文件中定义的所有数值,字符串,其他类型常量.
这些常量只会被定义一次,类文件的其他部分通过他们的索引对常量进行引用.
<5> Java的类型在类文件和Java源文件中的表现方式不同.
3. 类文件各组成部分:
2.1.2 内部名称(Internal name):
在大多数情况下,包含在类或者接口中的类型(例如: 父类,类实现的接口或者方法抛出的异常)都不能作为基本类型或者数组类型,
并且这些类型示类或者接口所必须的,那么上述的这些类型在类文件中通过内部名称(Internal name)来表示. 一个类的内部名称
必须是全限定名,并且使用"/"替换"." .例如String类型的内部名称-java/lang/String.
2.1.3 类型描述(Type descriptors):
在所有的其他情况下,诸如字段的类型,Java的类型在类文件中通过类型描述符表现.
一些Java基本类型描述符参考下表:
2.1.4 方法描述符(Method descriptors):
一个方法描述是在一个单独的字符串中表现的一组类型描述(参数类型和方法返回值类型).
一个方法描述的组成: ( -> 每一个参数类型描述 -> ) -> 返回值类型描述或者V(表示没有返回值即void)
一个方法描述并不包含方法的名称或者参数的名称.
以下是简单方法的描述:
2. Classess:
2.1 Structure :
2.1.1 Overview:
1. 一个类文件包含以下几部分的内容(In fact a compiled class contains):
<1> A section describing the modifiers(such as public or private),the name, the super class,the interfaces and the
annotations of a field.
可见性(public/private..), 类名称, 超类, 接口,以及Annotation.
<2> One section per field declared in this class . Each section describes the modifiers, the name, the type and the
annotations of a field.
类中声明的每个成员变量,每一个成员变量部分包含可见性,名称,类型和Annotation.
<3> One section per method and constructor declared in this class. Each section describes the modifiters, the name ,
the return and parameter types, and annotations of a method. It also contains the compiled code of the method,
in the form of a sequence of Java bytecode instructions.
类中的每一个方法和构造函数. 每一个方法或者构造函数部分描述了可见性,名称,返回值,参数类型以及方法的Annotation.也
同时包含以Java字节码方式表示的方法编译后的代码.
2. Java源文件与Java class文件的不同之处:
<1> 一个类文件只包含一个类,然而一个Java源文件包含多个类.
<2> 一个类文件不能包含注释.
<3> 一个类文件不能包含package和import部分,因此所有的类型名称必须是全限定名.
<4> 一个重要的不同是: 一个类文件包含一个常量池部分.这个池是一个包含在类文件中定义的所有数值,字符串,其他类型常量.
这些常量只会被定义一次,类文件的其他部分通过他们的索引对常量进行引用.
<5> Java的类型在类文件和Java源文件中的表现方式不同.
3. 类文件各组成部分:
![](class.jpg)
2.1.2 内部名称(Internal name):
在大多数情况下,包含在类或者接口中的类型(例如: 父类,类实现的接口或者方法抛出的异常)都不能作为基本类型或者数组类型,
并且这些类型示类或者接口所必须的,那么上述的这些类型在类文件中通过内部名称(Internal name)来表示. 一个类的内部名称
必须是全限定名,并且使用"/"替换"." .例如String类型的内部名称-java/lang/String.
2.1.3 类型描述(Type descriptors):
在所有的其他情况下,诸如字段的类型,Java的类型在类文件中通过类型描述符表现.
一些Java基本类型描述符参考下表:
2.1.4 方法描述符(Method descriptors):
一个方法描述是在一个单独的字符串中表现的一组类型描述(参数类型和方法返回值类型).
一个方法描述的组成: ( -> 每一个参数类型描述 -> ) -> 返回值类型描述或者V(表示没有返回值即void)
一个方法描述并不包含方法的名称或者参数的名称.
以下是简单方法的描述: