JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
/**
* 获取 Class 实例的三种方法
*
* @author linan
*/
public class ClassDemo {
public static void main(String[] args) throws ClassNotFoundException {
//1.Type.class
Class<String> stringClass = String.class;
System.out.println(stringClass);//class java.lang.String
//2.getClass()
String string = "Hello";
Class<? extends String> stringClass1 = string.getClass();
System.out.println(stringClass1);//class java.lang.String
//3.Class.forName
Class<?> aClass = Class.forName("java.lang.String");
System.out.println(aClass);//class java.lang.String
//Class 实例在 JVM 中是唯一的 可以用 == 比较两个 Class 实例
System.out.println(stringClass == stringClass1);//true
}
}
/**
* 从 Class 实例获取 class 信息
*
* @author linan
*/
public class ClassDemo {
public static void main(String[] args) throws ClassNotFoundException {
Class<String> stringClass = String.class;
System.out.println(stringClass.getName());//java.lang.String
System.out.println(stringClass.getSimpleName());//String
System.out.println(stringClass.getPackage().getName());//java.lang
}
}
import java.time.Month;
/**
* 从 Class 实例判断 class 类型
*
* @author linan
*/
public class ClassDemo {
public static void main(String[] args) throws ClassNotFoundException {
Class<Runnable> runnableClass = Runnable.class;
System.out.println(runnableClass.isInterface());//true
Class<Month> monthClass = Month.class;
System.out.println(monthClass.isEnum());//true
Class<String[]> aClass = String[].class;
System.out.println(aClass.isArray());//true
}
}
/**
* 创建 class 实例
*
* @author linan
*/
public class ClassDemo {
public static void main(String[] args) throws IllegalAccessException, InstantiationException {
Class<String> stringClass = String.class;
String s = stringClass.newInstance();//只能调用 String 的无参构造
}
}