美文网首页
javaSE_day17_反射

javaSE_day17_反射

作者: 智慧之门 | 来源:发表于2018-06-04 11:16 被阅读0次

    应用程序启动

      java 类名

      调用JVM,启动 JVM进程

    应用程序结束

      1.所有代码执行完了;

      2.有没能  处理 的Exception; Error

      3.System.exit(0)

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

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

    类的声明周期

    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_反射

          本文链接:https://www.haomeiwen.com/subject/xprddftx.html