Javac 数据流检查

Javac 数据流检查

数据流检查包括: 变量赋值检查、语句活跃性分析 与 异常检查,实现类 com.sun.tools.javac.comp.Flow.

Flow

Flow 类继承自 TreeScanner 类并选择性覆写 visitXxx() 方法来完成具体的数据流检查.

这个类中的入口方法是 analyzeTree()

每一个顶层类都会调用这个方法初始化一些重要的变量,然后调用 scan() 方法扫描语法树的各个语法节点进行数据流检查。

语句的活跃性分析

语句的活跃性是指这个语句是否有可能被执行,或者说语句是否可达.

变量 alive 用来表示语句的活跃性

com.sun.tools.javac.comp.Flow
private boolean alive;

Flow 类提供了 scanDef()、scanStat()、scanExpr() 与 scanCond() 方法分别用来遍历定义、表达式、语句和条件表达式.

scanDef() 方法通常用来遍历匿名块,调用 scanStat() 方法对匿名块进行扫描,如果 tree 为匿名块并且 alive 的值为 false 时,Javac 将报错.

变量赋值检查

局部变量在使用前必须进行显式初始化,而声明在类型中的成员变量,Java 虚拟机会默认初始化为对应的 0 值。但 final 修饰的成员变量必须显式初始化.

在进行变量赋值检查时,首先要将需要进行变量赋值检查的成员变量与局部变量存储起来,与存储相关的变量的定义如下:

com.sun.tools.javac.comp.Flow
VarSymbol[] vars;
int firstadr;
int nextadr;

异常检查

异常检查主要检查方法中抛出的异常有没有被捕获或者在方法上声明抛出.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FlyingZCC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值