这里的静态是什么在java中引用

时间:2014-04-29 08:46:09

标签: java methods static main refer

相当生疏,但我很确定我从未见过像这样编写的代码。这是一个来自java副测试的模拟问题有人可以告诉我第10行中的'static'是否连接到go()方法?主要是为什么输出是x y c g ???

public class testclass {

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

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

    public static void main(String[] args) { 
        new testclass().go(); 
    } 

    void go() {
        System.out.print("g ");
    } 

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

} 

6 个答案:

答案 0 :(得分:3)

  

告诉我是否静电'第10行连接到go()   方法??

它与go方法无关。它被称为静态初始化块。

  

为什么输出是x y c g ???

以下是java

中的执行顺序
  1. 在类加载时,将执行静态字段/初始化块。
  2. 在对象创建时,JVM将字段设置为默认初始值(0,false,null)
  3. 调用对象的构造函数(但不要执行构造函数的主体)
  4. 调用超类的构造函数
  5. 使用初始值设定项和初始化块初始化字段
  6. 执行构造函数的主体

答案 1 :(得分:2)

static块有一个静态初始化块,将在加载类时运行。

http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

答案 2 :(得分:1)

这是一个很难缩进的代码。在上面的课程中你有

  1. 构造
  2. 一个类块
  3. 静态块
  4. 一种名为go()
  5. 的方法
    class testclass { 
    
    /**
     * Constructor, which gets called for every new instance, after instance block
     */
    testclass() { 
             System.out.print("c "); 
    } 
    
    /**
     * This is instance block which gets called for every new instance of the class
     * 
     */
    { 
      System.out.print("y "); 
    } 
    
    public static void main(String[] args) { 
        new testclass().go(); 
    } 
    
    /**
     * any method
     */
    void go() { 
             System.out.print("g "); 
    } 
    
    /**
     * This is static block which is executed when the class gets loaded
     * for the first time
     */
    static { 
          System.out.print("x "); 
    } 
    
    } 
    

答案 3 :(得分:0)

静态块将在类加载时首先初始化。这就是你得到o / p的原因

x as the first output

答案 4 :(得分:0)

是静态初始化块。因此,当您创建该类的对象时,它甚至会在构造函数之前首先运行静态初始化块。

答案 5 :(得分:0)

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

这是静态初始化程序块。这将在类加载时调用。首先打电话。

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

这是非静态初始化程序块。一旦创建了一个对象,它将被称为第一件事。

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

这是构造函数。在执行所有初始化程序块之后,将在对象创建过程中执行。

最后,

  void go() { System.out.print("g "); } 

普通方法调用。最后要执行的事情。

有关详细信息,请参阅http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html