码迷,mamicode.com
首页 > 编程语言 > 详细

java反射

时间:2016-05-31 12:04:09      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

 一,先看一下反射的概念:

             主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。

             反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。但是反射使用不当会成本很高!

 二,反射机制的作用:

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

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

 三,在这里先看一下sun为我们提供了那些反射机制中的类:

java.lang.Class;                

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

java.lang.reflect.Method;

java.lang.reflect.Modifier;

四,具体功能实现:

//1. 反射机制获取类有三种方法,我们来获取Employee类型
 
//第一种方法:
    Class c1=Class.forName("Employee");
//第二种方法:每个类型都有class属性:
    Class c2=Employee.class;
//第三种方法: 任何一个对象都有getClass方法
    Employee=new Employee();
    Class c3=e.getClass();

    
 //2. 创建对象:利用newInstance;
 Class c=Class.forName("Employee");
 Object o=c.newInstance(); //调用了Employee的无参构造函数
 
 
 //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.getDeclaredFields())+" ");//获得属性的修饰符,例如public,static等等  
     sb.append(field.getType().getSimpleName()+"");//属性的类型的名字
     sb.append(field.getName()+";\n");//属性的名字+回车 
 }
 sb.append("}");
 System.out.println(sb);
 
 //获取特定的属性
 public static void main(String[] args) throws Exception{
     //获取类
     Class c=Class.forName("User");
     //获取id属性
     Field idF=c.getDeclaredFields("id");
     //实例化这个类赋给o
     Object o=c.newInstance();
     //打破封装
     //使用反射机制可以打破封装性,导致了java对象的属性不安全。
     idF.setAccessible(true);
     //给o对象的id属性赋值"110"  
     idF.set(o,"110");
     System.out.println(idF.get(o));
 }

 

方法关键字

含义

getDeclaredMethods()

获取所有的方法

getReturnType()

获得方法的放回类型

getParameterTypes()

获得方法的传入参数类型

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

获得特定的方法

 

 

构造方法关键字

含义

getDeclaredConstructors()

获取所有的构造方法

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

获取特定的构造方法

 

 

父类和父接口

含义

getSuperclass()

获取某类的父类

getInterfaces()

获取某类实现的接口

 

java反射

标签:

原文地址:http://www.cnblogs.com/zxqstrong/p/5545314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!