简述

使用反射万事第一步,获取 Class 类。
获取Class对象的方式:

  1. Class.forName()
  2. Class.class
  3. Class.getClass()

获取Class对象

如何取得操作类的Class对象,常用的有三种方式:
使用Class的静态方法来获取一个要被反射的对象。

1.调用Class.forName();

1
2
3
public void test() {
Class cls = Class.forName("com.test.Person");
}

2.使用类的.class字节文件

1
2
3
public void test() {
Class<?> cls = String.class
}

3.调用对象的getClass方法

1
2
3
4
public void test() {
String str = "abc"
Class<?> cls = str.getClass();
}

验证相同类型class是一个对象

代码验证不同 class 获取
用来同的方式来获取,实际上都是同一个 Class 的实例。

1
2
3
4
5
6
7
public static void main(String[] args) {
TestClass testClass = new TestClass();
Class clazz1 = TestClass.class;
Class clazz2 = testClass.getClass();
System.out.println(TestClass.class == clazz1);
System.out.println(TestClass.class == clazz2);
}

结果:

true
true

创建对象

创建对象需要使用到newInstance这个功能。

1
2
3
4
public void test() {
Class<User> clazz = User.class;
User user = clazz.newInstance();
}

即便是泛型的对象也可以创建:

1
2
3
4
public T1 convert(Class<T1> clazz) {
T1 t = clazz.newInstance();
return t
}

获取对象类型

获取 object 具体类型

1
2
3
4
5
6
7
8
9
10
public void test() {
TestInterface testInterface = new TestInterfaceImpl();
String aaa = "cccc";
getObject(testInterface);
getObject(aaa);
}

public static void getObject(Object object) {
System.out.println(object.getClass().getTypeName());
}

结果:

com.liukai.auth.authorization.service.TestInterfaceImpl
java.lang.String