Java高级面试-注解
一、注解概念
1.什么是注解
Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法
基本的规则:Annotation不能影响程序代码的执行,无论增加、删除Annotation,代码都始终如一的执行
2.什么是metadata
1)元数据以标签的形式存在于Java代码中
2)元数据描述的信息是类型安全的
3)元数据需要编译器之外的工具额外的处理用来生成其它的程序部件
4)元数据可以只存在于Java源代码级别,也可以存在于编译之后的Class文件内部
二、注解分类
1.系统内置标准注解
1)Override(被继承时重写方法不存在父类中会提示)
2)Deprecated(标记我们的一些类是过时的,不能被继承和使用)
3)SuppressWarnnings(编译器不警告)
2.元注解
1)@Target:说明注解所修饰的对象的范围
2)@Retention:定义注解保留时间的长短
3)@Documented:Documented 注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中.
4)@Inherited:某个被标记的类是可以被继承的
三、Android support annotations
1.Nullness注解:用来标记我们参数的返回值为null(@Nullable)或者不为null(@NonNull)
2.Resource Type注解:表明传入参数的类型
3.Threading注解:指定方法所在的线程(@WorkerThread表示子线程;@UIThread表示主线程)
4.Overriding Method注解:@CallSuper:如果子类重写了该方法,又想使用父类原来的方法
四、总结
注解是如何被处理的?
当java源代码被编译时,编译器插件的注解处理器用来处理注解,当处理完这些注解后,会产生报告信息,如果注解有加上@Retention就会将注解存储到对应的.class文件中,然后虚拟机就可以查找相应的元数据做相应的处理。还可以通过反射来实现注解。