相当生疏,但我很确定我从未见过像这样编写的代码。这是一个来自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 ");
}
}
答案 0 :(得分:3)
告诉我是否静电'第10行连接到go() 方法??
它与go方法无关。它被称为静态初始化块。
为什么输出是x y c g ???
以下是java
中的执行顺序答案 1 :(得分:2)
static
块有一个静态初始化块,将在加载类时运行。
http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html
答案 2 :(得分:1)
这是一个很难缩进的代码。在上面的课程中你有
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 ");
}
}
答案 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