注解与反射
注解
内置注解
@Override
- 定义在 java.lang.Override 中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明
@Deprecated
- 定义在java.lang.Deprecated中,此注释可以用于修辞方法,属性,类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择
@SuppressWarnings
- 定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息,与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数都是已经定义好了的
- @SuppressWarnings("all")
- @SuppressWarnings("unchecked")
- @SuppressWarnings(value={"unchecked","deprecation"})
- 等等
元注解
解释其他注解的注解
//Target 表示我们的注解可以用在哪些方
@Target(value = {ElementType.METHOD,ElementType.TYPE})
//Retention 表示我们的注解在什么地方还有效
// runtime>class>sources
@Retention(value = RetentionPolicy.RUNTIME)
//Documented表示是否将我们的注解生成在JAVAdoc中
@Documented
//Inherited 类可以继承父类的注解
@Inherited
//定义一个注解
@interface MyAnnotationf{
}
自定义注解
格式:public @interface 注解名{注解内容}
如果在类中定义注解需去掉public
@Target(value = {ElementType.METHOD,ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
//定义一个注解
@interface MyAnnotationf{
//定义参数后注解不能为空,除非有默认值,如果参数只有value,则使用注解使可不标明参数名
String name() default "默认值";
}
反射
获取class类的常用方法
可以有Class对象的类型
- class:外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类
- interface:接口
- []:数组
- enum: 枚举
- annotation:注解@interface
- primitive type: 基本数据类型
- void
动态创建对象
//获得class对象
Class cl = Class.forName("class对象所在的包名");
//构造一个对象
User user = (User)clnewInstance();
//本质是调用了类的无参构造器,如果没有设置无参构造器则会报错
System.out.println(user);
//通过构造器创建对象
Constructor constructor = cl.getDeclaredConstructor(String.class, int.class, int.class);
User user2= (User)constructor.newInstance( "Die Mongsheng",001,18);
System.out.printIn(user2);
//通过反射调用普通方法
User user3 = (User)c1.newInstance();
//通过反射获取一个方法
Method setName = cl.getDeclaredMethod("setName",String.class);
//invoke : 搬活的意思,(对象 ,"方法的做")
setName.invoke(user3,"Die Mongsheng");
System.out.println(user3.getName());
//通过反射操作属性
User user4 = (User)c1.newInstance(0;Field name = clgetDeclaredField("name");
//不能直接操作私有属性 ,我们需要关闭程序的安全检测 ,属性或者方法的setAccessible(true)
name.setAccessible(true);
name.set(user4,"Mongsheng");
System.out.println(user4.getName());
获取注解
用getAnnotation()获取某类、方法、字段的注解
标签:反射,name,SuppressWarnings,value,User,注解,class From: https://www.cnblogs.com/zhao19811103/p/17226094.html