「java静态类加载」java静态块静态变量加载顺序

博主:adminadmin 2022-12-28 17:27:06 56

本篇文章给大家谈谈java静态类加载,以及java静态块静态变量加载顺序对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java类加载的过程是怎样的?

java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序如下: \x0d\x0a1、首先加载要创建对象的类及其直接与间接父类。 \x0d\x0a2、在类被加载的同时会将静态成员进行加载,主要包括静态成员变量的初始化,静态语句块的执行,在加载时按代码的先后顺序进行。 \x0d\x0a3、需要的类加载完成后,开始创建对象,首先会加载非静态的成员,主要包括非静态成员变量的初始化,非静态语句块的执行,在加载时按代码的先后顺序进行。 \x0d\x0a4、最后执行构造器,构造器执行完毕,对象生成。

java中静态内部类什么时候加载

只有在加载内部类的时候才初始化

看懂以下的代码,那么对于类的加载,基本上就没问题了,最后类的加载过程的解释

public class Test6 {

public static void main(String[] args){

new B();

new A.C();

}

}

class A{

private P p1 = new P("A--p1");

static P p3 = new P("A--p3");

public A(){

System.out.println("A()");

}

private P p2 =new P("A--p2");

static{

new P("A--static");

}

{new P("A{...}");}

public static class C {

private P p1 = new P("C--p1");

static P p3 = new P("C--p3");

public C(){

System.out.println("C()");

}

private P p2 =new P("C--p2");

static{

new P("C--static");

}

{new P("C{...}");}

}

}

class B extends A {

private P p1 = new P("B --p1");

static P p3 = new P("B -- p3");

public B() {

System.out.println("B()");

}

public P p2 = new P("B -- p2");

static {

new P("B -- static");

}

{new P("B{...}");}

}

class P {

public P(String s) {

System.out.println(s);

}

}

/*

有父类的情况

1. 加载父类

1.1 为静态属性分配存储空间并赋初始值

1.2 执行静态初始化块和静态初始化语句(从上至下)

2. 加载子类

2.1 为静态属性分配存储空间

2.2 执行静态初始化块和静态初始化语句(从上至下)

3. 加载父类构造器

3.1 为实例属性分配存数空间并赋初始值

3.2 执行实例初始化块和实例初始化语句

3.3 执行构造器内容

4. 加载子类构造器

4.1 为实例属性分配存数空间并赋初始值

4.2 执行实例初始化块和实例初始化语句

4.3 执行构造器内容

5 回到main()

内部类的加载过程也一样

java中的静态成员是否是在类加载的时候就被加载到内存中了?

对,首先可以肯定的是你的说法是正确的。

类加载的过程有以下几个过程:加载、验证、准备、解析

在准备的过程中,静态成员变量就会进行内存分配,而不包括实例变量,实例变量是在对象实例化随着对象一起分配在java堆中的。但是要注意一点,比如:public static int a=1;那变量在准备阶段过后的初始值是0而不是1.因为这个时候尚未执行任何的Java方法。而是赋值了一个初始值,如果是引用成员变量就会为null,其他基本类型对应的是其基本默认值。

ps:以上资料来自《深入Jvm虚拟机》

java普通方法和静态方法的加载(注意是加载)时机相同吗?存储方法耗费内存空间吗?

静态方法放在Date数据区 可以直接调用 和STATIC 变量一样的 在内存开始加载的时候就有空间了 普通方法是 程序运行到的时候才开始调用直接用

关于java静态类加载和java静态块静态变量加载顺序的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-28,除非注明,否则均为首码项目网原创文章,转载请注明出处。