public static void main(String[] args){} 关于Java main()方法

时间:2023-03-08 18:32:37
public static void main(String[] args){}    关于Java main()方法

  是Java程序的入口方法,JVM在运行程序时,会首先查找main()方法。

  public是权限修饰符,表明任何类或对象都可以访问这个方法;

  static表明main()方法是一个静态方法,即方法中的代码时存储在静态区的,只要类被加载后,就可以使用该方法而不需要通过实例化对象来访问,可以直接通过 类名.main() 直接访问;

  void表明方法没有返回值;

  main是JVM识别的特殊分方法名,是程序的入口方法;

  方法的参数为字符串数组,字符串数组参数args为开发人员在命令行状态下与程序交互提供了一种手段;

  JVM在启动时就是按照上述方法的签名(必须有public、static修饰,返回值为void,且方法的参数为字符串数组)来查找方法的入口地址,若找到就执行,找不到就会报错。

  因为main是程序的入口方法,所以当程序运行时,第一个执行的方法就是main()方法。

  通常来讲,要执行一个类的方法,先必须实例化一个类的对象,然后通过对象来调用这个方法。 但由于main是程序的入口方法,此时还没有实例化对象,因此在编写main()方法时就要求不需要实例化对象就可以调用这个方法,鉴于此,main()方法需要被定义成public与static

  一个.java文件不能出现两个以上的public类或接口

    如果一个java源文件里定义了一个public修饰的类,则这个源文件的文件名必须与public修饰的类名相同。

    如果一个java源文件里定义的所有类都没有使用public修饰,则这个文件的文件名任意。

  main方法是否还有其它可用的定义格式?

    1)由于public与static没有先后顺序:static public void main(String[] args)

    2)也可以把main方法定义成final: public static final void main(String[] args)

    3)也可以用synchronized来修饰mian方法:static public Synchronized void mian(String[] args)

    不管哪种定义格式,都必须保证main方法的返回值为void,并由static与public修饰。

    由于main方法为程序的入口方法,因此不能用abstract修饰。

  同一个Java文件是否可以有多个main()方法?

    可以,虽然每个类都可以定义main方法,但是只有与文件名相同的用public修饰的类中的main方法才能作为整个程序的入口方法。

  例:创建一个Test.java 源文件

  class T{

      public static void mian(String[] args){

      System.out.println(“T main”);

    }

  }

  public class Test{

      public static void main(String[] args){  //程序入口函数

      System.out.println(“Test mian”);

    }

  }

  结果: Test main

1.不用main方法如何定义一个类?

  不行,没有main方法我们不能运行Java类。

  在Java 7之前,你可以通过使用静态初始化运行Java类。但是,从Java 7开始就行不通了。

2.main方法需要的参数不是字符串数组

  不是的,main方法的参数必须是字符串数组

  但是,在引进变参时,你可以将字符串类型的变参作为参数传递给main方法。变参一定得是数组。

package com.instanceofjava;publicclassMainMethod {publicstaticvoidmain(String args) { } }

3.我们能不能改变main方法的返回类型?

  不能,main方法的返回类型只能是空。任何其它类型都是不能接受的。

  package com.instanceofjava;publicclassA {publicstaticintmain(String args) {return1;//run time error : No main method found} }

4.main方法为什么必须是静态的?

  main方法一定是静态的。

  如果main允许是非静态的,那么在调用main方法时,JVM就得实例化它的类。

  在实例化时,还得调用类的构造函数。如果这个类的构造函数有参数,那么届时就会出现歧义。

  例如,在下面的程序中,在实例化类“A”的时候,JVM传递什么参数?

  package com.instanceofjava;publicclassA {publicMainMethod(inti) {//Constructor taking one argument}publicvoidmain(String args) {//main method as non-static}

5.我们能不能声明main方法为非静态?

  不能,main方法必须声明为静态的,这样JVM才可以调用main方法而无需实例化它的类。

  如果从main方法去掉“static”这个声明,虽然编译依然可以成功,但在运行时会导致程序失败。

package com.instanceofjava;publicclassA {publicvoidmain(String args) { System.out.println("indhu");//Run time error} }

6.我们能否重载main方法?

  可以,我们可以重载main方法。一个Java类可以有任意数量的main方法。

  为了运行java类,类的main方法应该有例如“public static void main(String args)”的声明。如果你对此声明做任何修改,编译也是可以成功的。但是,运行不了Java程序。你会得到运行时错误,因为找不到main方法。

  package com.instanceofjava;publicclassA {publicstaticvoidmain(String args) { System.out.println("Indhu"); }voidmain(intargs) { System.out.println("Sindhu"); }longmain(inti,longd) { System.out.println("Saidesh");returnd; } }

7.我们能否声明main方法为private或protected,或者不用访问修饰符?

  不能,main方法必须public。你不能定义main方法为private和protected,也不能不用访问修饰符。

  这是为了能让JVM访问main方法。如果你不定义main方法为public,虽然编译也会成功,但你会得到运行时错误,因为找不到main方法。

package com.instanceofjava;publicclassA {privatestaticvoidmain(String args) {//Run time error} }

8.我们能否在Java中覆盖main方法?

  不能,你不能在Java中覆盖main方法。这是因为main方法是静态方法,而在Java中静态方法在编译时会结合在一起,所以你在Java中不能覆盖静态方法。

9.我们能否在Java中终结main方法?

  你可以在Java中终结main方法。JVM对此没问题。

10.我们能否在Java中同步main方法?

  是的,main方法可以在Java中同步,synchronized修饰符允许用于main方法的声明中,这样就可以在Java中同步main方法了。