java高级

java 高级

java 虚拟机

1. java虚拟机进程停止的条件:

    - System.exit(int status);

    - 程序正常执行结束。

    - 程序在执行过程中遇到异常或错误而异常终止。

    - 由操作系统出现错误而导致java虚拟机进程终止。

2. 类加载过程(加载、连接与初始化)

    - 加载:查找并加载class的二进制数据。

    - 连接

        - 验证:

            确保被加载的类的正确性

            类文件的结构检查

            语义检查

            节码验证

             二进制兼容性的验证

    准备:为类的【静态变量】分配内存,并将其初始化为默认值。

    解析:把类的符号引用转换为直接引用。

初始化:为类的静态变量赋予正确的初始值。

3. java程序对类的使用方式可分为两种

主动使用(6种)会导致类被加载

    创建类的实例(new)

    访问某个类或者接口的静态变量、或者对该静态变量赋值

    静态的编译时常量不会初始化,编译时变量会引起常量。

    调用类的静态方法

    反射(Class.forName("com.jvm.test"))

    初始化一个类的子类

    java虚拟机启动时被表明为启动类的类(main 方法)

被动使用(不会导致类的初始化的)

所有java虚拟机实现必须在每个类或者接口被java程序首次主动使用的时候,才会初始化他们。

4. 类的加载

类的加载指江类的.class文件中的二进制数据,读入到内存中,将其放在运行时数据区的方法区内,然后再堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。

类加载器:

启动类加载器

扩展类加载器

系统类加载器

用户自定义类加载器

类的初始化时机

当java虚拟机初始化一个类时,要求他所有的父类都已经被初始化,但是这条规则并不适用于接口。

在初始化一个类时,并不会先初始化他所实现的接口。

在初始化一个接口时,并不会先初始化他的父接口。

因此,一个父接口并不会因为它的子接口或者实现类的初始化而初始化。只有当程序首次使用特定接口的静态变量时,才会导致该接口的初始化。

你可能感兴趣的:(java高级)