Class 类
- Class 也是类,因此也继承了 Object 类
- Class 类对象不是new出来的,而是系统创建的
- 对于某个类的 Class 对象,在内存中只有一份,因为类只加载一次
- 每个类的实例都会记得自己是由哪个 Class 实例所生成
- 通过 Class 可以得到一个类的完整结构,通过一系列API
- Class 对象是存放在堆里的
- 类的字节码二进制数据,是存放在方法区的,有的地方称为类的元数据
Class类常用方法
- Class.forName:获取Car类对应的Class对象
- getClass:显示运行类型
- getPackage:得到包名
- getName:得到全类名
- newInstance:通过cls创建对象实例
- getField:通过反射获取属性
- set:通过反射为属性赋值
- getFields:通过反射获取所有属性
package com.ftn.reflection.class_;
import java.lang.reflect.Field;
//演示Class类的常用方法
public class Class02 {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchFieldException {
String classPath = "com.ftn.Car";
//1.获取Car类对应的Class对象
//>表示不确定的Java类型
Class> cls = Class.forName(classPath);
//2.输出cls
System.out.println(cls); //显示cls对象,是哪个类的Class对象 com.ftn.Car
System.out.println(cls.getClass()); //显示运行类型 java.lang.Class
//3.得到包名
System.out.println(cls.getPackage().getName()); //Class对象对应类所在的包名
//4.得到全类名
System.out.println(cls.getName());
//5.通过cls创建对象实例
Object o = cls.newInstance();
System.out.println(o);
//6.通过反射获取属性
Field brand = cls.getField("brand");
System.out.println(brand.get(o));
//7.通过反射为属性赋值
brand.set(o,"AUDI");
System.out.println(brand.get(o));
//8.通过反射获取所有属性
Field[] fields = cls.getFields();
for (Field f : fields) {
System.out.println(f.get(o));
}
}
}