java反射

Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性
加载类方法
一个类在 JVM 中只会有一个 Class 实例
//加载类1,常用
Class p = Class.forName(“路径(包名.文件名)”);
//加载类2
Class clazz2 = Person.class;
//加载类3
Class clazz3 = new Person().getClass();

     	Constructor[] con = p.getConstructors();//只能获取公有构造方法
		Constructor[] decon = p.getDeclaredConstructors();//获取含有私有构造函数方法
		Class[] in = p.getInterfaces();//获取接口
	    Class<?> superclass = p.getSuperclass();//获取继承的父类
	    Field[] fields = p.getFields();//获取非私有类属性
	    Field[] declaredFields = p.getDeclaredFields();//获取含有私有的所有类属性
	    Method[] methods = p.getMethods();//获取方法
  	    Method[] deme = p.getDeclaredMethods();//获取含有私有方法的集合
  	       	     
  	    //对变量赋值
  	    Object nein = p.newInstance();//实例化对象
  	    Field del = p.getDeclaredField("name");//获取具体的类属性名
  	    del.setAccessible(true);//获取权限
  	    del.set(nein, "李四");//该对象对该类属性赋值为李四
  	        	    
  	    //获取一个参数的方法
  	    Method meth1 = p.getDeclaredMethod("run",String.class);获取具体的类方法名,后面跟上参数
  	    meth1.setAccessible(true);//权限
  	    meth1.invoke(nein, "李四");//该对象执行该方法,传入的的参数为李四
  	         	    
  	    //调用有参的构造函数
  	    Constructor<?> cons = p.getConstructor(String.class,String.class);
  	    Class<?>[] parameterTypes = cons.getParameterTypes();//获取参数类型
  	    Object n = cons.newInstance("王麻子","18");
  	    
  	    //调用有多个参数的方法
  	    Method dec = p.getDeclaredMethod("info", String.class,int.class);
  	    dec.setAccessible(true);
  	    dec.invoke(n, "豆豆",88);
        
        //list集合的反射
        List<String> li = new ArrayList<String>();
	   Class<? extends List> cl = li.getClass();
	    try {
		Method dec = cl.getDeclaredMethod("add", Object.class);
		dec.invoke(li, "nihao");
		dec.invoke(li, 8888);
		dec.invoke(li, new People("lala","16"));
		dec.invoke(li, 'a');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值