首先写一个Person类:

 package lltse.base.reflectdemo;

 public class Person
{ private String name ="张三"; private int sex = 0; private int age=10; public String id ="中山大道"; protected int num =123213213; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getSex() {
return sex;
} public void setSex(int sex) {
this.sex = sex;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Person(String name,int sex,int age)
{
this.name = name;
this.sex = sex;
this.age = age;
} public Person()
{
} /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub } public int show(String name,int age)
{
System.out.println("showInfo:>>>:name"+name+"age:>>>"+age);
return age;
} public static String getName(String name)
{
return name;
}
}

其次是测试反射的相关方法


 package lltse.base.reflectdemo;

 import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; public class ReflectTest {
/**
* @param args
* @throws ClassNotFoundException
* @throws SecurityException
* @throws NoSuchMethodException
* @throws InvocationTargetException
* @throws IllegalArgumentException
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static void main(String[] args) throws ClassNotFoundException,
NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException,
InstantiationException {
// 获取Class方法一
// Person person = new Person();
// Class personClazz1 = person.getClass(); // 获取Class方法二
Class personClazz2 = Person.class; // 获取Class方法三
Class personClazz3 = Class.forName("lltse.base.reflectdemo.Person"); // 活动完整的包名和类名
System.out.println("personClazz3.getName():>>>"
+ personClazz3.getName()); /*
* 返回一个包含某些 Method 对象的数组,这些对象反映此 Class
* 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。
*/
Method[] methods = personClazz3.getMethods(); /*
* 返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,
* 包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
*/
Method[] declaredMethods = personClazz3.getDeclaredMethods(); for (int i = 0; i < methods.length; i++) {
System.out.println(methods[i].getName());
} // 返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法。
Constructor[] constructors = personClazz3.getConstructors(); for (int t = 0; t < constructors.length; t++) {
System.out
.println("constructors[" + t + "]:>>>>" + constructors[t]);
} // 实例化类对象
Person p = (Person) personClazz3.newInstance();
// 返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
Method method = personClazz3.getMethod("show", new Class[] {
String.class, int.class }); // 对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。p代表被实例化的类对象
int returnValue = (int) method.invoke(p, "zhangsan", 30);
System.out.println("returnValue:>>>" + returnValue); /*
* 如果底层方法是静态的,那么可以忽略指定的 obj 参数。该参数可以为 null。 如果底层方法所需的形参数为 0,则所提供的 args
* 数组长度可以为 0 或 null。
*/ Method method2 = personClazz3.getMethod("getName",
new Class[] { String.class });
String name = (String) method2.invoke(null, "test");
System.out.println("name:>>>" + name); /*获取类中自定义的私有属性*/
/*
* 以上代码中,Field.setAccessible(fields, true); 是最为关键的一点。
在使用java反射机制获取 JavaBean 的属性值时,如果该属性被声明为private 的,
需要将setAccessible设置为true. 默认的值为false.
如果不设置Accessible为true则无法获取私有属性的值。
*/
Field[] fields = personClazz3.getDeclaredFields();
Field.setAccessible(fields, true);// 修改访问控制权限 for (int i = 0; i < fields.length; i++)
{
System.out.println("变量声明类型:"+ fields[i]);
System.out.println("field name:>>>"+fields[i].getName() + "-> ");
System.out.println("field value:>>> "+fields[i].get(new Person())); }
}
}

												

java反射详解及说明的更多相关文章

  1. java 反射详解

    反射的概念和原理 类字节码文件是在硬盘上存储的,是一个个的.class文件.我们在new一个对象时,JVM会先把字节码文件的信息读出来放到内存中,第二次用时,就不用在加载了,而是直接使用之前缓存的这个 ...

  2. Java 反射详解 转载

    java 反射 定义 功能 示例 概要: Java反射机制详解 | |目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实例化Class类对象 ...

  3. java反射 详解!!!!

    java反射(特别通俗易懂) 反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一.反射的概述 JAVA反射机制是在运行状态 ...

  4. 【转载】Java 反射详解

    目录 1.什么是反射? 2.反射能做什么? 3.反射的具体实现 4.根据反射获取父类属性 4.反射总结 反射反射,程序员的快乐! 1.什么是反射? Java反射就是在运行状态中,对于任意一个类,都能够 ...

  5. 《Java基础知识》Java 反射详解

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

  6. java反射详解

    本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象 ...

  7. java反射详解(转)

    本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象 ...

  8. Java反射详解及应用示例

    反射是Java中最重要的内容之一,了解反射原理对我们学习各种框架具有很大的帮助 反射的原理: 反射应用示例: import java.lang.reflect.Constructor; import ...

  9. 【转】java反射详解

    转自:http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的 ...

随机推荐

  1. OC中NSLog函数输出格式详解

    OC中NSLog函数输出格式详解 %@ 对象 • %d, %i 整数 • %u 无符整形 • %f 浮点/双字 • %x, %X 二进制整数 • %o 八进制整数 • %zu size_t • %p ...

  2. Nagios 监控mysqlserver具体实现过程

    ,之后在页面就能够看到监控效果了 參考文章:http://os.51cto.com/art/201409/452605.htm

  3. 字符集UTFMB4

    http://my.oschina.net/leejun2005/blog/232732#OSC_h3_4 http://ju.outofmemory.cn/entry/211473

  4. 让linux history命令显示命令的运行时间、在哪个机器运行的这个命令

    1.在/etc/profile的最后加入例如以下部分: USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g ...

  5. OpenShift DNS的机制

    为什么不直接用kube-dns? 为什么不直接用kube-dns? 为什么不直接用kube-dns? 感谢各位前辈的专研,在下午有限的时间里把Openshift DNS的机制理了一下.更详细的材料大家 ...

  6. Android宝典入门篇-进阶

    学习Android前后有快有1个月了,本着不耍流氓,谈恋爱就要结婚的信念(其实AD开发也挺有趣的),做了自己的第一个Android小应用.本来准备今天和大家分享的,考虑到在不同屏幕上的效果没测试和本着 ...

  7. go语言基础之普通参数列表

    1.普通参数列表 (备注:只有一个参数) 示例1: package main //必须有一个main包 import "fmt" //有参无返回值函数的定义,普通参数列表 //定义 ...

  8. 为什么Domain controller上的time synchronization非常重要?

    虚拟机默认情况下所拥有的资源都是不同的, 比如说CPU clock. 在一个忙碌的系统中, 虚拟机甚至可能在很短的一段时间内被拒绝分配资源给它, 这种情况还可能发生在高系统负荷, VMotion, B ...

  9. .net非托管资源的回收

    释放未托管的资源有两种方法 1.析构函数 2.实现System.IDisposable接口 一.析构函数 构造函数可以指定必须在创建类的实例时进行的某些操作,在垃圾收集器删除对象时,也可以调用析构函数 ...

  10. EChart处理三维数据做图表、多维legend图例处理

    处理三维数据做图表,比如返回的数据就是一个个list,list里面某几个数据同属于一个维度,项目中的实例效果如下: 上面的khfx会有多个,比如db1.db2.db3等,下面的那些数据也会变化,目前需 ...