java-反射 基础

原文:http://blog.csdn.net/liujiahan629629/article/details/18013523

一,常用的类。

java.lang.Class;                

java.lang.reflect.Constructor; java.lang.reflect.Field;        

java.lang.reflect.Method;

java.lang.reflect.Modifier;


二,基本作用。

  1,反编译:.class-->.java

        2,通过反射机制访问java对象的属性,方法,构造方法等;

         这样好像更容易理解一些,下边我们具体看怎么实现这些功能。

三,具体事项。

  1,反射机制获取类有三种方法,我们来获取Employee类型。

<span style="white-space:pre">		</span>// 第一种方式:
		Class c1 = Class.forName("Employee");
		// 第二种方式:
		// java中每个类型都有class 属性.
		Class c2 = Employee.class;

		// 第三种方式:
		// java语言中任何一个java对象都有getClass 方法
		Employee e = new Employee();
		Class c3 = e.getClass(); // c3是运行时类 (e的运行时类是Employee)

2 ,创建对象:获取类以后我们来创建它的对象,利用 new Instance

Object object=c1.newInstance();
3.获取属性,分为获取所有属性和获取指定属性。

a.获取所有属性。

		//获取整个类  
    Class c = Class.forName("java.lang.Integer");  
      //获取所有的属性?  
    Field[] fs = c.getDeclaredFields();  

           //定义可变长的字符串,用来存储属性  
    StringBuffer sb = new StringBuffer();  
    //通过追加的方法,将每个属性拼接到此字符串中  
    //最外边的public定义  
    sb.append(Modifier.toString(c.getModifiers()) + " class " + c.getSimpleName() +"{\n");  
    //里边的每一个属性  
    for(Field field:fs){  
        sb.append("\t");//空格  
        sb.append(Modifier.toString(field.getModifiers())+" ");//获得属性的修饰符,例如public,static等等  
        sb.append(field.getType().getSimpleName() + " ");//属性的类型的名字  
        sb.append(field.getName()+";\n");//属性的名字+回车  
    }  

    sb.append("}");  

    System.out.println(sb); 
b.获取指定的属性,对比传统的方法来学习。

		//获取类  
    Class c = Class.forName("test.Employee");  
    //获取id属性  
    Field name = c.getDeclaredField("name");  
    //实例化这个类赋给o  
    Object o = c.newInstance();  
    //打破封装  
    name.setAccessible(true); //使用反射机制可以打破封装性,导致了java对象的属性不安全。  
    //给o对象的id属性赋值"110"  
    name.set(o, "hh"); //set  
    //get  
    System.out.println(name.get(o));  

 4 ,获取方法,和构造方法,不再详细描述,只来看一下关键字:

方法关键字

含义

getDeclaredMethods()

获取所有的方法

getReturnType()

获得方法的放回类型

getParameterTypes()

获得方法的传入参数类型

getDeclaredMethod("方法名",参数类型.class,……)

获得特定的方法

 

 

构造方法关键字

含义

getDeclaredConstructors()

获取所有的构造方法

getDeclaredConstructor(参数类型.class,……)

获取特定的构造方法

 

 

父类和父接口

含义

getSuperclass()

获取某类的父类

getInterfaces()

获取某类实现的接口

  

         这样我们就可以获得类的各种内容,进行了反编译。对于JAVA这种先编译再运行的语言来说,反射机制可以使代码更加灵活,更加容易实现面向对象。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值