看下java代码

来源:百度知道 编辑:UC知道 时间:2024/07/02 12:15:07
public class Tarsier {
static String s="-";
public static void main(String[]args){
go();
System.out.println(s);
}
{go();}
static{go();}
static void go(){s+="s";}
}
输出是-ss 解释一下这个结果
谢啦

public class Tarsier {
static String s = "-";

public static void main(String[] args)
{
go();
System.out.println(s);
}

{
go();
System.out.println("in protected");
}
static
{
System.out.println("in Static befor");
go();
System.out.println("in Static after");
}

static void go()
{
s += "s";
System.out.println("in Static go");
}

}

把代码加上输出就可以跟踪判断了,看来是先执行了static{
go();
}
然后执行了main函数,
个人觉得static 当作一个类成员变量来处理了,类在构造时先初始化类成员变量就是先执行了static { go();)框,然后才是main。

要是不把static{ go();}作为类成员变量就没办法解释为什么要先初始化它了。呵呵。

通过下面的代码可以清晰地看出执行过程

public class S {
static String s = "-";

public static void main(String[] args) <