首先写一个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. php中的var_dump()方法的详细说明

    首先看看实例: <?PHP$a = "alsdflasdf;a";$b = var_dump($a);echo "<br>";//var_du ...

  2. Spring EL方法调用实例

    Spring表达式语言(使用SpEL)允许开发人员使用表达式来执行方法和将返回值以注入的方式到属性,或叫作“使用SpEL方法调用”. Spring EL在注解的形式 了解如何实现Spring EL方法 ...

  3. 关闭OOMER

    http://www.cnblogs.com/itfriend/archive/2011/12/14/2287160.html http://blog.csdn.net/gugemichael/art ...

  4. [js插件]学习Highcharts

    引言 放了三天假,在家闲着没事,做了一个个人记账的web应用程序,其中一块就是数据统计的功能,也就学习了一下Highcharts. Highcharts Highcharts 是一个用纯JavaScr ...

  5. Linux系统下查看目录大小

    转载:http://blog.csdn.net/iamlaosong/article/details/7085178 我们有个系统每天要下载数据,为了检查下载数据是否正常,需要查看下载数据目录大小,因 ...

  6. hibernate将connection放进threadlocal里实现数据库连接池

    Why ThreadLocal? 无论如何,要编写一个多线程安全(Thread-safe)的程序是困难的,为了让线程共享资源,必须小心地对共享资源进行同步,同步带来一定的效能延迟,而另一方面,在处理同 ...

  7. ecmall用户登录后自动退出解决方法

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  8. java jdk查看源代码

    事实上假设你安装了JDK的话,你就已经拥有了java api的源代码. 安装JDK文件夹下的src.zip文件就是java api的源代码. 比方:C:\Program Files\Java\jdk1 ...

  9. Flask 学习(一)概述及安装

    Flask 概述及安装 Flask 简介 Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 . 官方网址 ...

  10. C# 中如何将List<string>里的集合转换成字符串并按指定的字符进行分隔?

    代码: using System; using System.Collections.Generic; publicclassMyClass { publicstaticvoidMain() { Li ...