码迷,mamicode.com
首页 > 编程语言 > 详细

java基础11(反射)

时间:2017-05-25 22:14:45      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:java基础   java   程序   

1.类加载器

     a.类的加载:   

      定义:当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。

     一个类在加载过程中的三部曲:

A.加载 :

就是指将class文件读入内存,并为之创建一个Class对象. 任何类被使用时系统都会建立一个Class对象。

B.连接:

验证 是否有正确的内部结构,并和其他类协调一致

准备 负责为类的静态成员分配内存,并设置默认初始化值

解析 将类的二进制数据中的符号引用替换为直接引用

C.初始化 

      b.类的加载时机:

A.创建类的实例

B.访问类的静态变量,或者为静态变量赋值

C.调用类的静态方法

D.使用反射方式来强制创建某个类或接口对应的java.lang.Class对象

E.初始化某个类的子类

F.直接使用java.exe命令来运行某个主类

      c.加载器分类

A.类加载的作用:

    负责将.class文件加载到内在中,并为之生成对应的Class对象。

B.类加载器的分类

   ①.Bootstrap ClassLoader 根类加载器

   也被称为引导类加载器,负责Java核心类的加载

   比如System,String等。在JDK中JRE的lib目录下rt.jar文件中

  ②. Extension ClassLoader 扩展类加载器

   负责JRE的扩展目录中jar包的加载。

   在JDK中JRE的lib目录下ext目录

 

   ③.Sysetm ClassLoader 系统类加载器

   负责在JVM启动时加载来自java命令的class文件


2.反射

    Student.java--Student.class(字节码文件)--看成一个对象,这个对象就叫字节码文件对象--对应的类Class

    定义:通过字节码文件对象去使用成员。

    获取字节码文件对象的三种方式:

A:Object类的getClass()方法

B:数据类型的静态class属性

C:Class类的静态方法forName()

注意:

在平常写案例的时候,我们直接使用第二种最方便。但是实际开发中,我们一般用的都是第三          种。是因为第三种接收的是一个字符串类型的参数,我们可以把这个参数作为配置文件的内容进行          配置,这样就实现了一个变化的内容。

    反射的使用步骤

 Class:

  成员变量 Field

  构造方法 Constructor

  成员方法 Method

 反射:class字节码文件对象 -- 去得到对应的成员对象 -- 通过该成员的对象调用方法使用,通过      反射获取构造方法并使用

          a.通过反射获取构造方法

 public Constructor[] getConstructors() 获取公共的构造方法

 public Constructor[] getDeclaredConstructors() 获取所有的构造方法(包括私有)

 public Constructor getConstructor(Class... parameterTypes) 根据构造参数获取公共的指定构造

 public Constructor getDeclaredConstructor(Class<?>... parameterTypes) 根据构造参数获取指定构造(包括私有,但是私有在使用的时候需要取消访问限制)

 

 b.通过反射获取构造方法并创建对象

          public T newInstance(Object... initargs)


 c.通过反射获取成员变量并使用

 public Field[] getFields()获取公有的成员变量

 public Field[] getDeclaredFields()获取全部的成员变量,包括私有

 public Field getDeclaredField(String name) 传入变量名称返回指定的成员变量对象,包括私有

 public Field getField(String name)传入变量名称返回指定的成员变量对象,仅可获取共有的

 public void set(Object obj,Object value)给一个对象的一个字段设置一个值

d.通过反射获取成员方法并使用

 public Method[] getMethods()获取所有公共成员方法

 public Method[] getDeclaredMethods()获取所有成员方法,包括私有

 public Method getMethod(String name, Class<?>... parameterTypes)

              参数一:方法名 参数二:方法参数类型.class 获取指定的公共方法

 public Method getDeclaredMethod(String name,Class<?>... parameterTypes)

              参数一:方法名 参数二:方法参数类型.class 获取指定的方法,包括私有

 Object invoke(Object obj, Object... args) 让某一个对象使用这个方法,并且传入参数

 


java基础11(反射)

标签:java基础   java   程序   

原文地址:http://12925070.blog.51cto.com/12915070/1929518

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!