反射

 Student stu=new Student();
	 Class<?> c = Class.forName("test.Student");
	 //得到构造方法
	 Constructor<?> ca = c.getConstructor();
	 //通过构造方法实例化
	 ca.newInstance();

	 三种方式获得类对象
	 1.类名.class.newinstace:来获得无参的方法
	 Student stu = Student.class.newInstance();

	 2.对象名.getclass
	 Student stu=new Student();
	 Class<? extends Student> c = stu.getClass();
	 //Field:只能得到公开的属性
	 Field f = c.getField("sid");
	 //DeclaredField:得到所有的修饰符属性
	 Field f = c.getDeclaredField("sid");
	 System.out.println(f);
	 //得到属性名
	 System.out.println(f.getName());
	 //得到属性类型
	 System.out.println(f.getType());
	 //得到属性的修饰符,修饰符是用数字表示的
	 System.out.println(f.getModifiers());

	 3class.formName(全险定名)
	 Class<?> c = Class.forName("test.Student");
	 Object obj = c.newInstance();
	 Student stu=(Student)obj;
	  实例化类对象
	 c.newInstance();
	 获取该指定对象的属性
	 Field f = c.getDeclaredField("sid");
	 得到属性名
	 System.out.println(f.getName());
	 //得到属性类型
	 System.out.println(f.getType());
	 //得到属性的修饰符,修饰符是用数字表示的
	 System.out.println(f.getModifiers());
    
	//得到所有的属性
	Field[] fs = c.getDeclaredFields();
    for (Field f : fs) {
    	// 得到属性名
		 System.out.println(f.getName());
		// //得到属性类型
		 System.out.println(f.getType());
		// //得到属性的修饰符,修饰符是用数字表示的
		 System.out.println(f.getModifiers());
	}
     
	//私有的属性
	Class<?> c = Class.forName("test.Student");
	//拿到类对象的构造方法,():里面写他代什么参
	Constructor<?> cs = c.getConstructor(String.class);
	//给实例化对象添加值
	Object stu = cs.newInstance("soo1");
	//获取该对象的属性
	Field f = c.getDeclaredField("sid");
	//凡是该对象私有的(方法,属性)运行前都要授权
	f.setAccessible(true);
	System.out.println(f.get(stu));
    
    //私有的方法
    Constructor<?> cq = c.getDeclaredConstructor(Integer.class);
    Field ff = c.getDeclaredField("age");
    cq.setAccessible(true);
    Object sq = cq.newInstance(17);
    System.out.println(ff.get(sq));
    
    //多个参数
	//拿到该类的对象
	Class<?> c = Class.forName("test.Student");
	//拿到带两个构造方法
	Constructor<?> cs = c.getDeclaredConstructor(String.class,String.class);
    //用该构造方法实例化
	Object obj = cs.newInstance("s002","zs");
    //得到这两个属性
	Field[] fi = c.getDeclaredFields();
    for (Field f : fi) {
    	//给私有属性授权
		f.setAccessible(true);
		System.out.println(f.get(obj));
	}
	//得到该类对象方法
	Class<?> c = Class.forName("test.Student");
    Object obj = c.newInstance();
	Method m = c.getMethod("hello");
    //运行方法
    m.invoke(obj);
    
    //获取私有代参的方法`在这里插入代码片`
	Class<?> c = Class.forName("test.Student");
	Object obj = c.newInstance();
    
    Method m = c.getDeclaredMethod("add",Integer.class,Integer.class);
    m.setAccessible(true);
    System.out.println(m.invoke(obj, 1,2));
        
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值