注解和反射
同:不是程序本身,可以对程序做出解释
异:注解能被其他程序读取
注解以“@注释名”在代码中存在,还可以添加参数值
注解举例
@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)