对于这个问题,面试官最喜欢问:
面试官:给我说下如何实现main()方法执行前输出“Hello World”
小明:摸了摸脑袋,看了看面试官,摆了下脑袋,很愁的答了句,这还真不知道。
面试官:mai()方法执行之前可以输出别的程序吗?
小明:沉默了下,想了想,main()方法是程序的入口方法,在程序运行时,最先加载的就是main()方法,那肯定不会执行别的程序 啊。
面试官:今天就这样吧,后续有消息通知你。
扎心了,老铁。
来:我们来分析下面试官的这道问题,众所周知,在java语言中,main()方法是程序的入口方法,在程序运行时,最先加载的就是main()方法,但这是否意味着main()方法就是程序运行时第一个被执行的模块了。
答案是否定的,为什么了,我们来分析下,在java语言中,由于静态块在类被加载的时候就会被调用,因此可以在mian()方法执行
前,利用静态代码快实现输出“Hello World”
俗话说的好,光说不练,假本事
上代码:
public class DemoTest {
//静态代码块
static{
System.out.println("我是HelloWorld(1)");
}
public static void main(String[] args) {
System.out.println("我是HelloWorld(2)");
}
}
//输出:
E:\java\bin\java.exe "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA
我是HelloWorld(1)
我是HelloWorld(2)
有的“缸径”就是不服,你这是按代码执行顺序执行的吧
好,那行,不服也得服:上代码
public class DemoTest {
public static void main(String[] args) {
System.out.println("我是HelloWorld(2)");
}
//静态代码块
static{
System.out.println("我是HelloWorld(1)");
}
}
//输出结果
E:\java\bin\java.exe "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA lang\2.6\commons-lang-2.6.jar com.mayikt.handler.controller.DemoTest
我是HelloWorld(1)
我是HelloWorld(2)
这就说明:静态快不管顺序如何,都会在main()方法执行之前执行。