Java 不同类型属性在字节码文件class中
来源:互联网 发布:java gbk转utf8 乱码 编辑:程序博客网 时间:2024/05/18 02:07
1. Object Attribute
- souce code
public class ObjectAttribute
{
public int intValue = 0;
public String stringValue = "testString" ;
public Integer integerValue = 0;
}
- class file
--> Constant pool
会出现CONSTANT_Fieldref_info条目,其中包含了属性的类目和名称类型
such as:
[16] CONSTANT_Fieldref_info
Class name: cp_info #1 <variable/ObjectVariable>
Name and type: cp_info #21 <stringValue Ljava/lang/String>
--> Fields
如下,有对应的属性相关的描述
[1] stringValue
Name: cp_info #7 <stringValue>
Descriptor: cp_info #8 <Ljava/lang/String;>
Access flags: 0x0001 [public]
2. Final Object Attribute
- source file
public class FinalObjectAttribute
{
public final int intValue = 0;
public final String stringValue = "fStringValueString";
public final Integer integerValue = 0;
public final double doubleValue ;
public FinalObjectAttribute(){
doubleValue = 1.1;
}
}
- class file
--> Constant pool
和其它的类型一样
--> Fields
相对于非Final的对象属性,intValue和stringValue有一个ConstantValue属性。请注意只有基本类型和String类型在定义时有初始化值时,才有ConstantValue属性。 integerValue虽然定义了初始化值, 但它没有ConstantValue属性。
such as [0] intValue
Generic info:
Attribute name index: cp_info #7<ConstantValue>
Attribute length: 2
Specific info:
Constant value index: cp_info #8 <0>
--> Method
在构造函数init中,只有integerValue和doubleValue初始化代码。intValue和stringValue都没有出现。
3. class Attribute
- source file
publicclassStaticObjectAttribute
{
publicstatic int intValue = 0;
publicstatic StringstringValue ="stringValueString";
publicstatic IntegerintegerValue = 0;
publicstatic doubledoubleValue;
static{
doubleValue = 19;
}
}
- class file
--> Constant pool
和其它类型类似
--> Fields
除了 access flags是0x0009 [public static],其它和非final的Object Attribute
such as
[0] intValue
Name: cp_info #5 <intValue>
Descriptor: cp_info #6 <I>
Access flags: 0x0009 [public static]
--> Method
有一个cinit方法来初始化类属性。
4. Final Class Attribute
- source code
public class FinalClassVariable
{
publicfinalstaticintintValue = 0;
publicfinalstatic StringstringValue ="stringValueString";
publicfinalstatic IntegerintegerValue = 0;
publicfinalstaticdoubledoubleValue;
static{
doubleValue = 19;
}
}
- class file
--> Constant pool
和其它类型对象类似
--> Fields
和Final对象属性类似,但access flags是0x0019 [public static final]. ConstantValue attributes也和Final对象类似
--> Method
cinit函数和非final的class属性类似
总结:
对于类属性的初始化是在cinit方法中,而对象属性的初始化是在init方法中。
对于Final类型,基本类型(int, long,…)和String类型如果在定义是有初始化值,会有一个ConstantValue属性,而且这些类型的属性不会出现在cinit方法和init方法(如果没有explicitly在静态初始化代码块或者构造函数中引用)。
- Java 不同类型属性在字节码文件class中
- 查看Java class文件的字节码
- 修改java字节码(.class)文件
- Java的字节码class文件结构
- Java字节码.class文件案例分析
- java字节码(.class)文件深度解析
- Java字节码.class文件案例分析
- Java字节码(class文件)解析
- 修改java字节码(.class)文件
- Class的字节码文件
- .class文件格式(java字节码文件的格式)
- Java字节码(.class文件)格式详解(一)
- Java字节码(.class文件)的代码解析
- java查看class字节码文件(有图)
- Java字节码(.class文件)格式详解(一)
- Java字节码(.class文件)格式详解(二)
- Java字节码(.class文件)格式详解(三)
- Java字节码(.class文件)的代码解析
- 男生对女生最具诱惑的10句话
- How to map android keys to your usb/bluetooth keyboard
- HDU 3315 My Brute(费用流)
- 使用IDEA创建Scala程序
- 剑指Offer18树的子结构
- Java 不同类型属性在字节码文件class中
- EventDispatcher Mechanism
- 杀人事件测你的潜意识??
- impdp 导入物化视图(mv)时报错 :ORA-31685: Object type MATERIALIZED_VIEW
- linux下如何恢复rm命令删除的文件
- How to Enable Multi-Touch
- Codeforces 379D. New Year Letter【动态规划、暴力枚举】
- POJ 1952 BUY LOW, BUY LOWER DP记录数据
- How to Create a Customized Keylayout for Any USB or Bluetooth Keyboard (ROOTED)