1 反射获取类
序号 | 方法 | 描述 |
---|
1 | className.class | 通过类名获取类,其中className为类名 |
2 | Class.forName(“类名全路径”) | 通过类名全路径获取类 |
3 | object.getClass() | 通过实例化的对象getClass()方法获取类 |
package com.company.common;
import java.io.Serializable;
public class TestClass implements Serializable {
private static final long serialVersionUID = 1377068656512767294L;
private String name;
private String address;
static {
System.out.println("我是静态代码");
}
{
System.out.println("我是动态代码");
}
public TestClass() {
System.out.println("我是构造代码");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "TestClass{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}
2 Usage
2.1 类名.class获取类
package com.company.reflect;
import com.company.common.TestClass;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectGetClassTest {
public static void main(String[] args) {
System.out.println("====类名.class获取类====");
Class<?> clzzUnderClassName = TestClass.class;
}
}
====类名.class获取类====
2.2 Class.forName(“类全路径名称”)
package com.company.reflect;
import com.company.common.TestClass;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectGetClassTest {
public static void main(String[] args) throws Exception{
System.out.println("====Class.forName(\"类全路径\")====");
Class<?> clzzUnderClassPath = Class.forName("com.company.common.TestClass");
}
}
====Class.forName("类全路径")====
我是静态代码
2.3 实例.getClass()获取类
package com.company.reflect;
import com.company.common.TestClass;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectGetClassTest {
public static void main(String[] args) {
System.out.println("====实例化对象后,getClass()方法获取对象====");
TestClass testClass = new TestClass();
Class<?> clzzUnderObject = testClass.getClass();
}
}
====实例化对象后,getClass()方法获取对象====
我是动态代码
我是构造代码
3 小结
- 类名.class获取类,是懒加载,使用时才实例化,不执行所有类中的代码
- Class.forName(“类名全路径”)获取类,需要catch异常,并执行静态代码
- 实例对象.getClass()获取类,获取实例化之后的类,类似反编译
【参考文献】
[1]https://www.cnblogs.com/hunt/p/7067141.html