1、问题:Java main方法为什么是 public static void main(String[] args)???
序号 | 场景 | 编译 | 运行 | 解释 |
1 | public修改为private protected或者去掉 | 正常 | Main Method not public | 只有当main方法在公有级别上时才对JVM可见,所以需要使用public修饰 |
2 | 去掉static | Exception in thread "main" java.lang.NoSuchMethodError:main | 如果要使main方法作为程序入口,不必要先去创建该类实例而是直接调用,所以该方法需要用static修饰 | |
3 | 修改返回值类型 | JVM对Java程序已经是最底层,由它调用的方法返回值没有任何地方可去,因此main方法不需要返回值,所以使用void修饰 | ||
4 | 修改参数类型或添加多个参数 | main方法需要接收命令行传入的参数(参数之间使用空格分隔),java规范使用字符串数组作为main方法的唯一入参,参数名可以不是args,如果不穿参数,该数组是empty而不是null | ||
5 | 修改方法名 | 含有main方法的类是Java应用程序,JVM只识别main作为程序入口,所以只能使用main作为方法名 | ||
6 | 添加throw Exception | 正常 | main方法可以抛出异常 | |
7 | public与static互换位置 | 正常 |
2、问题:main方法作为程序的入口
1 public class Main 2 { 3 static 4 { 5 System.out.println("123"); 6 System.exit(0); 7 } 8 9 public static void main(String[] args) 10 { 11 System.out.println("456"); 12 } 13 }
运行结果:123
JVM在执行时,首先加载类,然后执行内部的静态块,然后再去调用main方法。
上例中的静态块打印"123"之后 被强制退出程序,就没机会执行main方法了。