这里的静态在java中指的是啥

Posted

技术标签:

【中文标题】这里的静态在java中指的是啥【英文标题】:what does static here refer to in java这里的静态在java中指的是什么 【发布时间】:2014-06-15 02:29:02 【问题描述】:

相当生锈,但我很确定我从未见过这样写的代码。这是一个来自 java 助理考试的模拟问题,有人可以告诉我第 10 行中的“静态”是否连接到 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 ");
    

 

【问题讨论】:

可能重复:***.com/questions/2943556/static-block-in-java static 被添加到类的静态初始化中。类初始化时从上到下执行。 啊..这解释了为什么首先要打印 x .. 谢谢你们 static ... 是类初始化器,当类第一次加载到 JVM 时调用。它总是在您可以访问代码中其他地方的类型之前执行。 此question 的绝对副本,应标记为重复 【参考方案1】:

告诉我第 10 行中的“静态”是否连接到 go() 方法??

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

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

以下是java中的执行顺序

    在类加载时,将执行静态字段/初始化块。 在对象创建时,JVM 将字段设置为默认初始值(0、false、null) 调用对象的构造函数(但不要执行构造函数的主体) 调用超类的构造函数 使用初始化器和初始化块初始化字段 执行构造函数的主体

【讨论】:

此question 的绝对副本,应标记为重复【参考方案2】:

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

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

【讨论】:

【参考方案3】:

这是缩进不佳的代码。在上面的课程中,您有

    构造函数 类块 静态块 还有一个叫做go()的方法

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 "); 
 

 

【讨论】:

【参考方案4】:
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

【讨论】:

【参考方案5】:

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

x as the first output

【讨论】:

【参考方案6】:

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

【讨论】:

以上是关于这里的静态在java中指的是啥的主要内容,如果未能解决你的问题,请参考以下文章

静态类的范围是啥?

AddressFamily.FireFox 在 .NET 套接字中指的是啥?

OData Edm.GeographyPoint 在 SQL Server 数据库中指的是啥类型

有人可以解释这个指针在这里指的是啥吗?

011111100 在此 LC-3 代码中指的是啥?

从 Java 代码中指定 DIP 尺寸的正确方法是啥?