注解和反射

同:不是程序本身,可以对程序做出解释

异:注解能被其他程序读取

注解以“@注释名”在代码中存在,还可以添加参数值

注解举例

@Override 重写

@FunctionalInterface 函数式接口

@Deprecated 不鼓励程序员使用这样的元素

@SuppressWarnings 抑制编译时的警告信息,需要参数

元注解

可以注解别的注解的注解

@Target:用于描述注解的使用范围(方法,类...)

@Retention:表示需要在什么级别保存该注解信息,用于描述注解的生命周期

@Document:表示该注解将被包含在javadoc中

@Inherited:说明子类可以继承父类中的该注解

自定义注解

使用@interface自定义注解

举例

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{
    //注解的参数:参数类型 + 参数名 ();
    int id() default 0;
    //可以不写default,那在使用时就必须要带参数
}
/*
使用举例
@MyAnnotation(id=1)
public void test(){}
*/

反射

Class类

获得方式

方式一:

通过对象得到

Class c1 = person.getClass()

方式二:

forname获得

Class c2 = Class.ForName("包名")

方式三:

通过类名获得

CLass c3 = Person.class

方式四:

基本内置类型的包装类都有一个Type属性

Class c4 = Integer.TYPE

方式五:

获得父类类型

Class c5 = c1.getSuperclass()

setAccessible

Method和Field、Constructor都有setAccessible方法

这是启动和禁用访问安全检查开关

true时取消java语言访问检查

false实施访问检查(效率低但安全性高,一般是默认false)