可以存在于Java程序主要有两种方法?(Can there exist two main metho

2019-07-03 20:53发布

可以存在于Java程序主要有两种方法? 只有在他们的论点一样的区别:

public static void main(String[] args)

和第二可

public static void main(StringSecond[] args)

如果可能的话,该方法将被用作入口点? 如何识别呢? 请帮忙。

Answer 1:

只要方法参数(号码(或)类型)是不同的,是他们可以。 这就是所谓的超载 。

重载方法是由数字和的参数传递到方法的类型区分

public static void main(String[] args)

仅与单个主方法String[]或) String...作为PARAM将被认为是入口点的程序。



Answer 2:

在这里,你可以看到有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我们不能运行它,因为它不会找到名为测试任何主类。 相反,如果我们做java Sumjava DefClass两者都将使用不同给予不同的输出main() 使用萨姆类的主要方法,我们可以使用类名Sum.main(null)Sum.main(1)//Passing integer value in the DefClass main()

在一类范围内,我们只能有一个public static void main (String args[])每类,因为一类的一个静态方法属于一类,而不是它的目的和使用它的类名称被调用。 即使我们创建多个对象,并使用它们然后这些电话将参照将是相同的静态方法的实例调用相同的静态方法。

我们还可以通过传递不同的参数集主做的主要方法超载。 的类似的例子是在上面的代码中提供,但默认的控制流程将与开始public static void main (String args[])我们已经使用调用的类文件的java classname 。 要调用与另一组的,我们必须从其他类显式调用参数的主要方法。



Answer 3:

可以有一个单一的节目多于一个的主要方法。 其他人则重载方法。 此重载方法下一个主要方法工作正常

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);
   }
}


Answer 4:

这将是编译代码,只要StringSecond是一类。 但是,如果“主要方法”你的意思是第二个入口点计划,然后回答你的问题仍然没有。 只有第一个选项( public static void main(String[] args)可以是入口点到你的程序。

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

另外请注意,在这方面的困惑,特别是对于入门的程序员的一个来源,就是public static void main(String[] args)public static void main(String ... args)都被用作入口点和被视为具有相同方法签名。



Answer 5:

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



Answer 6:

在Java中,你可以只有一个 public static void main(String[] args) 每类 。 这意味着, 如果你的程序有多个类,每类都可以有 public static void main(String[] args) 见JLS了解详情。



Answer 7:

主要方法的签名必须是

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

一个类可以定义一个名为主多种方法。 这些方法的签名不匹配的主要方法的签名。 这些带有不同签名的其他方法不被视为“主”的方法。



Answer 8:

是的,它可能有两个主要的()在同一个程序。 举例来说,如果我有一个类demo1的下面。 编译该文件将生成Demo1.class文件。 一旦你运行这个默认情况下将运行的字符串参数中的main(),其具有阵列。 它甚至不会小看在main()与int参数。

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.java。 这里面我所说的demo1的类主()[或者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


Answer 9:

是的,你可以为你喜欢有尽可能多的主要方法。 你可以从不同的签名主要方法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");
    }
}


Answer 10:

答案是不; 只有有一个能“主”的方法 - 在“主”是指一个入口点,你可以在“运行”。

您可以编写重载版本在你的榜样,但他们也不能“跑”。



Answer 11:

可以有一个单一的节目多于一个的主要方法。 但JVM将总是调用的String []参数的main()方法。 其他方法的将作为一个重载方法。 我们有这些重载方法的显式调用。



Answer 12:

的两个主要(字串[] args)相同的范围内的方法的可能性创造了JVM混乱。 它没有使用它们作为重载方法。 所以在参数方面的签名),必须是不同的。



Answer 13:

下面的代码文件“Locomotive.java”编译和成功运行,与执行结果,显示

2<SPACE>

正如上文帖子中提到, 超载规则仍然为主要方法的工作。 然而, 进入点在著名的PSVM(公共静态无效的主要(字串[] 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);
    }
}


Answer 14:

是! 在Java中的任何类可以有多个主要方法。 这就是所谓的过载 (重载方法的名称相同,但不同的签名的方法),但应该只有一个主要的方法,像这样的参数: - (字串[] args)或(字符串ARGS [])

例如:-public类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")
}

}

上述程序的输出将是“打印B”作为只有main方法包含由javac编译器识别的正确方法签名,它只有编译和离开休息。



Answer 15:

答案是肯定的,但你应该考虑以下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的实际主要方法是一个与(String[] args)所以实际执行公共静态无效的主要(字串[] args)开始,所以用的主要方法(String[] args)是必须的一类,除非如果它不是一个子类。

  3. 为了让其他的主要的方法来执行,你需要从内部调用它们(String[] args)的主要方法。

这里是差不多的详细视频: https://www.youtube.com/watch?v=Qlhslsluhg4&feature=youtu.be



Answer 16:

我在Java版本已经检查1.6.0_32多个主要方法是工作,但应该有类型签名的一个主要方法,例如公共静态无效的主要(字串[] 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);
}
}    


文章来源: Can there exist two main methods in a Java program?