Java程序中是否存在两种主要方法?

joe*_*han 29 java methods program-entry-point arguments

Java程序中是否存在两种主要方法?只有他们的论点不同,如:

public static void main(String[] args)
Run Code Online (Sandbox Code Playgroud)

第二个可以

public static void main(StringSecond[] args)
Run Code Online (Sandbox Code Playgroud)

如果可能,哪个方法将用作入口点?怎么识别这个?请帮忙.

kos*_*osa 26

只要方法参数(数字(或)类型)不同,是的,它们就可以.它被称为重载.

重载方法由传递给方法的参数的数量和类型区分

public static void main(String[] args)
Run Code Online (Sandbox Code Playgroud)

只有使用单个String[](或)String...作为param的main方法才会被视为程序的入口点.

  • 我认为Swarish的答案更好更完整. (3认同)

小智 25

在这里,您可以看到public static void main (String args[])单个文件中有2 个名称Test.java(特别是没有使用文件名作为2个类名称之一),2个类具有默认访问说明符.

class Sum {

    int add(int a, int b) {
        return (a+b);   
    }

    public static void main (String args[]) {
        System.out.println(" using Sum class");
        Sum a = new Sum();
        System.out.println("Sum is :" + a.add(5, 10));
    }

    public static void main (int i) {
        System.out.println(" Using Sum class main function with integer argument");
        Sum a = new Sum();
        System.out.println("Sum is :" + a.add(20, 10));
    }
}

class DefClass {

    public static void main (String args[]) {
        System.out.println(" using DefClass");
        Sum a = new Sum();
        System.out.println("Sum is :" + a.add(5, 10));
        Sum.main(null);
        Sum.main(1);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我们编译代码Test.java时,它将生成2个.class文件(即Sum.classDefClass.class),如果我们运行Test.java,我们就无法运行它,因为它找不到任何名为Test的主类.相反,如果我们这样做java Sumjava DefClass两者都会使用不同的输出main().要使用Sum类的main方法,我们可以使用类名Sum.main(null)Sum.main(1)//Passing integer value in the DefClass main().

在类范围中,public static void main (String args[])每个类只能有一个,因为类的静态方法属于类而不属于其对象,并且使用其类名调用.即使我们创建多个对象并使用它们调用相同的静态方法,那么这些调用将引用的静态方法的实例也是相同的.

我们也可以通过在main中传递不同的参数集来重载main方法.上面的代码中提供了类似的示例,但默认情况下,控制流将从public static void main (String args[])我们使用的类文件开始java classname.要使用其他参数集调用main方法,我们必须从其他类中显式调用它.


小智 7

单个程序中可以有多个主要方法.其他是重载方法.这个重载方法在单个main方法下工作正常

public class MainMultiple{

   public static void main(String args[]){
       main(122);
       main('f');
       main("hello java");
   }

   public static void main(int i){
       System.out.println("Overloaded main()"+i);
   }

   public static void main(char i){
       System.out.println("Overloaded main()"+i);
   }

   public static void main(String str){
       System.out.println("Overloaded main()"+str);
   }
}
Run Code Online (Sandbox Code Playgroud)


das*_*hrb 5

public static void main(String[] args)算。这是唯一被认为是真正 main() 的签名(我的意思是作为程序入口点)。


ast*_*eri 5

那将是可编译的代码,只要StringSecond是一个类.但是,如果通过"主要方法"表示进入该计划的第二个入口点,那么您的问题的答案仍然是否定的.只有第一个选项(public static void main(String[] args))可以作为程序的入口点.

但请注意,如果您要将第二个main(String[])方法放在不同的类中(但在同一个项目中),您可以在项目中有多个可能的入口点,然后您可以从中选择.但这不能与覆盖或超载的原则相冲突.

另请注意,此领域中的一个混淆源,特别是对于介绍性程序员而言,是public static void main(String[] args)并且public static void main(String ... args)都被用作入口点并被视为具有相同的方法签名.