前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用javac编译源码的过程

使用javac编译源码的过程

原创
作者头像
用户7718188
修改2021-10-08 15:28:56
9950
修改2021-10-08 15:28:56
举报

 使用javac编译源码的过程如下:

解析和填充符号表

包括解析包括词法分析和语法分析。 词法解析:将源代码的字符流(每个字符)转变为标记(token,比如int a=b+2包括6个标记)集合。 语法分析:将token集合构造成抽象语法树(AST,用树形结构描述代码语法结构)。 填充符号表:主要记录抽象语法树的顶级节点。

插入式注解处理器的注解处理过程

如果插件在注解处理期间对抽象语法树进行了修改,编译期重新进入第一步,直到没有修改为止。

语义分析和字节码生成

语法分析主要是检查源程序结构上是否正确。语义分析则是检查逻辑上的性质,比如变量使用前是否声明,变量赋值类型是否正确,方法是否有返回值等。

字节码生成:将抽象语法树,符号表转化为字节码写到磁盘,并进行少量的代码添加和替换,比如()方法,为了实例化子类过程为:先实例化父类构造器,再初始化变量,最后执行语句块。替换:比如将字符串的+,替换为StringBuffer或StringBuilder的append方法。

lombok在第二步增加getter和setter等方法定义的相应树节点

常用注解

  • @Data:注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
  • @Setter:注解在属性上;为属性提供 setting 方法
  • @Getter:注解在属性上;为属性提供 getting 方法
  • @Log:注解在类上;为类提供一个属性名为log 的 log4日志对象
  • @Log4j:Creates private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
  • @Log4j2:Creates private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
  • @Slf4j:Creates private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
  • @NoArgsConstructor:注解在类上;为类提供一个无参的构造方法
  • @AllArgsConstructor:注解在类上;为类提供一个全参的构造方法
  • @NonNull:注解在参数上,要求非空

例子:

    import lombok.NonNull;
    public class NonNullExample extends Something {
        private String name;
        public NonNullExample(@NonNull Person person) {
        super("Hello");
        this.name = person.getName();
        }
    }

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解析和填充符号表
  • 插入式注解处理器的注解处理过程
  • 语义分析和字节码生成
  • 常用注解
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档