文章目录
- 一. 为什么需要主方法
- 二. Java程序初始化的顺序
一. 为什么需要主方法
Java是面向对象的语言,即所谓的一切皆对象。我们可以吧一个Java程序想象成为一个房子,你要进入房子,必须得先开门来进入房间。房间里的所有东西,都可以抽象成对象。你要做饭,洗衣服,得通过对象(锅碗瓢盆洗衣机)来做这件事,具体怎么做,先干啥后干啥,得看具体到做什么事,也就是通过对象来调用方法。而程序的入口,就是这间房子的门。
public static void main(String[] args)
就是Java程序的入口,Java是半编译半解释性的语言,在程序执行时,它先会把.java
文件编译成.class
的字节码(区别于编译型语言的二进制代码和解释型语言),JVM在运行程序时,会首先来寻找main()
作为入口执行程序。
public
是修饰权限,表明任何类或对象均可访问这个方法,但是第一次执行的时候,并没有实例化对象,所依并不能通过对象来调用主方法。所以,需要用static
来修饰,表明main()
是静态方法,只要类加载后,不需要用过对象来调用,直接通过类名.方法名来调用
字符串数组参数args
为开发人员在命令行状态下与程序交互提供了一种手段。
main()
方法的返回值必须为空,并且必须有public
和static
来修饰。
以下签名也均为正确:
public static final void main(String[]args)
static public void main(String[]args)
static public synchronized void main(String[]args)
为什么不能用 abstract来修饰呢?
abstract
修饰的抽象类需要子类来实例化
二. Java程序初始化的顺序
怎么来看Java中那一部分代码先执行呢?既然main()
是程序的入口,它一定会是先执行吗?
Java程序初始化的顺序:
- 有继承关系,父类是爸爸;先执行父类,再执行子类
- 静态代码块最先执行(只在类加载时执行一次,先父后子,与代码在类种位置无关)
- 构造方法(先父后子)
- 非静态内容(先父后子,按顺序执行,与代码在类种位置有关)
看例子:
class B extends Object {
static {
System.out.println("Load B1");
}
public B() {
System.out.println("Creat B");
}
static {
System.out.println("Load B2");
}
}
class A extends B {
static {
System.out.println("Load A");
}
public A() {
System.out.println("Creat A");
}
}
public class Dad {
public static void main(String[] args) {
new A();
}
}
执行结果:
- Load B1
- Load B2
- Load A
- Creat B
- Creat A