Java反射

Java反射

  • 反射是运行期行为
  • Class类:这个类产生的实例对象用来描述某个类,类和对象共享当前类。
  • 三中获取Class对象的方法
    • Class.forName(全限定名);
    • 类名.class
    • 对象.getClass
    • class对象.getSuperClass 获取父类的class对象
  • 获取的class对象能做什么呢
    • 可以获取类中的属性
    • 获取类中的方法
    • 获取类中的构造器
    • 还可以干很多事情
public static void main(String[] args) throws ClassNotFoundException {
		//获取一个类的Class对象的方法
		Class clz = Class.forName("java.lang.String");
		System.out.println(clz);
		//获取String的Class对象
		Class clz1 = String.class;
		System.out.println(clz==clz1);
		//获取String对象对应的Class对象
		Class clz2 = "zhangsan".getClass();
		Class clz3 = "lisi".getClass();
		System.out.println(clz1==clz2);
		System.out.println(clz2==clz3);
		System.out.println(clz3.getSuperclass());
	}
	public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, SecurityException, NoSuchMethodException {
		//获取User的class对象
		Class clz = Class.forName("com.mage.reff.User");
		//获取属性
		System.out.println("获取public修饰的指定的属性");
		Field f = clz.getField("id");
		System.out.println(f.getName()+"=="+f.getType()+"=="+Modifier.toString(f.getModifiers()));
		
		System.out.println("获取public修饰的指定的所有属性");
		Field[] fs = clz.getFields();
		for(Field ff:fs) {
			System.out.println(ff.getName()+"=="+ff.getType()+"=="+Modifier.toString(ff.getModifiers()));
		}
		
		System.out.println("获取所有指定的属性");
		f = clz.getDeclaredField("name");
		System.out.println(f.getName()+"=="+f.getType()+"=="+Modifier.toString(f.getModifiers()));
		
		System.out.println("获取所有属性");
		fs = clz.getDeclaredFields();
		for(Field ff:fs) {
			System.out.println(ff.getName()+"=="+ff.getType()+"=="+Modifier.toString(ff.getModifiers()));
		}
		
		System.out.println("获取public修的所有方法  获取父类的");
		Method[] ms = clz.getMethods();
		for(Method mm:ms) {
			System.out.println(Modifier.toString(mm.getModifiers())+"=="+mm.getParameterCount()+"=="+mm.getName());
		}
		System.out.println("获取public修的指定方法  ");
		Method m = clz.getMethod("fun", Integer.TYPE,String.class);
		System.out.println(Modifier.toString(m.getModifiers())+"=="+m.getParameterCount()+"=="+m.getName());
		
		System.out.println("获取所有方法 不包含父类的");
		ms = clz.getDeclaredMethods();
		for(Method mm:ms) {
			System.out.println(Modifier.toString(mm.getModifiers())+"=="+mm.getParameterCount()+"=="+mm.getName());
		}
		System.out.println("获取的指定非public修饰的方法  ");
		m = clz.getDeclaredMethod("method", Integer.TYPE,String.class);
		System.out.println(Modifier.toString(m.getModifiers())+"=="+m.getParameterCount()+"=="+m.getName());
		
		
		System.out.println("获取构造器public");
		Constructor c = clz.getConstructor(null);
		System.out.println(c.getName()+"=="+c.getParameterCount());
		
		System.out.println("获取构造器 非public");
		c = clz.getDeclaredConstructor(Integer.TYPE,String.class,Integer.TYPE,Integer.TYPE);
		System.out.println(c.getName()+"=="+c.getParameterCount());
		
		System.out.println("获取所有的构造器 public");
		Constructor[] cs = clz.getConstructors();
		
		for(Constructor cc:cs) {
			System.out.println(cc.getName()+"=="+cc.getParameterCount());
		}
		
		System.out.println("获取所有的构造器");
		cs = clz.getDeclaredConstructors();
		
		for(Constructor cc:cs) {
			System.out.println(cc.getName()+"=="+cc.getParameterCount());
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值