您的位置:首页 > 编程语言 > Java开发

java 反射机制

2015-08-12 10:04 453 查看
java反射机制就是在运行状态中动态的知道任意一个类的属性和方法,对于任意一个对象能调用它的方法。

这个机制具有的功能有:

       能构造任意一个类的对象并且相应的能判断任意一个对象所属的类

       能得出任意一个类中的属性和方法

       能调用任意一个对象中的方法

       动态代理的组成部分

例子:

1.判断对象是否属于反射的类

public class test {
  public static void main(String args[]) throws ClassNotFoundException {   
          Class c = Class.forName("test");   
          System.out.println(c.isInstance(new String()));   
          System.out.println(c.isInstance(new test()));   

      }

}

这就是有一个test类,然后用创建一个test类对象,new一个string和一个test分别去对比,输出为false和true

2.获取任意一个类的所有属性

public class test {
private String name ;
private long password;
  public static void main(String args[]) throws Exception {   
          Class c = Class.forName("test");   
          getProperty(c);

      }
  
  public static Field[] getProperty(Class c) throws Exception {  
   //获取该类所有属性字段  
   //Field[] fields = c.getFields();//只获取public访问权限的属性字段(包括父类的)  
   Field[] fields = c.getDeclaredFields();//只获取该类的所有访问权限的属性(不含父类)  
   for(int i=0;i<fields.length;i++){  
       System.out.println("属性:"+fields[i]);  
   }  
   return fields;  
}

}

输出结果:

属性:private java.lang.String test.name

属性:private long test.password

3.获得对象的特定public属性的值

public static Object getProperty(Object owner,String fieldName) throws Exception {  
   //得到对象所属类  
   Class ownerClass = owner.getClass();  
   //获取该类的某个属性  
   Field field = ownerClass.getField(fieldName);  
   //获取某个对象的特定属性  
   Object property = field.get(owner);  
   //输出该属性信息  
   System.out.println(fieldName+"的属性值:"+property.toString());  
   return property;  
}  

4.获得对象中的方法,执行对象中的方法

public Method[] getMethods(Class c) throws Exception {  
   //获取该类所有方法  
   //Field[] fields = ownerClass.getMethods();//只获取public访问权限的方法(包括父类的)  
   Method[] methods = c.getDeclaredMethods();//只获取该类的所有访问权限的方法(不含父类)  
   //输出所有方法  
   for(int i=0;i<methods.length;i++){  
       System.out.println("方法:" +methods[i]);  
   }  
   return methods;  
}  

public Object invokeMethod(Object owner,String methodName,Object[] args) throws Exception {  
   //得到对象所属类  
   Class ownerClass = owner.getClass();  
   //获取该类的某个方法  
   Method method = ownerClass.getMethod(methodName, null);  
   //执行某个对象的方法  
   Object result = method.invoke(owner, args);  
   //输出结果信息  
   System.out.println("结果返回值:"+ result);  
   return result;  
}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 反射机制