享学堂-架构师网课笔记-JVM-L6

class文件结构

JVM无关性

Java编译出来的class文件和其他语言例如Scala都是可以运行在JVM上的,这都是因为虚拟机识别的是二进制的文件,而不是程序员写出来的文件,而class文件从出现到现在已经比较稳定,可以看下class文件的内容,可以看到Java代码的实现。

在这里插入图片描述

class 的文件结构

class 文件用记事本打开是一个二进制文件,如下
在这里插入图片描述
它可以用 javap 命令查看编译内容,例如输入javap -c +XX.class 可以查看。其中class文件包含了以下的信息:

常量池

常量池包括字面量和符合引用,常量池包括final修饰的变量,文本字符串,声明等。符合引用则是类和接口的全限定名,字段和名称和描述符,方法和名称描述符。

方法表

存在方法属性表集合中的一个“code” 的属性里面,与字段表集合类似,如果方法表里面没有重写,方法表中不会表现出来。

字节码指令

字节码指令是Java编译时留下的汇编代码,可以通过查看反编译的代码,查看其中的实现。

异常处理

public class StreamDemo {
    public void read(){
        InputStream in = null;
    try {
        in = new FileInputStream("A.java");
    }catch(FileNotFoundException e){
        e.printStackTrace();
    } finally {
        if (null != in) {
            try {
                in.close();
            }catch(IOException e) {
                e.printStackTrace();
            }
        }
    }
  }
}

在编写代码时常常会遇到异常处理时会使用finally语句,保证代码的执行,而使用javap 命令查看时你会看到这样一个异常表 。from 表示上面执行的行数,to表示到哪一行,target表示如果出错了调到哪一行,type就是错误类型了。而finally的实现看上面其实就是try,catch的正常执行上,复制一份finally代码,追加到正常执行的逻辑后面,同时再复制一份到其他出口处。

在这里插入图片描述

总结

只是一些概念理解,具体用途看下节课

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值