分析java输出

来源:百度知道 编辑:UC知道 时间:2024/09/24 22:31:58
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";}
} 代码输出:nullss 不知道为什么会是这样输出 帮忙解释一下啊

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

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

public static void main(String[] args)
{
System.out.println("执行前"+s);
go();
System.out.println("执行后"+s);
}

{
System.out.println("前"+s);
go();
System.out.println("后"+s);
}
static
{
System.out.println("静态块前:"+s);
go();
System.out.println("静态块后:"+s);

}

static void go()
{
s += "s";
System.out.println("静态函数"+s);

}

}

总结:由此可见,进入main函数后,先对main函数所在类的静态成员初始化,静态成员包括静态变量赋值,静态语句块的执行。注意:静态函数的定义不会执行,如这个文件中的static void go()
当所有的静态成员初始化后,再执行main函数中的其它语句,静态函数可以直接写函数名进行调用,如go()

第一次运行时,s等于null.\

你应该这样写
static String s="";
初始化一下

运行时:s要被初始化,初始化为null,然后继续初始化无名变量 static{go();}部分被执行,执行时s就成nulls,再调用main函数,就成nu