java-------------反射

来源:互联网 发布:公众号文章网源码 编辑:程序博客网 时间:2024/06/04 20:14
package demo;/** * 反射(reflection) * 反射是功能强大且复杂的机制.反射是Java中提供的一种对象动态特性, * 它是一种不能预知未来,但可以驾驭未来的技术.主要应用于一些框架编程中. *  * 反射的作用 * 1.反编译  .class-->.java * 2.通过反射机制访问java对象的属性(Field),方法(method),构造器(Constructor) *  *  * Class类(java.lang.Class) * Java中反射的起点是一个Class对象,每个类都有一个这样的对象,此类 * 类对象会在类加载时创建,存储在堆内存,用于记录方法区中类的结构信息(例如属性信息,方法信息,....). *  * 获得Class类对象的三种方法 * 1).类名.Class * 2).实例对象.getClass() * 3).Class.forName("包名.类名") *  *  * Constructor 构造器 *   Constructor getConstructor(Class[] params) -- 获得使用特殊的参数类型的公共构造函数,  *   Constructor[] getConstructors() -- 获得类的所有公共构造函数  *   Constructor getDeclaredConstructor(Class[] params) -- 获得使用特定参数类型的构造函数(与接入级别无关)  *   Constructor[] getDeclaredConstructors() -- 获得类的所有构造函数(与接入级别无关) *  * Filed 属性 *     Field getField(String name) -- 获得命名的公共属性 *     Field[] getFields() -- 获得类的所有公共属性  *     Field getDeclaredField(String name) -- 获得类声明的命名的属性  *     Field[] getDeclaredFields() -- 获得类声明的所有属性 * * Method 方法 *  Method getMethod(String name, Class[] params) -- 使用特定的参数类型,获得命名的公共方法  *  Method[] getMethods() -- 获得类的所有公共方法  *  Method getDeclaredMethod(String name, Class[] params) -- 使用特写的参数类型,获得类声明的命名的方法  *  Method[] getDeclaredMethods() -- 获得类声明的所有方法 * * *  */public class ReflectDemo {   public static void main(String[] args) throws ClassNotFoundException{//获得类的加载器(扩展知识点):负责将类读到内存ClassLoader loader=Thread.currentThread().getContextClassLoader();System.out.println(loader);System.out.println(loader.getParent());System.out.println(loader.getParent().getParent());//静态方式构建实例对象(//前提必须知道有这么一个类)//Point p0=null;Point p1=new Point();Class<?> c1=p1.getClass();Class<?> c2=Point.class;Class<?> c3=Class.forName("demo.Point");//获得c3对象对应的类加载器(AppClassLoader)//System.out.println(c3.getClassLoader());System.out.println(c1==c2); //trueSystem.out.println(c2==c3); //true}}class Point{//Point.class(字节码文件)private int x;private int y;}/*扩展:了解类加载器及类的加载机制? 1)Bootstrap ClassLoader (启动类加载器) 2)ExtClassLoader(扩展类加载器) 3)AppClassLoader(应用类加载器) 4)自定义类加载器(场景,及实现)例如 class TeduClassLoader extends ClassLoader{}*/

原创粉丝点击