1.前提:已知一个类的全类名,且该类在类路径下,可通过 Class 类的静态方法 forName() 获取,可能抛出 ClassNotFoundException,实例:Class cls1 = Class.forName("java.lang.Cat");
应用场景:多用于配置文件,读取类全路径,加载类
java
package com.heima.Hello.reflection.class_;
/**
* 演示得到 Class 对象的多种方式
*/
public class GetClass_ {
public static void main(String[] args) throws ClassNotFoundException {
// 1. Class.forName()
String classAllPath = "com.heima.hello.Car"; // 通过读取配置文件获取
Class<?> cls1 = Class.forName(classAllPath);
}
}
2**.前提:若已知具体的类,通过类的 class 获取,该方式最为安全可靠,程序性能最高实例:Class cls2 = Cat.class;**
应用场景:多用于参数传递,比如通过反射得到对应构造器对象
java
package com.heima.Hello.reflection.class_;
import com.heima.Hello.Car;
/**
* 演示得到 Class 对象的多种方式
*/
public class GetClass_ {
public static void main(String[] args) throws ClassNotFoundException {
// 2. 类名.class,多用于参数传递
Class cls2 = Car.class;
System.out.println(cls2);
}
}
3.前提:已知某个类的实例,调用该实例的 getClass() 方法获取 Class 对象,实例:Class clazz = 对象.getClass();// 运行类型
应用场景:通过创建好的对象,获取 Class 对象
java
package com.heima.Hello.reflection.class_;
import com.heima.Hello.Car;
/**
* 演示得到 Class 对象的多种方式
*/
public class GetClass_ {
public static void main(String[] args) throws ClassNotFoundException {
// 3. 对象.getClass(),应用场景,有对象实例
Car car = new Car();
Class cls3 = car.getClass();
System.out.println(cls3);
}
}
4.其他方式
ClassLoader cl = 对象.getClass().getClassLoader();
Class clazz4 = cl.loadClass("类的全类名");
java
package com.heima.Hello.reflection.class_;
import com.heima.Hello.Car;
/**
* 演示得到 Class 对象的多种方式
*/
public class GetClass_ {
public static void main(String[] args) throws ClassNotFoundException {
// 4. 通过类的加载器来获取到类的 class 对象
// (1) 先得到类加载器
ClassLoader classLoader = GetClass_.class.getClassLoader();
// (2) 通过类加载器得到 Class 对象
Class cls4 = classLoader.loadClass(classAllPath);
System.out.println(cls4);
}
}
5. 基本数据(int,char,boolean,float,double,byte,long,short)按如下方式得到 Class 类对象
Class cls = 基本数据类型.class
java
package com.heima.Hello.reflection.class_;
import com.heima.Hello.Car;
/**
* 演示得到 Class 对象的多种方式
*/
public class GetClass_ {
public static void main(String[] args) throws ClassNotFoundException {
// 5. 基本数据类型按如下方式得到 Class 对象
Class<Integer> integerClass = int.class;
Class<Character> characterClass = char.class;
Class<Boolean> booleanClass = boolean.class;
System.out.println(integerClass);
}
}
6.基本数据类型对应的包装类,可以通过.TYPE 得到 Class 类对象
java
package com.heima.Hello.reflection.class_;
import com.heima.Hello.Car;
/**
* 演示得到 Class 对象的多种方式
*/
public class GetClass_ {
public static void main(String[] args) throws ClassNotFoundException {
// 6.基本数据类型对应的包装类,可以通过.TYPE得到 Class 类对象
Class<Integer> type1 = Integer.TYPE;
Class<Character> type2 = Character.TYPE;
System.out.println(type1);
}
}