java反射的理解
2016-07-08 23:42
525 查看
概念:
java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,
对于任意一个对象,都能够条用她的任意一个方法和属性,
这种动态的获取信息以及动态调用对象的方法的功能成为java的发射机制
2)可以判断运行时对象所具有的成员变量和方法
3)通过反射甚至可以调用到private的方法
4)生成动态代理
2)Field:提供有关类或接口的属性信息,以及对它的动态访问权限
3)Constructor:提供关于类的单个构造方法的信息以及对它的访问权限
4)Method:提供关于类或接口中某个方法信息
注意:Class类是Java反射中最重要的一个功能类,所有获取对象的信息(包括:方法/属性/构造方法/访问权限)
都需要它来实现
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 {
}
/**
* 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反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,
对于任意一个对象,都能够条用她的任意一个方法和属性,
这种动态的获取信息以及动态调用对象的方法的功能成为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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树