我们可以重载Java中的main()方法吗?

时间:2011-02-16 21:11:24

标签: java overloading

以下代码在运行时只打印“hi”一词。

import java.util.*;
import java.io.*;

class poly
{
    public static void main(String c)
    {
        System.out.println("enter a char");
        InputStreamReader ir=new InputStreamReader(System.in);
        BufferedReader br =new BufferedReader(ir);
        //char l= br.readLine();
        System.out.println("this is "+c);
    }

    public static void main(String args[]) throws Exception
    {
        System.out.println("hi");
    }
}

有没有办法重载main()方法?

8 个答案:

答案 0 :(得分:19)

您的程序只能从一个位置开始,所以这没有任何意义。此外,polymorphism是一个完全不同的概念;那叫做 overloading 不是多态。

答案 1 :(得分:7)

你要做的是重载 main方法,而不是让它变成多态。不,你不能这样做(或者说准确:你可以过载,只是JVM不会调用重载版本)。 JVM正在寻找具有特定签名的main方法,即采用String[]参数。

如果您告诉我们更多关于您要解决的实际问题,我们可以提供其他解决方案。

答案 2 :(得分:1)

代码是正确的,你已经重载了main方法。但是,正如彼得所提到的,应用程序的主线程总是从带有签名

的方法开始
 public static void main(String[] args)

,没有别的。对于启动应用程序,JVM将忽略所有其他main方法。要执行内容,您必须在代码中调用它,如下所示:

 public static void main(String args[]) {
    main("me");
 }

(应该在控制台上打印“这是我”)

答案 3 :(得分:1)

简而言之,您可以重载主函数,如:

class A
{

    public static void main(String s) {
        System.out.println(s);
    }

    public static void main(int s) {
        System.out.println(s);
    }

    public static void main(String args[])
    {
        System.out.println("inside main entry");
        main("me");
    }

}

输出:

在主条目

我们可以有任意数量的main方法,并且可以重载但是应用程序的主线程总是从带有签名的方法开始:

       public static void main(String[] args)

,别无其他。

在Java中,args包含提供的命令行参数作为String对象的数组。

答案 4 :(得分:0)

您可以在Java中重载main方法;然而,让类加载器从重载的main方法开始将是一个很大的伎俩。

检查传递java可执行文件的类,读取静态方法,并将控制传递给看起来像

的那个
public static void main(String[] args) { ... }

由于这是一个静态方法,而Java没有继承静态方法的概念,因此无法重载此方法。由于Java没有静态方法的继承概念,因此对类的静态位进行子类化是一种荒谬的想法。

答案 5 :(得分:0)

也许你想要这样的东西?

import java.util.*;
import java.io.*;

class poly {

   public static void main(String c)
   {
      System.out.println("enter a char");
      InputStreamReader ir=new InputStreamReader(System.in);
      BufferedReader br =new BufferedReader(ir);
      //char l= br.readLine();
      System.out.println("this is "+c);

   }
   public static void main(String args[])throws Exception
   {
       if (args.length == 1) {
          poly.main(args[0]);
       }
       else {
          System.out.println("hi");
       }
   }
}

答案 6 :(得分:0)

java运行时环境仅查找与public static void main(String[])的完全匹配,/** * Your method called main, ignored by the java runtime since * it does not match the signature. Called by the valid main(String[]) **/ public static void main(String c) { System.out.println("enter a char"); InputStreamReader ir=new InputStreamReader(System.in); BufferedReader br =new BufferedReader(ir); //char l= br.readLine(); System.out.println("this is "+c); } /** * Starting point of your program, called by the java runtime. */ public static void main(String args[])throws Exception { if(args.length >= 1){ main(args[0]); }else{ System.out.println("hi"); } } 被定义为独立Java应用程序的入口点。

要模拟您想要的行为,您必须自己调用另一个主要内容:

{{1}}

正如其他人指出,有几个方法具有相同的名称但不同的参数被调用* loading *而不是多态(超过* *)。

答案 7 :(得分:0)

我不太确定你在问什么但是我没有看到任何你无法超载主要方法的原因。 我认为你指的主要方法是

public static void main(String c)
{
    System.out.println("enter a char");
    InputStreamReader ir=new InputStreamReader(System.in);
    BufferedReader br =new BufferedReader(ir);
    //char l= br.readLine();
    System.out.println("this is "+c);
}

要重载此方法,我将创建一个方法,例如

public static void main(){}

这必须与其他主要方法在同一个类中才能使其重载。 static关键字对于类来说是通用的.....(不需要使用对象来从main(String[] args)方法访问该方法。

在我的ind中,在类中创建重载方法与创建不同方法相同。 不同的参数,参数列表====>不同的签名======>不同的方法。

我希望这会有所帮助。