1、Class 类
1.1、基本介绍1.2、Class 类的常用方法1.3、获取 Class 类对象1.4、以下类型有 Class 对象
1、Class 类 1.1、基本介绍
package reflection.class_; import reflection.Cat; @SuppressWarnings({"all"}) public class Class01 { public static void main(String[] args) throws ClassNotFoundException { // 1. Class 也是类, 因此也继承 Object 类 // Class // 2. Class 类对象不是 new 出来的, 而是系统创建的 // (1) 传统 new 对象 // Cat cat = new Cat(); // (2) 反射方式, 刚才没有 debug 到 ClassLoader 类的 loadClass, 原因是没有注销 Cat cat = new Cat(); Class cls1 = Class.forName("reflection.Cat"); // 3. 对于某个类的 Class 类对象, 在内存中只有一份, 因为类只加载一次 Class cls2 = Class.forName("reflection.Cat"); System.out.println(cls1.hashCode()); // 1554874502 System.out.println(cls2.hashCode()); // 1554874502 Class cls3 = Class.forName("reflection.Dog"); System.out.println(cls3.hashCode()); // 1846274136 } }1.2、Class 类的常用方法
package reflection.class_; import reflection.Car; import java.lang.reflect.Field; @SuppressWarnings({"all"}) public class Class02 { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, NoSuchFieldException { String classAllPath = "reflection.Car"; // 1. 获取到 Car 类 对应的 Class 对象 // > 表示不确定的 Java 类型 Class> cls = Class.forName(classAllPath); // 2. 输出 cls System.out.println(cls); // 显示 cls 对象, 是哪个类的 Class 对象 reflection.Car System.out.println(cls.getClass()); // 输出 cls 运行类型 java.lang.Clas // 3. 获取包名 System.out.println(cls.getPackage().getName()); // reflection // 4. 得到全类名 System.out.println(cls.getName()); // reflection.Car // 5. 通过 cls 创建对象实例 Car car = (Car) cls.newInstance(); System.out.println(car); // reflection.Car@5cad8086 // 6. 通过反射获取属性 brand Field brand = cls.getField("brand"); System.out.println(brand.get(car)); // 宝马 // 7. 通过反射给属性赋值 brand.set(car, "奔驰"); System.out.println(brand.get(car)); // 奔驰 // 8. 遍历所有的属性(字段) Field[] fields = cls.getFields(); for (Field f : fields) { System.out.println(f.getName()); // 名称 } } }1.3、获取 Class 类对象
package reflection.class_; import reflection.Car; @SuppressWarnings({"all"}) public class GetClass_ { public static void main(String[] args) throws ClassNotFoundException { // 1. Class.forName String classAllPath = "reflection.Car"; // 通过读取配置文件获取 Class> cls1 = Class.forName(classAllPath); System.out.println(cls1); // class reflection.Car // 2. 类名.class, 应用场景: 用于参数传递 Class cls2 = Car.class; System.out.println(cls2); // class reflection.Car // 3. 对象.getClass(), 应用场景, 有对象实例 Car car = new Car(); Class cls3 = car.getClass(); System.out.println(cls3); // class reflection.Car // 4. 通过类加载器[4 种]来获取到类的 Class 对象 // (1)先得到类加载器 car ClassLoader classLoader = car.getClass().getClassLoader(); // (2)通过类加载器得到 Class 对象 Class cls4 = classLoader.loadClass(classAllPath); System.out.println(cls4); // class reflection.Car // cls1, cls2, cls3, cls4 其实是同一个对象 System.out.println(cls1.hashCode()); // 1554874502 System.out.println(cls2.hashCode()); // 1554874502 System.out.println(cls3.hashCode()); // 1554874502 System.out.println(cls4.hashCode()); // 1554874502 // 5. 基本数据(int, char, boolean, float, double, byte, long, short) 按如下方式得到 Class 类对象 Class1.4、以下类型有 Class 对象integerClass = int.class; Class characterClass = char.class; Class booleanClass = boolean.class; System.out.println(integerClass); // int // 6. 基本数据类型对应的包装类, 可以通过 .TYPE 得到 Class 类对象 Class type1 = Integer.TYPE; Class type2 = Character.TYPE; // 其它包装类 BOOLEAN, DOUBLE, LONG, BYTE 等 System.out.println(type1); // int System.out.println(integerClass.hashCode()); // 1846274136 System.out.println(type1.hashCode()); // 1846274136 } }
package reflection.class_; import java.io.Serializable; @SuppressWarnings({"all"}) public class AllTypeClass { public static void main(String[] args) { Classcls1 = String.class; // 外部类 Class cls2 = Serializable.class; // 接口 Class cls3 = Integer[].class; // 数组 Class cls4 = float[][].class; // 二维数组 Class cls5 = Deprecated.class; // 注解 // 枚举 Class cls6 = Thread.State.class; Class cls7 = long.class; // 基本数据类型 Class cls8 = void.class; // void 数据类型 Class cls9 = Class.class; System.out.println(cls1); // class java.lang.String System.out.println(cls2); // interface java.io.Serializable System.out.println(cls3); // class [Ljava.lang.Integer; System.out.println(cls4); // class [[F System.out.println(cls5); // interface java.lang.Deprecated System.out.println(cls6); // class java.lang.Thread$State System.out.println(cls7); // long System.out.println(cls8); // void System.out.println(cls9); // class java.lang.Class } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)