一、简单介绍
在我们的Java程序中都会出现一个名称为main的方法,我们发现没有这个方法我们的程序就无法运行。
其实任何一个Java程序的运行入口都是这个main方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同:方法名称必须为main,且必须由 public static void 修饰以及入参必须是一个String类型的数组。
public class Test{public static void main(String[] args){System.out.println("我是任何一个Java程序的入口方法");}
}
二、详细分析
(1)main()方法为何必须被声明为public static void?
①必须由public修饰的原因是:main方法是要被JVM加载的,所以需要最高的访问权限。
②必须由static修饰的原因是:首先我们知道在java中调用一个方法,要么是通过实例对象调用,要么是直接通过类名调用。而JVM在调用我们的main方法是需要直接通过类名调用的,不会生成一个实例对象来调用,所以必须由static修饰。
③必须由void修饰的原因是:main方法执行完毕时,并不需要有相关返回值返回,所以void修饰即可。
(2)为什么方法名称必须为main,以及入参必须为String类型的数组?
这其实是java的规定,大家直接记住就好。不过虽然入参类型固定,但入参名称我们可以自定义。
(3)注意事项
由于我们的main方法被static修饰,所以它其实也是一个静态方法,所以在main方法中我们可以直接调用本类的静态方法和静态属性,但不能直接调用本类中的非静态方法或非静态属性,必须创建该类的一个实例对象后,才能通过这个对象去调用本类中的非静态成员。
三、main方法可不可以被重载、继承、重写、以及被其他方法调用?
(1)main()被重载测试:
(2)main()被继承与重写测试:
我们使用Student2类继承了Student类,Student2类里我们没有写main()方法却发现出现了小红三角,可以运行,而且运行结果也说明了子类继承了父类中的main()方法。那么既然可以继承,那么可不可以重写main()呢?当然是不可以的啦,因为被static修饰的方法可以被继承但不允许被重写,即使你发现子类中可以出现一个和父类静态方法具有相同的返回值类型、方法名称、参数列表等的静态方法,那么这其实只是对父类对应的方法进行了隐藏,而不是我们所谓的方法重写。总之记住一句话,静态方法可以被继承但不可以被重写。只有普通方法才可以在继承之后被重写。
(3)main()被调用测试:
根据运行结果我们可以知道main方法可以被其他方法调用。
四、总结
main方法可以被重载、被继承、被其他方法调用,但不可以被重写。
也就是说,main方法除了作为程序入口,被虚拟机调用之外,其他的方面和一个普通的静态方法是一致的。