package com.model.Class; import com.model.reflection.Cat; /** *@Description:测试类 *@Author: 张紫韩 *@Crete 2021/6/28 16:56 * * 介绍Class类的特点 */public class classDemo01 { /** * 创建某个类的实例对象是都会创建这个类的 Class类对象, * 且只创建一个Class类对象,如果使用 new 创建了就不会在反射阶段创建了 * * * */ public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException { //传统的方法创建实例对象过程中,会创建一个 class类对象 Cat cat = new Cat(); /* 通过Class类 的loadClass方法创建了Cat类的Class类对象 public Class<?> loadClass(String name) throws ClassNotFoundException { return loadClass(name, false); } * */ Class<?> aClass = Class.forName("com.model.reflection.Cat"); //得到Class类对象,存放于堆中 Object o = aClass.newInstance(); //得到实例对象 //反射机制创建类的实例对象过程中,也同样是使用了Class类的loadClass方法加载Cat类的Class类对象 /* 通过Class类 的loadClass方法创建了Cat类的Class类对象 public Class<?> loadClass(String name) throws ClassNotFoundException { return loadClass(name, false); } * */ } }
Class应用实例:
package com.model.Class; import java.lang.reflect.Field; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/6/28 17:40 * * 演示Class类的常用方法 */ public class ClassDemo02 { public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchFieldException { String classFullPath="com.model.Class.Car"; // 1.获取Car的类对象 Class<?> aClass = Class.forName(classFullPath); // 2.输出类对象 System.out.println(aClass); //显示aClass对象,是哪个类的的Class对象:com.model.Class.Car System.out.println(aClass.getClass()); //显示aClass的运行类型 java.lang.Class // 3.得到包名 System.out.println(aClass.getPackage().getName()); // 4.全类名 System.out.println(aClass.getName()); // 5.实例对象 Object o = aClass.newInstance(); Car car= (Car) o; System.out.println(car); // 6.得到属性 Field brand = aClass.getField("brand"); brand.set(car, "奔驰"); System.out.println(brand.get(o)); // 7.拿到所有的字段属性 Field[] fields = aClass.getFields(); for (int i = 0; i < fields.length; i++) { System.out.println(fields[i].get(o)); } for (Field f:fields){ System.out.println(f.get(o)); } } }