首页 > 试题广场 >

cnt的值是

[单选题]
public class Test1 {

    static int cnt = 6;

    static {
        cnt += 9;
    }

    public static void main(String[] args) {
        System.out.println("cnt =" + cnt);
    }

    static {
        cnt /= 3;
    }
}


  • cnt=5
  • cnt=2
  • cnt=3
  • cnt=6
与大小写有关吗 怎么都小写的cnt 变大写了Cnt
发表于 2016-06-08 19:35:45 回复(1)
看了前面的解答,我想更正一下其中几位同学的解答。
如楼上有的同学说的,静态初始化块,静态变量这两个是属于同一级别的,是按代码写得顺序执行的!
而不是先执行静态变量后执行静态初始化块!这是错的。我举个例子:
public class Test{  static{  cnt = 6;
    }  static int cnt = 100;  public static void main(String[] args){
        System.out.println("cnt = " + cnt);
        //最后输出是50,如果按照错误说法就应该是3
        //按顺序执行就是cnt=6--->cnt=100---->cnt = 100/2 = 50.
    }  static{ cnt /= 2;
    }
}

编辑于 2016-08-13 18:05:41 回复(28)
(1)父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
(2)子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
(3)父类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
(4)执行父类构造方法。
(5)子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
(6)执行子类构造方法。
发表于 2017-02-21 19:52:59 回复(16)
在JVM调用mian方法之前先用进行静态内容的初始化。顺序为:父类的静态变量, 父类的静态代码块 ,子类的静态变量,子类的静态代码块。
发表于 2016-05-26 17:43:03 回复(10)
初始化顺序:
1.先父类,后子类
2.先属性,后构造函数
3.先静态,后非静态
4.先静态属性,后静态代码块
5.同一类型(非数据类型,指以上),按代码先后顺序
如有错误,欢迎指正,如有遗漏,欢迎补充
编辑于 2016-07-08 16:22:46 回复(8)
静态块中的代码按写的顺序首先依次执行,执行于方法前
发表于 2016-04-13 09:51:07 回复(1)
初始化静态变量--执行静态代码块--执行main方法

发表于 2016-05-08 15:21:57 回复(0)
执行顺序:父类静态变量,方法→父类静态代码块→子类静态变量,方法→子类静态代码块→父类非静态代码快→父类构造函数→子类非静态代码快→子类构造函数。注:静态变量,方法按照位置顺序执行。
发表于 2016-11-02 19:22:33 回复(0)
1) 静态块:用static申明,JVM加载类时执行,仅执行一次
2) 构造块:类中直接用{}定义,每一次创建对象时执行
3) 执行顺序优先级:静态块>main()>构造块>构造方法(因为main方法也是静态方法)
发表于 2017-12-27 21:00:07 回复(0)
虽然main方法是静态方法,但static{}静态代码块:优先执行且只执行一次。所以从上到下:先执行6+9,然后执行下面的静态代码块15/3=5,最后执行静态的main方法(/(エ)\)
发表于 2022-02-28 12:58:12 回复(0)
1. static int cnt = 6; 父类静态变量
2. cnt += 9; (cnt=15),父类静态代码块1
3. cnt /=3;(cnt=5),父类静态代码块2


发表于 2018-01-11 14:10:46 回复(0)
public class Test1{
    static int cnt = 6;
    static{
        cnt += 9;
        System.out.println("1.cnt ="+cnt);
    }
public static void main(String[] args) {
System.out.println("3.cnt ="+cnt);
}
static{
    cnt /=3;
    System.out.println("2.cnt ="+cnt);
    };
}
这样编译上就足以看到代码的执行顺序了
发表于 2016-11-01 10:25:23 回复(0)
代码块可以分为:
  • 静态代码块:静态代码块只执行一次,且比Main方法先执行,当类加载的时候就主动初始化,静态代码块和静态变量是按照顺序执行的,而静态方法只有被调用的时候才会执行。
  • 构造代码块:和实例变量类似
  • 普通代码块:在方法中.
  • -----------------------------------------------------------
如果类还没有被加载: 
1、先执行父类的静态代码块和静态变量初始化,并且静态代码块和静态变量的执行顺序只跟代码中出现的顺序有关。 
2、执行子类的静态代码块和静态变量初始化。 
3、执行父类的实例变量初始化 
4、执行父类的构造函数 
5、执行子类的实例变量初始化 
6、执行子类的构造函数 

如果类已经被加载: 
则静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造方法。

发表于 2021-09-08 21:23:42 回复(1)
(1)父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
(2)子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
(3)父类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
(4)执行父类构造方法。
(5)子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
(6)执行子类构造方法。
发表于 2017-06-19 19:58:42 回复(0)
先初始静态变量,在执行代码块,不知道对不对?
发表于 2016-04-09 18:10:27 回复(2)
jvm 调用main 方法之前顺序应该是静态变量和静态代码块同级(谁写在前面写先执行),但是静态变量会先分配一个存储空间 public class Jt {    
      static {         s ="120";     }     
      static  String s = "00";          
      public static void main(String[] args) 
        {         System.err.println(s);     }
}
这里输出的是00 因为先给s分配了存储空间,然后再顺序执行s=120 s=00.所以编译不会报错。

编辑于 2018-11-21 09:51:35 回复(0)
为了判断是先执行静态变量还是先执行静态块,做个实验。
第一种情况:先写静态变量,后写static块

第二种情况 :先写static块,后写静态变量

结果表明:是按照出现的顺序执行的。
发表于 2017-04-05 09:45:43 回复(2)
我来给个详细的解答吧: Java初始化遵循三个原则 1.静态对象/变量优先于非静态对象/变量,其中,静态对象/变量只初始化一次。 2.父类优先于子类进行初始化。 3.按照成员变量的定义顺序进行初始化。 一般执行顺序如下: 父类静态变量 父类静态代码块 子类静态变量 子类静态代码块 父类非静态变量 父类非静态代码块 父类构造方法 子类非静态变量 子类非静态代码块 子类构造方法
发表于 2016-10-19 00:52:07 回复(0)
(6+9)/3=5
发表于 2016-04-11 22:04:07 回复(0)
代码块可以分为: 静态代码块:静态代码块只执行一次,且比Main方法先执行,当类加载的时候就主动初始化,静态代码块和静态变量是按照顺序执行的,而静态方法只有被调用的时候才会执行。 构造代码块:和实例变量类似 普通代码块:在方法中. ----------------------------------------------------------- 如果类还没有被加载: 1、先执行父类的静态代码块和静态变量初始化,并且静态代码块和静态变量的执行顺序只跟代码中出现的顺序有关。 2、执行子类的静态代码块和静态变量初始化。 3、执行父类的实例变量初始化 4、执行父类的构造函数 5、执行子类的实例变量初始化 6、执行子类的构造函数 如果类已经被加载: 则静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造方法。
发表于 2022-06-03 09:44:09 回复(0)