• 反射相关


    <!--反射------------->
    //java.lang.reflect
    //Java反射机制是在运行状态时,对于任意一个类,都能够直到这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。
    	Class clazz = this.getClass();
    	Field[] declaredFields = clazz.getDeclaredFields();//获取类自身声明的所有方法,包含public、protected和private方法
    	Method[] methods = clazz.getMethods();//获取类的所有共有方法,包括自身的所有public方法,和从基类继承的、从接口实现的所有public方法
    	String name = clazz.getName();
    	String simpleName = clazz.getSimpleName();
    	Class<?> superclass = clazz.getSuperclass();//获得父类
    	Class<?> interfaces[] = clazz.getInterfaces();
    	Constructor<?> cons[] = clazz.getConstructors();//公共构造函数数组
    	Constructor<?> cons[] = clazz.getDeclaredConstructors();//所有的构造方法
    	Constructor<?> constructor = c.getConstructor(int.class);//只有使用类字面常量才能够获取基本类型的Class对象
        UserInfo userInfo = (UserInfo) constructor.newInstance(1);//构造实例
    	//---------------------------
        Class<?> clazz = this.getClass();
    	1.得到要调用的类的class
    	2.得到要调用的类中的方法
    	3.方法调用invoke
    		(不能使用包装类替换基本类型--NoSuchMethodException)
    	Class cls = Class.forName("chb.test.reflect.Student");  
    	Method m = cls.getDeclaredMethod("hi",new Class[]{int.class,String.class});  
    	m.invoke(cls.newInstance(),20,"chb");
    	
    	<!--静态方法调用,不必得到对象实例-->
    	Class cls = Class.forName("chb.test.reflect.Student");  
    	Method staticMethod = cls.getDeclaredMethod("hi",int.class,String.class);  
    	staticMethod.invoke(cls,20,"chb");//这里不需要newInstance  
    
    	<!--private成员变量需要设置允许访问-->
    	(IllegalAccessException: Class *.TestClass can not access a member of class *.Student with modifiers "private"  )
    	Class cls = Class.forName("chb.test.reflect.Student");  
    	Object student = cls.newInstance();//得到一个实例  
    	Field field = cls.getDeclaredField("age");  
    	field.setAccessible(true);//设置允许访问  
    	field.set(student, 10);  
    	System.out.println(field.get(student));
    

      

    <!--反射------------->
    //java.lang.reflect
    //Java反射机制是在运行状态时,对于任意一个类,都能够直到这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。
    	Class clazz = this.getClass();
    	Field[] declaredFields = clazz.getDeclaredFields();//获取类自身声明的所有方法,包含public、protected和private方法
    	Method[] methods = clazz.getMethods();//获取类的所有共有方法,包括自身的所有public方法,和从基类继承的、从接口实现的所有public方法
    	String name = clazz.getName();
    	String simpleName = clazz.getSimpleName();
    	Class<?> superclass = clazz.getSuperclass();//获得父类
    	Class<?> interfaces[] = clazz.getInterfaces();
    	Constructor<?> cons[] = clazz.getConstructors();//公共构造函数数组
    	Constructor<?> cons[] = clazz.getDeclaredConstructors();//所有的构造方法
    	Constructor<?> constructor = c.getConstructor(int.class);//只有使用类字面常量才能够获取基本类型的Class对象
        UserInfo userInfo = (UserInfo) constructor.newInstance(1);//构造实例
    	//---------------------------
        Class<?> clazz = this.getClass();
    	1.得到要调用的类的class
    	2.得到要调用的类中的方法
    	3.方法调用invoke
    		(不能使用包装类替换基本类型--NoSuchMethodException)
    	Class cls = Class.forName("chb.test.reflect.Student");  
    	Method m = cls.getDeclaredMethod("hi",new Class[]{int.class,String.class});  
    	m.invoke(cls.newInstance(),20,"chb");
    	
    	<!--静态方法调用,不必得到对象实例-->
    	Class cls = Class.forName("chb.test.reflect.Student");  
    	Method staticMethod = cls.getDeclaredMethod("hi",int.class,String.class);  
    	staticMethod.invoke(cls,20,"chb");//这里不需要newInstance  
    
    	<!--private成员变量需要设置允许访问-->
    	(IllegalAccessException: Class *.TestClass can not access a member of class *.Student with modifiers "private"  )
    	Class cls = Class.forName("chb.test.reflect.Student");  
    	Object student = cls.newInstance();//得到一个实例  
    	Field field = cls.getDeclaredField("age");  
    	field.setAccessible(true);//设置允许访问  
    	field.set(student, 10);  
    	System.out.println(field.get(student));
  • 相关阅读:
    window.open的小技巧分享
    2019实习笔试编程题刷题心得
    剑指offer——面试题32.1:分行从上到下打印二叉树
    剑指offer——面试题32:从上到下打印二叉树
    剑指offer——面试题30:包含min函数的栈
    剑指offer——面试题29:顺时针打印矩阵
    字节跳动2018校招测试开发方向(第二批)
    剑指offer——面试题27:二叉树的镜像
    剑指offer——二叉树
    剑指offer——面试题26:判断二叉树B是否为二叉树A的子结构
  • 原文地址:https://www.cnblogs.com/wuhu/p/9000933.html
Copyright © 2020-2023  润新知