@Override
注解是什么时候进行检测的?是被谁使用的?
IDE代码编辑器(Eclipse,IntelliJ IDEA,Android Studio等)都是如何实现代码错误实时检测的呢?
我们在编写代码的时候并没有进行编译,但如果@Override
注解标注在了一个并没有重写父类的某个方法的方法上,IDE就能实时检测出错误并提示,如何做到的呢?
编写代码时,如果某个方法不是重写父类的方法,但是用 @Override注解标注了,Android Studio会立马提示错误:Method does not override method from its superclass,但是这时候我并没有编译项目啊,注解处理器如何发现这个错误的,难道是Android Studio在检测这个注解而不是注解处理器在使用这个注解?如果是注解处理器在使用这个注解,那么这个注解是哪个注解处理器在使用的呢?
《深入了解Java虚拟机》中的内容,javac编译的详解过程,编译过程大致上分为三步:解析与填充符号表过程、插入式注解处理器的注解处理过程、分析与字节码生成过程。
(1)词法、语法分析
(2)符号填充表
(3)注解处理器
(4)语义分析与字节码生成
IDE(idea,android studio, eclipse等)的内置插件会调用javac进行预编译的过程,这个过程会进行代码的词法、语法分析检查,即按照编写好的规则,检查开发者写的代码是否符合语法规范,以及注解处理器会分析一些jdk内置的注解,只不过这个javac预编译过程只做了上图中javac编译过程的前面几步,没有进行最后的 字节码生成 的工作,因此不会生成字节码。
参考:
什么时候使用Java的@Override注释,为什么?
IntelliJ IDEA代码检查
IDE是如何实时报告代码错误的?