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.class
和DefClass.class
),如果我们运行Test.java,我们就无法运行它,因为它找不到任何名为Test的主类。 相反,如果我们做java Sum
或java 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点。
-
没有两个主要方法参数应该是相同的
例如。
-
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)
-
-
Java的实际main方法是带有
(String[] args)
,所以Actual执行从public static void main(String [] args)开始,所以带有(String[] args)
的main方法必须在类中,除非是它不是儿童class。 -
为了执行其他主要方法,您需要从
(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); } }