我的代码是: -
class Test
{
static int a = 11;
static
{
System.out.println("Hello static! " + main() + a);
}
public static void main(String[]args)
{
System.out.println("Hello String!");
}
public static char main()
{
System.out.println("Hello char!");
return 'H';
}
}
输出: -
Hello char!
Hello static! H11
Hello String!
为什么“你好char!”是在“hello static!”之前打印的?
答案 0 :(得分:3)
答案 1 :(得分:1)
为什么"你好char!"打印之前"你好静电!"?
因为main()
方法在完成sysout
语句打印Hello static
之前被调用并执行。
这是执行顺序: -
static
变量a
已加载并初始化为11
。static
块。 sysout
语句,调用main()
静态方法。目前尚未打印Hello static
,因为sysout
声明尚未完成。main()
方法。因为没有它,当前的sysout语句无法完成。main()
方法打印"Hello char"
,然后返回'H'
。static
内的sysout
块。sysout
完成执行,并打印"Hello static! H11"
注意: - 上面的sysout
表示 - System.out.println()
。
答案 2 :(得分:1)
让我们把它分解。
首先运行的是静态初始化程序块。所以我们运行这一行:
System.out.println("Hello static! " + main() + a);
但在我们调用该方法之前,我们必须调用main(),因为我们必须首先完全评估所有参数。
因此,在静态初始值设定项中的println之前调用它:
public static char main()
{
System.out.println("Hello char!");
return 'H';
}
打印出我们在第一行中看到的Hello char!
。
它返回H,它与Hello static!
最后,调用main(string [])来启动程序。我们在那里看到Hello String!
答案 3 :(得分:1)
这里的一般执行逻辑如下:
System.out.println()
的参数),调用char main()
方法。char main()
方法。char main()
内打印字符串:第一个输出行 void main()
,打印第三行:第三行 答案 4 :(得分:1)
在你的行
System.out.println(“Hello static!”+ main()+ a);
main()在System.out.println之前执行,因此有意义的是,char main()中的print语句将在外部print语句“Hello Static”之前执行。