Java之反射

简介

  • 反射允许对成员变量, 成员方法和构造方法的信息进行编程访问

class对象(字节码对象)的获取

  • 从Java文件 -> class文件class文件加载到内存创建对象
    源代码阶段加载阶段运行阶段
  • 获取的三种方法
    	Class.forName("全类名");	//方法一
    	类名.class				//方法二
    	对象.getClass();		//方法三
    
    • 示例
      //总的来说是为了获得Student类的字节码对象,Student省略不写
      	//方法一示例,最为常用
      	Class classA = Class.forName("全类名");
      	
      	//方法二示例,一般作为参数传递
      	Class classB = Student.class;
      
      	//方法三示例,当已有类的对象时使用,应用范围小
      	Student s = new Student();
      	Class classC = s.getClass();
      

构造方法的获取

  • Class类中用于获取构造方法的方法
    	Constructor<?> getConstructors()								//方法一,返回所有公共构造方法对象的数组
    	Constructor<?> getDeclaredConstructors()						//方法二,返回所有构造方法对象的数组
    	Constructor<?> getConstructor(Class<?>... parameterTypes)		//方法三,返回单个公共构造方法对象
    	Constructor<?> getDeclaredConstructor(Class<?>...parameterTypes)//方法四,返回单个构造方法对象
    
    • 示例
      //方法一
      	//1.获取字节码对象
      	Class classA = class.forName("全类名");
      	//2.获取构造方法
      	Constructor[] con1 = classA.getConstructors();
      	for(Constructor con : con1){
      		System.out.println(con);
      	}
      	//剩下三个示例依葫芦画瓢,不水了
      
  • Constructor类中用于创建对象的方法
    	T newInstance(Object...initargs)	//根据指令的构造方法创建对象
    	setAccessible(boolean flag)			//设置为true, 表示取消访问检查
    
    • 示例
    	Class classA = class.forName("全类名");
    	Constructor con = classA.getDeclaredConstructor(构造方法对应的形参列表);
    	con.setAccessible(true);	//若对应构造方法受保护,就可通过这个方法,暴力反射
    	//假设创建一个Student的类的对象
    	Student student = (Student)con.newInstance(传对应构造方法的参数);
    

成员变量的获取

  • Class类中用于获取成员变量的方法
      Field[] getFields()					//返回所有公共成员变量的对象的数组
      Field[] getDeclaredFields()			//返回所有成员变量的对象的数组
      Field[] getField(String name)			//返回单个公共成员变量的对象
      Field[] getDeclaredField(String name) //返回单个成员变量的对象
    
    • 示例
    	Class classA = Class.forName("全类名");
    	Field[] fields = classA.gerDeclaredfields();
    	for(Field field:fields){
    		System.out.println(field);
    	}
    	//一样,剩下三个示例依葫芦画瓢,不水了
    
  • Field类中用于创建对象的方法
    	void set(Object obj, Object value)	//赋值,参数一为对象名,参数二为修改的值
    	Object get(Object)					//获取值
    

成员方法的获取

  • Class类中用于获取成员方法的方法
    	Method[] getMethods()												//返回所有公共成员方法的对象的数组, 包括继承的
    	Method[] getDeclaredMethods()										//返回所有成员方法的对象的数组, 不包括继承的
    	Method[] getMethod(String name, Class<?>... parameterTypes)           //返回单个公共成员方法的对象
    	Method[] getDeclaredMethod(String name, Class<?>... parameterTypes)  //返回单个成员方法的对象
    
  • Method类中用于创建对象的方法
    	Object invoke(Object obj, Object... args)	//运行方法
    	//参数一, 用obj对象调用该方法
    	//参数二, 调用方法传递的参数(没有则空着)
    	//参数三, 方法的返回值(没有则空着)
    
    • 示例
      	//没动力了, 键盘都敲冒烟了,都一样,不水了
      	//同时笔者的Java之路就告一段落了,Java专栏结束了
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值