类的加载连接以及初始化

类加载

JAVA程序对于类的使用可以分为两个方式:

一:主动使用

二:被动使用

JAVA程序只有对类时主动使用,才完成类的初始化

那?怎么才算对类的初始化呢?

以下便是对类的初始化几个类型

  1. 创建类的实例
  2. 访问某个类或接口的静态变量,或者对该静态变量赋值
  3. 调用类的静态方法
  4. 反射
  5. 初始了继承该类的子类
  6. JAVA虚拟机启动的时候就已经注明为启动的类

说完了主动使用,还差被动使用呢?为了顺便理解一部分主动加载,可以看下面的代码哦

package com.waibizi;

public class demo01 {

    public static void main(String[] args) {

        System.out.println(children.test);

    }

}

class parent{
    static String test = "我只是测试的";

    static {
        System.out.println("我是父类哦!!!");
    }
}

class children extends parent{

    static {
        System.out.println("我是子类哦!!!");
    }
}

结果

我们可以看到,子类的输出打并没有反应,结论:通过子类去访问父类,并没有将子类初始化,也就是说并没有使用到子类,即子类为被动使用,被动使用是不初始化类的

但是作为父类的类,此时因为调用到了其中的静态变量,所以导致父类进行了初始化。

我们再继续看以下的代码

package com.waibizi;

public class demo01 {

    public static void main(String[] args) {

        System.out.println(children.test);

    }

}

class parent{
    static String test = "我只是测试的";

    static {
        System.out.println("我是父类哦!!!");
    }
}

class children extends parent{
    static String test = "我只是子类测试的";
    static {
        System.out.println("我是子类哦!!!");
    }
}

输出结果

从结果我们得到的结论便是,子类初始化了,也会使父类一起初始化。

原文地址:https://www.cnblogs.com/waibizi/p/12113917.html

时间: 2024-10-11 09:09:57

类的加载连接以及初始化的相关文章

类的加载.连接与初始化

加载:查找并加载类的二进制数据 连接: -验证:确保被加载的类的正确性, -准备:为类的静态变量分配内存,并将其初始化为默认值 -解析:把类中的符号引用转换为直接引用 初始化:为类的静态变量赋予正确的初始值 ============================================================================ 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Cl

java 类的加载过程

ClassLoader的主要职责就是负责各种class文件到jvm中,ClassLoader是一个抽象的class,给定一个class文件的二进制名,ClassLoader会尝试加载并且在jvm中生成构建这个类的各个数据结构,然后使其分布在对应的内存区域中. 1类的加载过程简介 类的记载过程一般分为三个比较大的阶段,分别是加载阶段,连接阶段和初始化阶段,如下图所示 加载阶段:主要负责查找并且加载类的二进制数据文件,其实就是class文件. 连接阶段:连接阶段所做的工作比较多,细分的话还可以分为如

java 类的加载、连接和初始化

JVM和类 调用Java命令运行Java程序时,该命令将会启动一条Java虚拟机进程,不管该Java程序启动了多少条线程,创建了多少个变量,它们都处于该Java虚拟机进程里,共享该JVM进程的内存区.当系统出现以下几种情况时,JVM进程将被终止: 程序运行到最后正常结束: 程序运行到使用System.exit()或Runtime.getRuntime.exit()代码结束程序: 程序运行过程中遇到未捕获的异常或错误而结束: 程序所在的平台强制结束了JVM进程. 类的加载 当程序主动使用某个类时,

跟王老师学反射(二):Java类的加载、连接和初始化

跟王老师学反射(二):Java类的加载.连接和初始化 主讲教师:王少华   QQ群号:483773664 学习内容: 了解类的加载.连接和初始化 一.类的生命周期 当我们编写一个java的源文件后,经过编译会生成一个后缀名为class的文件,这种文件叫做字节码文件,只有这种字节码文件才能够在java虚拟机中运行,java类的生命周期就是指一个class文件从加载到卸载的全过程.一个java类的完整的生命周期会经历加载.连接.初始化.使用.和卸载五个阶段,当然也有在加载或者连接之后没有被初始化就直

类的加载机制和反射——一、类的加载、连接和初始化

类的加载.连接和初始化 1.JVM和类 (1)当调用java命令运行某个Java程序时,该命令会启动一个Java虚拟机进程,不管该Java程序有多么复杂,该程序启动了多少线程,他们都处于该Java虚拟机进程里. (2)同一个JVM的所有线程.所有变量都处于同一个进程里,他们都使用该JVM进程的内存区. 下面的ATast1和ATest2的输出结果分别是7和6,因为这两个不是位于同一个JVM中的. public class A { //定义该类的类变量 public static int a = 6

jvm讲解一:类的加载、连接和初始化

类的加载: 类的加载是指将类的class文件读入内存中,并为之创建一个java.lang.Class对象,也就是当程序使用任何类是,系统都会为之建立一个java.lang.Class对象(也可以说类是java.lang.Class的实例,详情请百度‘java.lang.Class’) 类的加载使用类加载器完成,JVM提供了几种类加载器以完成类的加载.除此之外,开发者可以通过继承ClassLoader来创建自己的类加载器. 通常可以使用不同的类加载器从不同的来源加载类的二进制数据:   从本地文件

java中的类的加载、连接、初始化

同一类的所有实例的静态变量共享用一块内存区. 但两个jvm之间并不会共享数据.类被加载之后,系统为之生成一个对应的class对象. 1.类的加载 将类的class文件读入内存,并创建class对象. 2.连接 连接的过程分为三步: (1)验证 被加载的类的内部结构是否正确.协调. (2)准备 为类变量分配内存并设置默认初始值. (3)解析 将类的二进制数据中的符号引用替换成直接引用. 3.初始化 虚拟机负责对类进行初始化,主要对类变量进行初始化. 1.声明类变量时指定初始值. 2.使用静态初始化

(二十六)类加载机制和类的加载、连接(验证、准备、解析)和初始化

一.概念 在代码编译后,就会生成JVM(Java虚拟机)能够识别的二进制字节流文件(*.class).而JVM把Class文件中的类描述数据从文件加载到内存,并对数据进行校验.转换解析.初始化,使这些数据最终成为可以被JVM直接使用的Java类型,这个说来简单但实际复杂的过程叫做JVM的类加载机制. Class文件中的"类"从加载到JVM内存中,到卸载出内存过程有七个生命周期阶段.类加载机制包括了前五个阶段. 如下图所示: 其中,加载.验证.准备.初始化.卸载的开始顺序是确定的,注意,

类的加载、连接和初始化

系统可能在第一次使用某个类时加载该类,也可能采用预加载机制来加载某个类.本节将会详细介绍类加载.连接和初始化过程中的每个细节. JVM 和类 当调用 java 命令运行某个 Java 程序时,该命令将会启动一个 Java 虚拟机进程,不管该 Java 程序有多么复杂,该程序启动了多少个线程,它们都处于该 Java 虚拟机进程里.正如前面介绍的,同一个 JVM 的所有线程.所有变量都处于同一个进程里,它们都使用该 JVM 进程的内存区.当系统出现以下几种情况时,JVM 进程将被终止. 程序运行到最