Class 反射机制/获取Class对象的三种方式
条条大路通罗马——殊途同归
任何对象的创建都依赖于字节码,反射必要获取字节码对象
- 方式一
是最为熟悉的Object类中的getClass()方法,能够完成自己所属的字节码对象的获取。
人所共知:使用该方式,必要明确具体的类,并创建对象!
该方式示例↓
public void Test() {
TestFunction testFunction1 = new TestFunction();
Class calzz1 = testFunction.getClass();
TestFunction testFunction2 = new TestFunction();
Class calzz2 = testFunction.getClass();
System.out.println(clazz1 == clazz2);
//证明:输出值为true,上面对象的创建都依赖于同一class完成
}
- 方式二
是通过静态属性.class 获取对应的Class对象。
人所共知:需要明确类中的静态成员!
该方式示例↓
public void Test() {
Class clazz = TestFunction.class;
}
- 方式三
是通过描述字节码文件的Class类中的forName(String className)方法完成
人所共知:有Class名称即可,可在配置文件里对参数名称进行修改,更灵活
该方式示例↓
public void Test() throws ClassNotFoundExcepition {
// ClassName为字符串表现形式,与是否导包无关系
String className = "(‘class文件的路径’)"; // cn.test.TestFunction
Class clazz = Class.forName(className);
}
若Class文件的路径名称有误,在类加载时未能找到此类,将抛出传说中著名的ClassNotFoundExcepition异常。
this需编辑时,将被继承重写ヾ(๑╹◡╹)ノ"