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

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

public static void main(String[] args) 

第二个可以

 public static void main(StringSecond[] args) 

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

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

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

 public static void main(String[] args) 

只有单个String[] (或) String... main方法,因为param将被视为程序的入口点。

在这里你可以看到在单个文件中有2个public static void main (String args[]) ,名称为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); } } 

当我们编译代码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方法。 上面的代码中提供了类似的示例,但默认情况下,控制流将从我们使用java classname调用的类文件的public static void main (String args[]) 。 要使用其他参数集调用main方法,我们必须从其他类中显式调用它。

单个程序中可以有多个主要方法。 其他是重载方法。 这个重载方法在单个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); } } 

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

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

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

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

在Java中, 每个类只能有一个 public static void main(String[] args) 。 这意味着, 如果你的程序有多个类,每个类都可以有 public static void main(String[] args) 。 有关详细信息,请参阅JLS

主要方法的签名必须是

 public static void main(String[] args) 
  • 参数的名称可以是任何有效名称
  • 静态和公共关键字的位置可以互换
  • String数组也可以使用varargs语法

类可以使用名称main定义多个方法。 这些方法的签名与main方法的签名不匹配。 具有不同签名的这些其他方法不被认为是“主要”方法。

是的,可以在同一个程序中有两个main()。 例如,如果我有一个类Demo1如下。 编译此文件将生成Demo1.class文件。 一旦你运行它,它将默认运行具有String参数数组的main()。 它甚至不会使用int参数嗅探main()。

 class Demo1 { static int a, b; public static void main(int args) { System.out.println("Using Demo1 class Main with int arg"); a =30; b =40; System.out.println("Product is: "+a*b); } public static void main(String[] args) { System.out.println("Using Demo1 class Main with string arg"); a =10; b =20; System.out.println("Product is: "+a*b); } } Output: Using Demo1 class Main with string arg Product is: 200 

但是如果我添加另一个名为Anonym的类并将该文件保存为Anonym.java。 在这里我调用Demo1类main()[int参数或字符串参数一]。 编译完成后,会生成Anonym.class文件。

 class Demo1 { static int a, b; public static void main(int args) { System.out.println("Using Demo1 class Main with int arg"); a =30; b =40; System.out.println("Product is: "+a*b); } public static void main(String[] args) { System.out.println("Using Demo1 class Main with string arg"); a =10; b =20; System.out.println("Product is: "+a*b); } } class Anonym{ public static void main(String arg[]) { Demo1.main(1); Demo1.main(null); } } Output: Using Demo1 class Main with int arg Product is: 1200 Using Demo1 class Main with string arg Product is: 200 

是的,您可以拥有任意数量的主要方法。 您可以使用main(String [])具有不同签名的主方法(称为重载),JVM将忽略这些主要方法。

 public class TwoMain { public static void main(String args1[]) { System.out.println("First main"); } public static void main(String args2[]) { System.out.println("Second main"); } 

}

答案是不; 只有一个“主”方法 – 其中“主”意味着你可以“运行”的入口点。

您可以像在示例中那样对重载版本进行编码,但它们无法“运行”。

单个程序中可以有多个主要方法。 但是JVM总是会调用String []参数main()方法。 其他方法将充当重载方法。 我们必须明确调用这些重载方法。

在同一范围内两个main(String [] args)方法的可能性会给JVM带来混淆。 它无法将它们用作重载方法。 因此,参数方面的签名必须是不同的。

文件“ Locomotive.java ”中的以下代码将成功编译并运行,并显示执行结果

 2 

如上面的post所述, 重载规则仍适用于main方法。 但是, 入口点是着名的psvm (public static void main(String [] args))

 public class Locomotive { Locomotive() { main("hi");} public static void main(String[] args) { System.out.print("2 "); } public static void main(String args) { System.out.print("3 " + args); } } 

是! Java中的任何类都可以有多个主要方法。 它被称为重载 (重载方法是具有相同名称但具有不同签名的方法)但是应该只有一个带有如下参数的主方法: – (String [] args)或(String args [])

例如:-public class E {

 public static void main(String args){ System.out.println("Print A"); } public static void main(String [] args){ System.out.println("Print B"); } public static void main(int garbage){ System.out.println("Print C"); } public static void main(int i){ System.out.println("Print D") } 

}

上述程序的输出将是“Print B”,因为只有主方法包含由Javac编译器识别的正确方法签名,并且它仅编译并离开其余部分。

答案是肯定的,但你应该考虑以下3点。

  1. 没有两个主要方法参数应该是相同的

    例如。

    • public static void main(int i)
    • public static void main(int i, int j)
    • public static void main(double j)
    • public static void main(String[] args)
  2. Java的实际main方法是带有(String[] args) ,所以Actual执行从public static void main(String [] args)开始,所以带有(String[] args)的main方法必须在类中,除非是它不是儿童class。

  3. 为了执行其他主要方法,您需要从(String[] args) main方法中调用它们。

以下是有关此内容的详细video: https : //www.youtube.com/watch?v = Qlhslsluhg4&feature = youtu.be

我已经检查了java版本1.6.0_32多个主要方法正在工作但是应该有一个主要方法,如public static void main(String [] args)类型签名。 Ex在这里我测试过。

 public class mainoverload { public static void main(String a) { System.out.println("\nIts "+a); } public static void main(String args[]) { System.out.println("\nIts public static void main\n"); mainoverload.main("Ankit"); mainoverload.main(15,23); mainoverload.main(15); } public static void main(int a) { System.out.println("\nIts "+a); } public static void main(int a,int b) { System.out.println("\nIts "+a+" "+b); } }