本帖最后由 qianji20000420 于 2017-8-5 21:59 编辑

导读

  • 反射的概述
  • 反射的简单介绍
  • 类的加载
  • 类的初始化时机
  • 类加载器
  • 反射的使用时机


概述

  • 什么是反射?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。(来自度娘百科)
  • 为什么要用到反射这个机制呢?
反射是为了提高程序的灵活性,让他去适应更多的情况,反射并不是非用不可,它的目的是为了让代码更加的灵活。


类的加载

  • 什么是类的加载?
1、  当程序要使用某个类时,如果这个类并未加载到内存中,则系统会通过三个步骤-加载、连接、初始化,来完成对这个类的加载。
  • 加载
1、  将Class文件读入内存,随之建立一个Class字节码文件对象
  • 连接
1、  验证 是否有正确的内部结构,并且和其他类协调一致
2、  准备 负责为类的静态成员分配内存,并为其初始化默认值
3、  解析 将类的二进制数据中的符号引用替换为直接引用
  • 初始化
1、  如果类存在直接父类的话,且直接父类还没有被初始化,则先初始化其直接父类
2、  如果类存在一个初始化方法,就执行此方法


类的初始化时机

  • 创建类的实例
  • 调用类的静态方法
  • 使用类的非常量静态字段
  • 使用反射方式强制创建某各类或接口对应的Class对象
  • 初始化某个类的子类
  • 直接使用java.exe命令来运行某个主类(main方法启动时)


类加载器

  • 类加载器是什么?
类加载器是负责将class文件加载到内存中并随之创建一个Class对象
  • 类加载器的组成
1.Bootstrab  ClassLoader 根类加载器(引导类加载器)   负责对JAVA核心类的加载
2.Extension  ClassLoader 扩展类加载器  负责JRE扩展目录中jar的加载
3.System     ClassLoader 系统类加载器 一般是我们写的东西的加载


反射的使用时机

复制Part2的内容:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。(来自度娘百科)
注意:反射只能用于正在运行的程序。


下一篇

反射中对构造函数的调用
返回索引贴
第一次做教程,如果教程中有遗漏的或说错的地方请及时指出哇。~
[groupid=1181]Unknown Domain[/groupid]