反射
反射:简单来说就是来描述一系列类
反射属性:
Class:用来描述类本身
Package:用来描述类所属的包
Field:用来描述类中的属性
Method:用来描述类中的方法
Constructor: 用来描述类中的构造方法
Annotation: 用来描述类中的注解
如何来获取Class
新建一个类–Person
package my;
public class Person{
}
1:通过 包名.类名
Class<?> aClass = Class.forName("my.Person");
2:类名.class
Class<Person> personClass = Person.class;
3:对象.getClass
Class<? extends Person> apClass = person.getClass();
Class中的常用方法
Class<?> aClass = Class.forName("my.Person");
int modifiers = aClass.getModifiers();//获取修饰符 返回值是一个int类型 不同的修饰符对应不同的数字
System.out.println(aClass.getName());//获取类名字
System.out.println(aClass.getPackage());//获取所在包名
aClass.getSuperClass()//获取父类
Class<?>[] interfaces = aClass.getInterfaces();// 类实现的接口
java.lang.Object o = aClass.newInstance();//相当于调用了类中的构造方法新建了一个对象 默认无参数的!
Field[] fields = aClass.getFields();//获取类中的所有属性
try {
aClass.getDeclaredField("name");//可以私有
Field name = aClass.getField("name");//获取类中的属性 要知道属性名 并且是共有的
try {
name.set(person,"wo");//给某个对象的属性赋值
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
Constructor<?> constructor = aClass.getConstructor();//获取类的构造方法
Person person1 = (Person)constructor.newInstance();//通过构造方法新建的一个对象