Java中静态关键字的首选项

时间:2013-09-17 05:59:27

标签: java

最近我在线检查代码并找到以下代码的输出:

public class Sequence { 

    Sequence() { 
        System.out.print("c "); 
    }

    { 
        System.out.print("y "); 
    } 

    public static void main(String[] args) { 
        new Sequence().go(); 
    }
    void go() { 
        System.out.print("g "); 
    }

    static{
        System.out.print("x "); 
    }

} 

为:

x y c g

任何人都可以帮助我了解此代码的功能。

4 个答案:

答案 0 :(得分:5)

  

任何人都可以帮助我了解此代码的功能。

不确定。首先发生的是按照section 12.4.2 of the JLS初始化类。这涉及按照section 8.7运行类的静态初始值设定项。这里我们有一个静态初始化程序,可以打印x

main方法然后创建Sequence的实例。这遵循JLS的section 12.5。首先调用超类构造函数(此处为Object),然后调用实例初始值设定项(section 8.6),然后调用构造函数体。这里有一个打印y的实例初始值设定项,以及一个打印c的构造函数体。

最后,执行go方法打印g

答案 1 :(得分:1)

这是一个考试测验问题,以确保您可以弄清楚各种构造函数和初始化块的执行顺序。

  1. 静态初始化程序
  2. 实例初始化程序
  3. 构造
  4. 你可以通过拥有超类来使这更复杂。

    或者拥有多个初始化程序块。

答案 2 :(得分:0)

static blockinstance block constructor,最后是明确调用的所有方法

答案 3 :(得分:0)

这看起来很可疑是一个考试问题。要理解答案,您可以将代码的各个部分分解为:

  1. 构造函数(打印出“c”)

    Sequence() { 
        System.out.print("c "); 
    } 
    
  2. 实例初始化程序(打印出“y”)

    { 
        System.out.print("y "); 
    }
    
  3. main方法(创建一个Sequence实例并调用此实例)

    public static void main(String[] args) {
        new Sequence().go();
    }
    
  4. go方法(打印出“g”)

    void go() {
        System.out.print("g ");
    }
    
  5. 静态初始化程序(打印出“x”)

    static {
        System.out.print("x ");
    }
    
  6. 在Java中,执行的顺序是:(3)main方法,(5)静态初始化器,(2)实例初始化器,(1)构造函数,go方法(4)。

    要了解有关初始化的详情,请参阅教程:http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html