10,11编译优化

sun javac编译过程 JavaCompiler类
1.解析与填充符号表过程 
2.插入式注解处理器的注解处理过程 
3.分析与字节码生成过程 
* .java————-解析与填充符号表 —–>注解处理——->语义分析与字节码生成——>class 
              |                                    循环                        | 
               —--—————————————————–

解析与填充符号表

       1.词法语法分析

         词法分析:把源代码字符流变成标记(Taken)如: int i = b+2;   int、a、b、+、2      javac.parser.Scanner类

       语法分析:根据Taken序列构造抽象语法树(AST abstract synax tree)语法树每一个节点都代表程序代码的一个语法结构

                     例如包括:包、类型、修饰符、运算符、接口、返回值、代码注释         JCTree

       2. 填充符号表

              符号表:符号地址+符号信息     K-V     实现不一定是哈希表,也可以是有序符号表、树状符号表、栈结构符号表

              在编译的不同阶段都要用到   语义分析中用于语义检查和产生中间代码

                                                             目标代码生成阶段    对符号名进行地址分配时,符号表是地址分配依据

              填充符号表:com.sunsun.tools.javac.comp.Enter  此过程出口是一个 待处理列表,包含了 每一个编译单元的抽象语法树的顶级节点,以及package-info.java(若存在)的节点

 

注解处理器

        可以看做一组编译器插件,在这些插件里面可以读取修改添加抽象语法树中任意元素,若在出理期间对语法树进行了修改,编译器将回到解析与填充符号表 过程重新处理,直到没有新的注解处理器对语法树进行修改为止!一个循环称为一个Round

 

语义分析及字节码生成

        语义分析任务是对结构正确的语法树源程序进行上下文有关性质的审查    如类型审查    即int  boolean相加等

          1.标注检查

                检查变量使用前是否已经被声明、变量与赋值之间数据类型是否匹配等

         2.数据及控制流分析

                 对程序上下文逻辑更进一步验证,可检查如局部变量使用前是否赋值、方法的每一条路径是否有返回值,是否所以的受查异常都被正常处理

          3.解语法糖

                    增加程序可读性,从而减少程序代码出错的机会。

          4.字节码生成

                    实例构造器,类构造器在这个阶段添加到语法树中,生成Class文件

     

Java语法糖

          1.泛型与类型擦除

                    影响重载,拒绝编译, sun jdk1.6 返回值不同可以编译通过重载成功

          2.自动装箱、拆箱与遍历循环

                    

                Integer a =1;
		Integer b = 2;
		Integer c =3;
		Integer d = 3;
		Integer e = 321;
		Integer f = 321;
		Long g = 3L;
		System.out.println(c==d); true
		System.out.println(e==f);   false
		System.out.println(c==(a+b));   true
		System.out.println(c.equals(a+b)); true
		System.out.println(g ==(a+b));   true
		System.out.println(g.equals(a+b));   false





== 不遇到算术运算符不会自动拆箱,equals不处理数据类型转型

 

 

         3.条件编译

                  java进行条件编译  方法是   条件为常量的if语句

 

 

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值