反射创建Class的几种方法
参考链接:https://blog.csdn.net/sam_linux/article/details/12918797
import java.lang.reflect.*; import java.util.ArrayList; public class TestGetClass { public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException { //第一部分:获得类 获得类Class的三种方式 //1、Object.getClass() 只对引用类型有效(即必须是实例对象) Class strClass = "hello".getClass(); ArrayList list = new ArrayList(); Class listClass = list.getClass(); System.out.println(".getClass() [strClass=" + strClass + ",listClass=" + listClass + "]"); //2、类型.class,基础数据类型如此获得,(数据类型.class,实例对象不可以) Class<Integer> intClass = int.class; Class<String> str2Class = String.class; Class<int[]> intArrClass = int[].class; System.out.println(".class [intClass=" + intClass + ",str2Class=" + str2Class + ",intArrClass=" + intArrClass + "]"); //3、Class.forName()根据类路径获得 //Class<?> mysqlFNClass = Class.forName("com.mysql.jdbc.Driver"); Class<?> dFNClass = Class.forName("java.lang.Double"); Class<?> strFNClass = Class.forName("java.lang.String"); System.out.println("Class.forName [mysqlFNClass=mysqlFNClass" + ",dFNClass=" + dFNClass + ",strFNClass=" + strFNClass + "]"); //基本数据类型可以通过包裹类属性获得 Class<Double> dTYPE = Double.TYPE; Class<Void> voidClass = Void.TYPE; System.out.println(".TYPE [dTYPE=" + dTYPE + ",voidClass=" + voidClass + "]"); //第二部分:检测类(Class)的修饰符和类型 /** * 访问修饰符:public,protected,private * 需要重写的修饰符: abstract * 限制只能有一个实例的修饰符:static * 防止值被修改的修饰符:final * 强制严格的浮点行为的修饰符:strictfp * 注释Annotations */ // Modifier.toString(list.getModifiers()); // c 是一个类 // TypeVariable[] tv = list.getTypeParameters(); // Type[] intfs = list.getGenericInterfaces(); //第三部分:发现类成员(Members) Class<? extends User> uClass = (new User()).getClass(); System.out.println("uClass=" + uClass); Field[] declaredFields = uClass.getDeclaredFields(); for (Field field : declaredFields) { System.out.println("field=" + field.getName()); } Field id = uClass.getDeclaredField("id");//getDeclaredField是可以获取一个类的所有字段. System.out.println("id=" + id); Field id1 = uClass.getField("id1"); //getField只能获取类的public 字段. System.out.println("id1=" + id1); Method[] uMethods = uClass.getDeclaredMethods(); for (Method m : uMethods) { System.out.println("method=" + m.getName()); } System.out.println("package="+uClass.getPackage().getName()); } }