java为什么需要public static void main(String[] args)这个方法

今天在想一个问题,和java打交道这么多年了,可是还是对java了解的太少,感觉java涉及的知识面太广了,关键是还一直在更新,更新速度也是非常快,这也间接证明了java是一个活跃的语言。好了,废话说多了不好,今天我们就来讲讲java中的一个方法,和java打交道的老哥也许知道,我们最常用的方法就是main()方法了,那么我们今天就来详细说说这个方法,public static void main(String[] args)为java程序的入口方法,首先,jvm在运行程序时,会首先查找main()方法,其中public是权限修饰符,表明任何类或对象都可以访问这个方法,static表明main()方法是一个静态方法,既方法中的代码是存储在静态存储区的,只要类被加载后就可以使用该方法而不需要通过实例化对象来访问,可以直接通过类名.main()直接访问,jvm在启动时就是按照上述方法的签名(必须有public 与 static修饰,返回值为void,且方法的参数为字符串数组)来查找方法的入口地址,若能找到,就执行,找不到,则会报错,void表明方法没有返回值,main是jvm识别的特殊方法名,是程序的入口方法,字符串数组参数args为开发人员在命令行状态下与程序交互提供了一种手段。

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

我们在来想想,main方法是否还有其他定义的格式了:当然有

  由于public与static没有先后顺序关系,下面的定义也是合理的

public class DemoTest {
    static public void main(String[] args) {
        System.out.println("没毛病,老铁");
          }
  }
//输出结果
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
没毛病,老铁

  也可以把main()方法定义为final

public class DemoTest {
     public static final void main(String[] args) {
        System.out.println("没毛病,老铁");
          }
  }

//输出
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
没毛病,老铁

也可以用sychronized来修饰main()方法

public class DemoTest {
      static public synchronized void main(String[] args) {
        System.out.println("没毛病,老铁");
          }
  }
//来打印输出
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
没毛病,老铁

  不管哪种定义方式,都必须满足main()方法的返回值为void,并有static与public关键字修饰,同时由于main()方法为程序的入口方法,因此不能用abstract关键字来修饰。

面试官经常问的一个面试题

同一个.java文件中是否可以有多个main()方法

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

发布了41 篇原创文章 · 获赞 8 · 访问量 1296

猜你喜欢

转载自blog.csdn.net/sdgames/article/details/104906320