Class
Java 程序汇总的各个 Java 类属于同一类事物,描述这类事物的 Java 类名就是 Class。Class 表示在内存中存储的字节码。
(1)获取字节码的三种方式:
1 、类名.class。 例如:System.class;
2 、对象.getClass()。例如:new Date().getClass();
3、Class.forName("类名")。例如:Class.forName("java.util.Date");
(2)九个预定义 Class 实例对象:
boolean、byte、char、short、int、long、float、double、void
反射
反射就是把 Java 类中的各种成分映射成相应的 Java 类。例如,一个 Java 类中用一个 Class 类的对象来表示,一个类中的组成部分:成员变量、方法、构造方法、包等等信息也用一个个 Java 类来表示。表示 Java 类的 Class 类显然要提供一系列的方法,来过的其中的变量、方法、构造方法、修饰符、包等信息,这些信息就是用相应类的实例对象来表示,它们是 Field、Method、Constructor、Package 等等。一个类中的每个成员都可以用相应的反射 API 类的一个实例对象来表示,通过调用 Class 类的方法可以得到这些实例对象。
Constructor 类
一个 Constroctor 类代表一个字节码中的一个构造方法。
(1)得到一个类中的所有构造方法。例如:Constroctor[] constroctors = Class.forName("java.lang.String").getConstroctors();
(2)得到一个类中的某一个构造方法。例如:Constroctor constroctor = Class.forName("java.lang.String").getConstroctor(StringBuffer.class);
编程实例:用反射的方式创建一个类的实例对象
Field 类
Field 类代表某个类中的一个成员变量。因为 Field 是对应到对象上面的成员变量,所以 Field 代表的成员变量是具体的,不是抽象的,一个类的字节码对应着一个类的成员变量。
编程实例: 用反射的方式获取一个类中的成员变量,并修改变量的值
运行结果:
原名:DriverKing
改后:DriverKing_斌
编程实例:将任意一个对象中的所有 String 类型的成员变量所对应的字符串内容中的 “b” 改为 “a”
运行结果:
black,hubei,basketball,23
alack,huaei,aasketaall,23
Method 类
Method 类代表某个类中的一个成员方法。
(1)得到类中的某一个方法。例如:Method charAt = Class.forName("java.lang.String").getMethod("charAt",int.class);
(2)调用方法。例:System.out.println(charAt.invoke(str,2)); // 普通方式调用: System.out.println(str.charAt(2));
编程实例:用反射的方式调用某个类的方法
(3)用反射的方式执行某个类的 main 方法
(4)对数组的反射
具有相同维数和元素类型的数组属于同一个类型,即代表有相同的 Class 实例对象。相同的维数,例如:二维数组就是数组的数组,也就是说数组里面存放的是引用类型的对象,它的字节码就不相同。所以 具有相同维数和元素类型的数组才是属于同一个类型。如果想获得一个数组的类型用:Class 实例对象的 getSuperClass()
编程实例:用反射的方法打印数组
(5)对集合的反射
编程实例:利用配置文件指定集合的类型,然后再用反射创建集合并打印集合
(6)用类加载器加载配置文件