注解与反射
注解可以被其他程序(比如:编译器等)读取。
可以检查代码的正确性
内置注解
-
@Override 定义在java.lang.Override中,此注释只用于修辞方法,表示一个方法声明打算重写超类中的另一个声明
-
@Deprecated 定义在java.lang.Deprecated中,此注释可以用于修辞方法,属性,类,表示不鼓励程序员使用这样的元素,通常因为它很危险或者存在更好的选择
-
@SuppressWarnings() 定义在java.lang.SuppressWarnings中,用于抑制编译时的警告信息。需要添加一个参数才可以正常使用。
-
@SuppressWarnings("all")
-
@SuppressWarnings("unchecked")
-
@SuppressWarnings(value = {"unchecked","deprecation"})
-
==
-
package com.yeyue.study;
import java.util.ArrayList;
import java.util.List;
//什么是注解
元注解
-
负责注解其他注解,java定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明
-
这些类型和他们所支持的类在java.lang.annotation包中可以找到(@Target,@Retention,@Documented,@Inherited)
-
@Target 用于描述注解的使用方位
-
@Retention 表示需要在什么级别保存该注释信息,用于描述注解的生命周期
-
SOURCE < CLASS < RUNTIME(一般都用RUNTIME)
-
-
@Documented 说明该注解将被包含在javadoc中
-
@Inherited 说明子类可以继承父类中的该注解
-
package com.yeyue.study;
import java.lang.annotation.*;
//测试元注解
自定义注解
package com.yeyue.study;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//自定义注解
public class Test03 {
//注解可以显示赋值,如果没有默认值,我们就必须给注解赋值
反射
允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任何对象的内部属性及方法
Class c = Class.forName("java.lang.String")
加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到累的结构,这个对象就是反射。
获得反射对象
package com.yeyue.study.reflection;
//什么是反射
public class Test01 extends Object{
public static void main(String[] args) throws ClassNotFoundException {
//通过反射获取类的class对象
Class c1 = Class.forName("com.yeyue.study.reflection.User");
System.out.println(c1);
Class c2 = Class.forName("com.yeyue.study.reflection.User");
Class c3= Class.forName("com.yeyue.study.reflection.User");
Class c4 = Class.forName("com.yeyue.study.reflection.User");
//一个类在内存中只有一个class对象
//一个类呗加载后,类的整个结构都会被封装在class对象中
System.out.println(c2.hashCode());
System.out.println(c3.hashCode());
System.out.println(c4.hashCode());
}
}
//实体类 : pojo,entity
class User{
private String name;
private int id;
private int age;
public User(){
}
public User(String name, int id, int age) {
this.name = name;
this.id = id;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
