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

  

posted @ 2020-04-04 14:48  奋斗的少年WH  阅读(249)  评论(0编辑  收藏  举报