JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

  

 1 package com.www.invoke;

 import java.lang.reflect.Method;

 /**
* 通过反射操作 类的方法
* java的反射 是说的是运行时 。
* 反射的总结:
* 1,每个类都有与之对用的Class对象。
* 2,每个方法都有与之对用的Method对象。
* 3,每个成员变量都有与之对用的Field对象。
* 4,第一步都是获得类对应的Class对象。
* 5,通过反射可以获得私有的成员变量和方法。
* @author Kelly.chen
*
*/
public class InvokeTest { public int add(int a, int b){
return a + b;
} public String getName(String name){
return "My name is "+name;
} public static void main(String[] args) throws Exception {
//获得类对应的的Class对象 方法一
//Class<?> classType = InvokeTest.class;
//获得类对应的Class对象 方法二
Class<?> classType = Class.forName("com.www.invoke.InvokeTest");
//获得InvokeTest 的一个对象 相当于 InvokeTest invokeTest = new InvokeTest();
Object invokeTest = classType.newInstance();
//测试是不是 InvokeTest的对象 结果是 ture
System.out.println(invokeTest instanceof InvokeTest); //获得 add() 方法
//第一个参数是方法的名字,第二个参数是Class类型的可变参数,与方法的参数对应
Method addMethod = classType.getMethod("add", new Class[]{int.class, int.class}); System.out.println(addMethod.getName());
//调用方法
//第一个参数是那个对象的方法,第二个参数是Object类型的可变参数,与方法参数对应
Object object = addMethod.invoke(invokeTest, new Object[]{2, 3}); System.out.println(object); //获得getName()方法
Method getNameMethod = classType.getMethod("getName", new Class[]{String.class});
//调用getName()方法
Object objectName = getNameMethod.invoke(invokeTest, new Object[]{"chenlei"});
System.out.println(objectName);
//得到所有public 方法(包括继承父类的方法)
Method[] methods = classType.getMethods();
for (Method method : methods) {
System.out.println(method.getName());//获得方法的名字
}
}
}

获得私有方法和成员变量

 package com.www.invoke;

 import java.lang.reflect.Field;
import java.lang.reflect.Method; public class PrivateTest { private String address="shanghai"; public int age = 20; protected String school = "北京大学"; private String sayHello(String name){ return "Hello :"+name;
}
public static void main(String[] args) throws Exception { Class<?> classType = PrivateTest.class;
PrivateTest privateTest = (PrivateTest) classType.newInstance();
//可以获得私有的方法,第一个参数是方法的名字,第二个参数是Class类型的可变参数,与方法的参数类型对应
Method method = classType.getDeclaredMethod("sayHello", new Class[] { String.class });
//true不再进行访问权限检查,之后就可以访问此私有方法了,false与之相反
method.setAccessible(true);
//调用方法
Object object = method.invoke(privateTest, new Object[] { "chenlei" });
System.out.println(object);
/* -----------------------------调用 成员变量-----------------------*/
//只能获得public 修饰的方法的成员变量
Field ageField = classType.getField("age");
//获得变量的值
int age = ageField.getInt(privateTest);
System.out.println(age);
Field addressField = classType.getDeclaredField("address");
//true不再进行访问权限检查,之后就可以访问此私有变量了
addressField.setAccessible(true);
//获得变量的值
String address = (String) addressField.get(privateTest);
System.out.println(address);
//获得所有public修饰的成员变量
Field[] fields = classType.getFields();
for (Field field : fields) {
System.out.println(field);
}
}
}

总结:

java的反射 是说的是运行时 。
反射的总结:
1,每个类都有与之对用的Class对象。
2,每个方法都有与之对用的Method对象。
3,每个成员变量都有与之对用的Field对象。
4,第一步都是获得类对应的Class对象。
5,通过反射可以获得私有的成员变量和方法。

  

java的反射的更多相关文章

  1. JAVA的反射理解

    1----------------------------反射的概念----------------------------------------------- JAVA的反射机制是在运行状态中,对 ...

  2. iOS运行时编程(Runtime Programming)和Java的反射机制对比

    运行时进行编程,类似Java的反射.运行时编程和Java反射的对比如下:   1.相同点   都可以实现的功能:获取类信息.属性设置获取.类的动态加载(NSClassFromString(@“clas ...

  3. Java 类反射机制分析

    Java 类反射机制分析 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某 ...

  4. java的反射机制

    一.java的反射机制浅谈 最近研究java研究得很给力,主要以看博文为学习方式.以下是我对java的反射机制所产生的一些感悟,希望各位童鞋看到失误之处不吝指出.受到各位指教之处,如若让小生好好感动, ...

  5. Java:反射

    初识Java反射机制: 从上面的描述可以看出Java的反射机制使得Java语言可以在运行时去认识在编译时并不了解的类/对象的信息,并且能够调用相应的方法或修改属性的值.Java反射机制的核心就是允许在 ...

  6. Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别

    一.Java的反射机制   每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图:   其中

  7. java笔记--反射进阶之总结与详解

    一.反射进阶之动态设置类的私有域 "封装"是Java的三大特性之一,为了能更好保证其封装性,我们往往需要将域设置成私有的, 然后通过提供相对应的set和get方法来操作这个域.但是 ...

  8. java笔记--反射机制之基础总结与详解

    一.反射之实例化Class类的5种方式: java的数据类型可以分为两类,即引用类型和原始类型(即基本数据类型). 对于每种类型的对象,java虚拟机会实例化不可变的java.lang.Class对象 ...

  9. Java中反射的三种常用方式

    Java中反射的三种常用方式 package com.xiaohao.test; public class Test{ public static void main(String[] args) t ...

随机推荐

  1. ImageSharp .NET Core跨平台图形处理库

    ImageSharp 是支持.NET Core跨平台图形处理库,ImageSharp是ImageProcessor 的.NET Core跨平台实现. ImageSharp 支持如下操作: 调整大小,裁 ...

  2. Navisworks API 简单二次开发 (自定义工具条)

    在Navisworks软件运行的时候界面右侧有个工具条.比较方便.但是在二次开发的时候我不知道在Api那里调用.如果有网友知道请告诉我.谢谢. 我用就自己设置一个工具.界面比较丑!没有美工. 代码: ...

  3. JavaWeb_day02_登录校验_查询所有员工信息_DeBug

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! WEB_day02 servlet 协议转对象 服务器 ...

  4. PHP中this,self,parent三个关键字

    this,self,parent三个关键字从字面上比较好理解,分别是指这.自己.父亲. this是指向当前对象的指针(姑且用C里面的指针来看吧)self是指向当前类的指针parent是指向父类的指针( ...

  5. 工业物联网或系统集成中应用消息队列(ActiveMQ,C#的demo)的场景全面分析

    1.[连载]<C#通讯(串口和网络)框架的设计与实现> 2.[开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 2.应用SuperIO(SIO)和开源跨平台物联网框 ...

  6. java web学习总结(二十二) -------------------简单模拟SpringMVC

    在Spring MVC中,将一个普通的java类标注上Controller注解之后,再将类中的方法使用RequestMapping注解标注,那么这个普通的java类就够处理Web请求,示例代码如下: ...

  7. Linux(九)__网络测试

    1.确认ip地址.子网掩码.网关是正确的. ifconfig 2.确认局域网是互通的,访问别人的电脑.网关 ping 发送数据包接收数据包,设备是否联通 /etc/sysconfig/network- ...

  8. datagrid与webAPI的数据交互(ef mvc )

    datagride自带分页工具,当使用分页工具的时候,初始化datagride或者带数据提交到API里面时,会以Json对象的形式将数据传递到API控制器里面,当没有过滤条件或者请求参数.和提交参数的 ...

  9. iOS提交AppStore后申请加急审核

    提交审核后进去下面链接申请加急审核链接:https://developer.apple.com/appstore/contact/appreviewteam/index.html 在I would l ...

  10. 安卓---Toast工具类,有点懒

    package com.liunan.myfirstapp.util; import android.content.Context; import android.widget.Toast; /** ...