javaSE_day17_反射

应用程序启动

  java 类名

  调用JVM,启动 JVM进程

应用程序结束

  1.所有代码执行完了;

  2.有没能  处理 的Exception; Error

  3.System.exit(0)

  4.运行的平台 强制 结束。

----------------------------------------

类的声明周期

javaSE_day17_反射_第1张图片

1.类的加载

  把 类的 字节码文件  加载 到JvM的内存 方法区中,并且 生成 一个 Class类型 的对象。

  ClassLoader 加载的

2.连接

     1)验证:验证 字节码文件 格式是否正确。

      2)准备:为 类变量(静态) 分配空间 默认初始化。

      3)解析:把 符号引用 转换(替换成) 直接引用(指针:指向内存地址的指针)。

        pulic void run(){ 代码}

3.初始化:为类变量 进行 声明处 和 静态块处初始化。

        当创建某个类的新实例时

        当调用某个类的静态成员;

        当初始化某个子类时,该子类的所有父类都会被初始化。

        当使用反射方法强制创建某个类或接口的对象时

        当虚拟机java命令运行启动类

--------------------------------------------------

类加载器

  1.根类加载器

    加载核心类库

    D:\Java\jdk1.8.0_144\jre\lib

    C++写的

  2.扩展类加载器

    加载 扩展类库

    D:\Java\jdk1.8.0_144\jre\lib\ext

  3.系统类加载器(应用类加载器)

    classpath路径下的类 .

  4.自定义类加载器

    路径 不是classpath路径

------------------------------------------------

父类 委托 机制 (双亲)

Student.class

1.查找 此类 是否 已经被加载过 ,已经加载过了,就返回Class对象

2.系统类加载器先不加载,父加载器(扩展类加载器) 是否存在;存在 ,父加载器(扩展类加载器) 递归调用 父加载器 (根类加载器) 加载;如果 根类加载器 能加载 ,就返回 Class对象,如果不能加载,返回扩展类加载器加载 ,能加载 返回 Class对象, 不能加载,用系统类加载器加载。

3.系统类加载器先不加载,父加载器(扩展类加载器) 是否存在;不存在,请求 根类加载器加载,能加载 返回 Class类型对象,不能,自己加载。

-------------------------------------------------

反射:从 方法区的 字节码中 动态的获得 类中的信息。

获得:

属性

  getDeclaredFields()获得所有属性(包括私有)

  getName() 获得名字

  getType() 获得类型

  getModifiers() 获得访问修饰符

  set() 给属性赋值

  get() 获得属性值

方法

  getDeclaredMethods() 获得所有方法

  getReturnType()      获得返回类型

  getParameterTypes()  获得参数列表

  invoke() 调用方法

构造

  getDeclaredConstructors()所有构造器

  newInstance() 调用构造器

------------------------------------------------------------------

注解:从JDK5开始, Java增加了对元数据(MetaData)的支持,就是注解Annotation;注解是指代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。

@interface 注解名{

  //成员变量,类型参数

  public

  默认

  public  类型 名();

  public 类型 名() default 默认值;

}

你可能感兴趣的:(javaSE_day17_反射)