• 再回首Java第二十二天


    类加载器的种类:

    1.Bootstrap ClassLoader: 负责加载Java核心类,即$JAVA_HOME/jre/lib/rt.jar,由C++实现

    2.Extension ClassLoader: 负责加载Java平台扩展功能的一些jar,包括$JAVA_HOME/jre/lib/*.jar和$JAVA_HOME/jre/lib/ext/*.jar

    3.System(App) ClassLoader:负责加载classpath中指定的jar或.class

    4.Custom ClassLoader:属于应用程序根据自身需要自定义的ClassLoader,如tomcat、jboss都会根据j2ee规范自行实现ClassLoader

    加载过程中会先检查类是否被已加载,检查顺序是自底向上,从Custom ClassLoader到BootStrap ClassLoader逐层检查,只要某个classloader已加载就视为已加载此类,保证此类只被所有ClassLoader加载一次。而加载的顺序是自顶向下,也就是由上层来逐层尝试加载此类。

    类加载的过程:
    一、加载:将.class文件加载到内存中,并为之生成java.lang.Class对象
    二、链接:
    1.验证:检验被加载的类是否有正确的内部结构,并与其它类协调一致
    2.准备:为类属性分配内存空间,并赋默认值
    3.解析:将二进制文件中的符号引用转换成直接引用
    三、初始化:进入初始化阶段,JVM负责对类进行初始化,也就是对静态属性进行初始化。对静态属性进行初始化的方式有两种:声明静态属性时指定初始值;静态初始化块中指定初始值

    类初始化包含的步骤
    1.假如这个类还没有被加载和链接,程序先加载链接该类
    2.如果该类的直接父类还没有被初始化,则先初始化其直接父类
    3.假如该类中有初始化语句,则系统依次执行这些初始化语句
    当执行到第二步时,系统对直接父类的初始化步骤也遵循这三个步骤,依次类推,JVM最先初始化的类总是java.lang.Object类,当程序初始化一个类的时候,系统会保证该类以及它的所有父类都会被初始化

    类初始化的时机:
    1.使用new关键字实例化类时,使用反射创建Class对象对应类的实例时,使用反序列化创建对象时
    2.调用类的静态方法时
    3.使用类的静态属性时(final static)属性除外,因为这样的属性在编译期就会被直接替换成实际值
    4.初始化子类时,子类的所有父类都会被初始化
    5.使用反射强制创建类或接口对应的Class对象时
    6.使用java.exe命令运行主类时,JVM会先初始化主类

    什么是反射,反射机制可以实现什么样的功能
    在Java中反射就是指可以在运行期载入,探知和使用编译时期完全未知的类或接口
    获取类的信息,动态创建类的对象,设定成员变量的值,调用方法和动态地创建访问数组

    Java中获取Class对象的方法:类名.class、对象.getClass()、Class.forName方法

    Class类的getFields()、getMethods()、getConstructors()方法同getDeclaredFields()、getDeclaredMethods()、getDeclaredConstructors方法的区别在于前面的方法只能获取public修饰的,而后面的能获得所有访问权限控制符修饰的

    Java中创建对象的四种方式为:new 反射 克隆 反对象序列化

    通过反射创建对象的两种方式
    1.使用Class对象的newInstance()方法来创建该Class对象对应类的实例。这种方式要求Class对象对应的类有默认的构造器,执行newInstance()方法时,实际调用的是默认的构造器来创建实例
    2.使用Class对象获取对应的Constructor对象,再调用Constructor对象的newInstance()方法创建Class对象对应的类的实例

  • 相关阅读:
    Scrum框架及其背后的原则(上)——Scrum 框架的伪代码描述[转载自InfoQ]
    用程序给闺女出算数题——我的头脑体操
    敏捷实践调查结果[翻译转载]
    一.初识Selenium
    二.Selenium安装相关文件
    Review of American Beauty(unoriginal)
    三.Selenium IDE学习
    将Java Project转变为Dynamic Web Project
    功能自动化工具watiJ(转载)
    Selenium前奏
  • 原文地址:https://www.cnblogs.com/Mrxiaolong/p/5456909.html
Copyright © 2020-2023  润新知