反射创建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());
}
}

浙公网安备 33010602011771号