文章目录
- 1. Class类
- 2. Class类的常用方法
- 3. 实例化Class类对象(四种方法)
1. Class类
在 Object 类中定义了以下的方法,此方法将被所有子类继承:
public final Class getClass()
以上的方法返回值的类型是一个 Class 类,此类是 Java 反射的源头, 实际上所谓反射从程序的运行结果来看也很好理解,即:
可以通过对象反射求出类的名称。
反射可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接口。对于每个类而言, JRE 都为其保留一个不变的 Class 类型的对象。
- 一个 Class 对象包含了特定某个类的有关信息。
- Class 本身也是一个类
- Class 对象只能由系统建立对象
- 一个类在 JVM 中只会有一个 Class 实例
- 一个 Class 对象对应的是一个加载到 JVM 中的一个 .class 文件
- 每个类的实例都会记得自己是由哪个 Class 实例所生成
- 通过 Class 可以完整地得到一个类中的完整结构
2. Class类的常用方法
3. 实例化Class类对象(四种方法)
-
前提:若已知具体的类,通过类的 class 属性获取。该方法最为安全可靠,程序性能最高
实例: Class clazz = String.class; -
前提:已知某个类的实例,调用该实例的 getClass() 方法获取 Class 对象
实例: Class clazz = “www.xyd.com”.getClass(); -
前提:已知一个类的全类名,且该类在类路径下,可通过Class 类的静态方法 forName() 获取,可能抛出 ClassNotFoundException
实例: Class clazz = Class.forName(“java.lang.String”); -
其他方式 ( 不做要求 )
ClassLoader cl = this.getClass().getClassLoader();
Class clazz4 = cl.loadClass(“ 类的全类名” );
举例:
package day14;
public class Test {
public static void main(String[] args) {
Person p = new Person();
//方法1
Class c0 = Person.class;//通过类名.class创建指定类的Class实例
//方法2
Class c1 = p.getClass();//通过一个类的实例对象的getClass()方法,获取对应实例对象的类的Class实例
//方法3
try {
//通过Class的静态方法forName(String className)来获取一个类的Class实例
//forName(String className)方法中的参数是你要获取的Class实例的类的全路径(包名.类名)
Class c2 = Class.forName("day14.Person");//获取Class实例的常用方法
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}