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. Visual Studio for Mac Preview离线下载安装

    Visual Studio for Mac离线下载安装. 环境:OS X EI Caption 10.11.2 .NET Core SDK 1.1 需预先安装 .NET Core 1.1 SDK ma ...

  2. 再谈JavaScript闭包及应用

    .title-bar { width: 80%; height: 35px; padding-left: 35px; color: white; line-height: 35px; font-siz ...

  3. .net 预防用户复制页面地址直接进入

    用户将某一页面的地址直接复制到另一个浏览器窗口(或者将链接地址分享给其他人),假如页面需要参数的时候因为直接进入没有从其他页面跳转,参数不存在,可能得不到想要的结果 处理方法:让页面跳到首页重新进入: ...

  4. Java设计模式 -- 基本原则

    这两个星期开始系统地学习设计模式相关的知识,对每一个原则或者设计模式主要从下面几点分析学习: 定义:简单地描述其作用 解决问题:说明该原则或设计模式解决什么限制条件下的问题. 结构图:绘制相关例子的U ...

  5. Windows消息机制

    Windows的消息系统是由3个部分组成的: · 消息队列.Windows能够为所有的应用程序维护一个消息队列.应用程序必须从消息队列中获取消息,然后分派给某个窗口.· 消息循环.通过这个循环机制应用 ...

  6. 学习笔记 HTTP参数污染注入

    HTTP参数污染注入源于网站对于提交的相同的参数的不同处理方式导致. 例如: www.XX.com/a?key=ab&key=3 如果服务端返回输入key的值,可能会有 一: ab 二:3 三 ...

  7. 为什么我会认为SAP是世界上最好用最牛逼的ERP系统,没有之一?

    为什么我认为SAP是世界上最好用最牛逼的ERP系统,没有之一?玩过QAD.Tiptop.用友等产品,深深觉得SAP是贵的有道理! 一套好的ERP系统,不仅能够最大程度承接适配企业的管理和业务流程,在技 ...

  8. Android 手机卫士--获取联系人信息并显示与回显

    前面的文章已经实现相关的布局,本文接着进行相关的功能实现 本文地址:http://www.cnblogs.com/wuyudong/p/5951794.html,转载请注明出处. 读取系统联系人 当点 ...

  9. Mac OS X中bogon的处理

    起因 最近写一个项目,之前在eclipse里的tomcat启动是没问题的,最近不知怎么了,启动的时候ehcache会报一个错误,说java.net.UnknownHostException: bogo ...

  10. ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock

    ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock 通过终端安装程序sudo apt-get install xxx时出错:E: Could not ...