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 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝