2011-02-16 42 views
2

以下代码在运行时仅打印单词“hi”。我们可以重载Java中的main()方法吗?

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()方法?

+1

这与C有什么关系? – EboMike 2011-02-16 21:12:37

+1

你真的想解决什么问题? – birryree 2011-02-16 21:14:25

回答

19

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

7

你所要做的是超载main方法,没有把它的多态性。不,你不能这样做(或者确切地说:你可以重载,只是JVM不会调用重载版本)。 JVM正在寻找具有特定签名的main方法,即采取String[]参数。

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

1

代码是正确的,你重载了主要方法。但是,正如彼得所说,应用程序的主线程会一直在方法与签名

public static void main(String[] args) 

,没有别的开始。为了启动应用程序,JVM将忽略所有其他main方法。要执行的内容,你必须调用它在你的代码,就像这样:

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

(应打印“这就是我”到控制台)

0

可以重载Java中的一个主要方法;然而,让类加载器从重载的主方法开始将是一个相当大的技巧。

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

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

由于这是一个静态方法之一,和Java做没有继承静态方法的概念,您无法重载此方法。由于Java没有静态方法的继承的概念,因此对类的静态位进行子分类是一种无意义的想法。

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

Java运行时环境只会寻找精确匹配public static void main(String[]),其被定义为入口点为独立的Java应用程序。

为了模拟,你希望你有其他主自己打电话的行为:

/** 
* 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"); 
    } 
} 

正如其他人指出,有被称为在* 装载 *,而不是几个方法具有相同的名称但不同的参数多态性(超过* 写作 *)。

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(){}

这必须是在同一类的其他主方法使其过载 静态关键字意味着类通​​用.....(不需要使用对象从main(String[] args)方法访问该方法)

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

我希望这会有所帮助。

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

} 

输出:

内主入口

我们可以有任意数量的主要方法,并能被超载,但应用程序的主线程将始终从具有签名的方法开始:

 public static void main(String[] args) 

没有别的。

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

相关问题