Murcy 2016-11-23 04:50 采纳率: 0%
浏览 1424

如果将变量的初始化分为分配内存空间和赋值两个过程,一个类的初始化的顺序是怎样的

看到有一本书中说,(当一个类里只有非静态变量)非静态变量先分配内存空间,此时它的值
是null,赋值的语句会提取到构造函数中执行。
那么,一个类里有静态变量,静态代码块,非静态变量,非静态代码块和构造函数时,按照
分配内存空间和赋值两个过程,初始化的过程究竟是怎样的呢?

  • 写回答

3条回答 默认 最新

  • ServiceGood 2016-11-23 05:01
    关注

    1.项目启动时,静态变量首先被分配内存地址,并有一个变量名指向这一个地址 static a= xxx;然后加载静态方法。全都只加载一次。并且不会被GC
    非静态变量或方法 使用对象的时候才会被调用。那对象就是由构造方法new出来的。你不new这个对象构造方法就不会使用。
    2.简单测试类。
    public class TestNew {

    static int a = 3;

    static int b;

    static void meth(int x){

    System.out.println("x = "+x);

    System.out.println("a = "+a);

    System.out.println("b = "+b);

    }

    static {

    System.out.println("static block initialized");

    b = a*4;

    }

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    meth(42);

    }

    }

    结果:static block initialized
    x = 42
    a = 3
    b = 12

    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记