反射

反射机制指的是程序在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法。

反射是:指程序可以访问、检测和修改它本身状态或行为的一种能力

得到类

import java.lang.reflect.Modifier;

public class FanShe {
  public static void main(String[] args) {
	

	try {
		Class a = String.class;
		Class b= new String("qwert").getClass();
		Class c = Class.forName("java.lang.String");
		System.out.println(b.getName()+""+Modifier.isPublic(b.getModifiers()));
	    //二进制  为公有的那个位置是否为1,为1时则为公有
		Class d = Class.forName("oo.ll.nn.Student1");
		System.out.println(d.getName());
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
	
  }
}

class Student1{
	private String name = null;
	int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

public void test1() {
	   try {
		Class c = Class.forName("java.util.Date");  //加载驱动
		Method[] m = c.getMethods();  //里面的全部方法
		for(Method n:m) {
			Class t = n.getReturnType(); //得到方法的返回类型
			System.out.println(n.getName()+"返回方法"+t.getName());
			Parameter[] p = n.getParameters(); //得到方法里的参数
			for(Parameter pp:p) {
				System.out.println(pp.getName());
			}
			System.out.println();
		}
		Class tt = c.getSuperclass();  //得到父类
		System.out.println(tt.getName());
		Class[] ttt = c.getInterfaces();  //得到接口类
		
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
   }

往反射类的方法里添加数据,和输出数据

public void test2() {
	   try {
		   //将东西写到一个文件里
		   String str = null;
		   BufferedReader br = new BufferedReader(new InputStreamReader(this.getClass().getClassLoader().getResourceAsStream("tt.txt")));
	str = br.readLine(); //等于读到的那一行
	//这样可以先不用写类
	Class c = Class.forName(str);
	   Object o = c.newInstance();//实例化类,返回无参数的构造函数
	   
	   //调用方法
	   for(Method m:c.getMethods()) {
		   if("setName".equals(m.getName())) {
			   m.invoke(o,new Object[] {"学习"});  //往里面添加数据
			   break;
		   }
	   }
	   
	   for(Method m:c.getMethods()) {
		   if("getName".equals(m.getName())) {
			   Object oo = m.invoke(o,new Object[] {});//多态,不管是什么类型的变量
//			   System.out.println(m.invoke(o,new Object[] {}));
			   System.out.println(oo);
			   break;
		   }
	   }
	   } catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	   
	   
   }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值