注解
什么是注解
- 可以被其他程序读取
- 不是程序本身,可以对程序作出解释(这一点和注释没什么区别)
- 可以通过反射机制编程实现对这些元数据的访问
内置注解
@Override:重写
@Deprecated:标注过时
@SuppressWarnings : 用来抑制编译时的警告信息
元注解:作用是负责注解其它注解
- @Target:描述注解的使用范围
- @Retention:描述注解的生命周期
- @ Document:表示是否将我们的注解生成在javadoc中
- @Inherited:子类可以继承父类的注解
自定义注解
@interface : 用来自定义注解
package com.yang.anno;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Test.MyAnnotation(age=22)
public class Test {
public void test(){
}
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{
//注解的参数:参数类型 +参数名();当参数名为value时可以要使用的地方省略参数名
//int age()+default "" 可设置默认值
int age();
}
}
反射
获取class类的几种方法
-
已知具体的类通过类的class属性获取 推荐使用
Class class=Person.class();
-
已知某个类的实例,通过调用该实例的getClass()方法获取Class对象
Class class=person.getclass();
-
已知某个类的全类名,通过ForName()获取
Class class=Class.forName("Demo01.Student")
- 同一个类型、同一个类只有一个Class对象,一个类被加载后,类的整个结构都会被封装在Class对象中
通过反射获取运行时类的完整结构
- Field
- Method
- Constructor
- SuperClass
- Interface
- Annotation
getFields():只能找到public属性
getDeclaredFields():找到全部的属性
getField("") 获取指定属性
getDeclaredField()