您的位置:首页 > 编程语言 > Java开发

java反射的理解

2016-07-08 23:42 525 查看
概念:

java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,

对于任意一个对象,都能够条用她的任意一个方法和属性,

这种动态的获取信息以及动态调用对象的方法的功能成为java的发射机制

Java反射的功能

  1)可以判断运行时对象所属的类

  2)可以判断运行时对象所具有的成员变量和方法

  3)通过反射甚至可以调用到private的方法

  4)生成动态代理

实现Java反射的类

  1)Class:它表示正在运行的Java应用程序中的类和接口

  2)Field:提供有关类或接口的属性信息,以及对它的动态访问权限

  3)Constructor:提供关于类的单个构造方法的信息以及对它的访问权限

  4)Method:提供关于类或接口中某个方法信息

  注意:Class类是Java反射中最重要的一个功能类,所有获取对象的信息(包括:方法/属性/构造方法/访问权限)

都需要它来实现

类classloader加载方式

1)Bootstrap ClassLoader 此加载器采用c++编写,一般开发中很少见。

2)Extension ClassLoader 用来进行扩展类的加载,一般对应的是jre\lib\ext目录中的类

3)AppClassLoader 加载classpath指定的类,是最常用的加载器,同时也是java中默认的加载器。

例子:

package lxh.reflect;

import java.lang.reflect.*;

public class ReflectDemo {

/**

为了看清楚Java反射部分代码,所有异常我都最后抛出来给虚拟机处理

public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchFieldException, NoSuchMethodException {

System.out.println("demo1:通过Java反射机制得到类的包名和类名");
demo1();

System.out.println("--------------------");
System.out.println("demo2:验证所有的类都是Class类的实例对象");
demo2();

System.out.println("--------------------");
System.out.println("demo3:通过Java反射机制,用 Class 创建类对象,这也就是反射存在的意义所在");
demo3();

System.out.println("---------------------");
System.out.println("demo4:通过Java反射机制得到一个类的构造函数,并实现创建带参实例对象");
demo4();

System.out.println("------------------------");
System.out.println("demo5:通过Java反射机制操作成员变量, set 和 get");
demo5();

System.out.println("-------------------------");
System.out.println("demo6:通过Java反射机制得到类的一些属性:继承的接口、父类、函数信息、成员信息、类型等");
demo6();

System.out.println("--------------------------");
System.out.println("demo7:通过Java反射机制调用类方法");
demo7();

System.out.println("");
System.out.println("demo8:通过Java反射机制得到类加载器信息");
demo8();


}

/**

* demo1:通过Java反射机制得到类的包名和类名

public static void demo1() {

Person person = new Person();

System.out.println(“包名:” + person.getClass().getPackage().getName());

System.out.println(“完整类名:” + person.getClass().getName());

}

/**

* demo2:验证所有的类都是Class类的实例对象

public static void demo2() throws ClassNotFoundException {

//定义两个类型都未知的Class,设置初值为null,看看如何给它们赋值成Person类

Class
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java