美文网首页
类加载机制之初始化

类加载机制之初始化

作者: 天草二十六_简村人 | 来源:发表于2019-03-06 19:31 被阅读0次

Java类加载分为5个过程,分别为:加载,连接(验证、准备、解析),初始化。

一、static变量的赋值在类的初始化中只会做一次。

public class TestSingleton {

    public static void main(String args[]) {
        SingletonTest singleton = SingletonTest.getSingleton();

        System.out.println("counter1=" + SingletonTest.counter1); ----1

        System.out.println("counter2=" + SingletonTest.counter2); ----0

    }
}

class SingletonTest {
    private static SingletonTest singleton = new SingletonTest();
    public static int counter1;
    public static int counter2 = 0; // 

    private SingletonTest() {
        counter1++;
        counter2++;
    }

    public static SingletonTest getSingleton() {
        return singleton;
    }
}

二、编译常量(static final)不会引起类的初始化,而运行常量会。
对比分析下面三类程序的运行结果,只有第一种是编译常量,后两种是运行常量。

public class TestClassLoader {

    public static void main(String[] args) {
        System.out.println(ClassLoaderTest.final_str);
    }
}

class ClassLoaderTest {
    static {
        System.out.println("init static block");
    }

    public static final String final_str = "abd";
}

上面运行结果是:
abd

public class TestClassLoader {

    public static void main(String[] args) {
       System.out.println(ClassLoaderTest.common_str);
    }
}

class ClassLoaderTest {
    static {
        System.out.println("init static block");
    }

    public static String common_str = "abd";

}

上面运行结果是:
init static block
abd

import java.util.Random;

public class TestClassLoader {

    public static void main(String[] args) {
        System.out.println(ClassLoaderTest.runtime_var);
    }
}

class ClassLoaderTest {
    static {
        System.out.println("init static block");
    }

    public static final int runtime_var = new Random().nextInt(100);
}

上面运行结果是:
init static block
40(随机数)

相关文章

  • JVM学习(二)类加载器

    目录 一、类加载器 还记得类加载机制吗?类加载机制的各阶段是加载、连接(验证、准备、解析)、初始化、使用、卸载。可...

  • 【Java基础】类加载过程

    要点:1、类加载机制的原理2、程序初始化的顺序3、类加载的代理模式(双亲委托机制) 一、类加载机制 JVM把cla...

  • 深入理解Java虚拟机之类加载机制

    虚拟机类加载机制 JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化,顺序如下 在这五个阶段中,加载、验...

  • 2020最新JAVA核心面试知识整理283页(带详解)

    部分目录预览 部分内容预览 JVM 类加载机制 JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下...

  • 反射,注解,动态代理

    类加载机制 当调用某个类时,系统会通过加载,连接,初始化三个步骤来对该类进行初始化操作。 加载 加载是指将类的字节...

  • 类加载原理分析&动态加载Jar/Dex

    简书 编程之乐转载请注明原创出处! JVM类加载机制 JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化...

  • Java类加载机制

    Java类加载机制 类的生命周期是:加载->验证->准备->解析->初始化->使用->卸载,只有在准备阶段和初始化...

  • jvm

    类加载机制 类的生命周期:加载,链接,初始化,使用,卸载 类加载器:(待补充) 双亲委派模型:当类加载器试图加在某...

  • 深入理解JVM类加载机制

    1.类加载机制 类加载机制,指虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,...

  • JAVA类加载机制

    1.JAVA类加载机制 JAVA类加载机制:虚拟机把Class文件加载到内存中,并对数据进行校验,转换解析和初始化...

网友评论

      本文标题:类加载机制之初始化

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