首页 > 编程语言 > 详细

java类文件结构

时间:2020-03-23 18:01:19      阅读:74      评论:0      收藏:0      [点我收藏+]

1、不是只有java编译器才能完成java程序到字节码的编译过程

技术分享图片

 

 

 

 2、字节码文件(.class)的组成内容

技术分享图片

 技术分享图片

 

无符号数:就是数值

表:一个结构

 

 

 3、常量池(主要存放字面量和符号引用)

(1)字面量

String string1="cunnuanhuakai";

字面量就是等或右边的值,即:cunnuanhuakai

(2)符号引用:包括三类常量

类和接口的全限定名:

pers.zhb.web.servlet.IndexServlet

字段的名称和描述符:

private、public等

方法的名称和描述符:

private、public等

 

4、在Notepad++中安装插件

(1)下载插件

(2)将下载的插件放到Notepad++安装目录的plunges目录下

(3)导入插件

技术分享图片

 

 

(4)按8bit的方式查看class文件:

技术分享图片

 

 

 

5、字节码文件的解析

(1)11种数据类型结构表:

技术分享图片

 

 

技术分享图片

 

 

 图片来源:(https://blog.csdn.net/qq_39375211/article/details/79925127)

 u1:一个字节

 u2:两个字节... ...

(2)字节码文件的解析(字节码文件为二进制,只是查看方便显示十六进制)

查看字节码文件(转换为16进制):

技术分享图片

 

 

 技术分享图片

 

 要进行解析需要将16进制转化为十进制,然后,对应结构表。

0a:十进制为10,对应表格中的Methodref,又由于索引项每一个占了两字节,因此,索引项分别为14和38

运行:javap -v 命令对解析结果进行验证:

技术分享图片

 

 

程序源码:

public class Student {
    private String name;
    private Integer age;
    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public void testPara(Student student1){
        student1.name="zhang";
    }

    public void testPara1(Student student2){
        student2=new Student("liu",11);
    }

    public static void main(String args[]){
        Student student=new Student("zhai",12);
        student.testPara(student);
        System.out.println(student.name);

        student.testPara1(student);
        System.out.println(student.name);
    }
}

(3)clinit与init:

技术分享图片

 

 clinit:所有的类变量初始化语句和静态初始化语句

 init:调用new初始化对象的时候

         调用反射的时候(newInstance())

         调用clone方法的时候

         序列化的时候

(4)虚拟机的执行过程

技术分享图片

 

 (5)访问标志:紧接着常量池之后的两个字节代表访问标志,用于识别类或接口的访问信息

 

java类文件结构

原文:https://www.cnblogs.com/zhai1997/p/12553735.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!