注解:
@SuppressWarnings(“all”):镇压全部的警告。
@interface:自定义注解。
ps: 注解的参数格式为:参数类型 + 参数名()。
如果只有一个参数的话,建议命名为value。
元注解:
(1)@Target:描述注解的使用范围。
(2)@Retention:描述注解的生命周期。
(3)@Decumented:该注解将被包含在javadoc中。
(4)@Inherited:子类可以继承父类的注解。
反射:
创建Class类的方式:
1.通过已知的对象获得:
Class cl = person.getClass();
2.通过反射获取类的class对象:
Class c2 = Class.forName("实体类的路径");
ps:一个类在内存中只有一个Class对象 ,一个类被加载后,整个类的结构都会被封装在Class对象中。
3.通过类名.class获得:
Class c3 = Person.class;
4.通过基本内置类型包装类:
Class c4 = Integer.TYPE;
ps: 只有元素的类型和维度相同,那就是同一个Class。
//User类里面有name,id和age属性,分别为String,int,int型
Class c1 = Class.forName("com.reflection.User");
通过反射调用普通方法:
User user = (User)c1.newInstance();
Method setName = c1.getDeclareMethod("setName",String.class);
setName.invoke(user,"Jackson");
通过反射操作属性:
User user2 = (User)c1.newInstance();
Field name = c1.getDeclaredField("name");
name.setAccessible(true);//关闭程序的安全检测,直接操作对象的私有属性,能提高执行效率
name.set(user2,"Jackson");
通过反射获得注解的值:
//TableAnnotation为自定义的类名注解
TableAnnotation table = (Table)c1.getAnnotation(TableAnnotation.class);
String value = table.value();
获得类制定的注解:
//FiledAnnotation为自定义的属性注解
FiledAnnotation f = c1.getDeclareFiled("name");
Filed annotation = f.getAnnotation(FiledAnnotation.class);