反射的基础学习

获取Class类的四种方法

		/** 第一种反射方式 */
		Class clazz1 = new Cat().getClass(); //这种方式通过Object的getClass()方法获取Class
 
		/** 第二种反射方式 */
		Class clazz2 = Cat.class;
 
		/** 第三种反射方式 */
		// 先声明 xxx 类所在包的完整名
		String className = "com.test.Cat";
		Class clazz3 = Class.forName(className); //通过Class的静态方法forName()获取该类的对象
 
		/** 第四种反射方式 */
		//通过Class类获取类加载器然后通过类加载器ClassLoader的loadClass()的返回该类的对象
		Class clazz4 = this.getClass().getClassLoader().loadClass(className);

获取类中的变量,并进行赋值

@Test
	public void test() throws Exception {
		Class clazz = Cat.class;
		
       //通过Class的newInstance()获取该实例对象
       
       /***
         可能出现的异常
         IllegalAccessException - 如果类或其nullary构造函数不可访问。
         InstantiationException - 
		         1.这个类表示抽象类,接口,数组类,原语类型或void;
		         2.类没有空值构造函数; 
		         3.或者由于某种其他原因,实例化失败。
         ExceptionInInitializerError - 如果由此方法引发的初始化失败。
         ****/
		Cat cat = (Cat) clazz.newInstance(); 
        
        

		/** 声明为 public 类型的变量可以这样获取 **/
		//先通过Class的getField("成员变量名")获取到指定的属性对象实例
		Field field1 = clazz.getField("catNo");
		
		//通过属性实例对象给创建的实例的对应属性设置值
		field1.set(cat, "01");//这里就是拿到了Cat类中的catNo属性变量,然后给cat实例设置值
		System.out.println(student);
		
		/** 其他类型变量只能通过如下获取 **/
		Field field2 = clazz.getDeclaredField("catName");
		field2.setAccessible(true);
		field2.set(cat, "小三");
		System.out.println(student);
	}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值