main函数重载

    记得n久以前参加过IBM的一次Java笔试,里面有一道选择题,大概是给了一段代码,代码中有两个main函数,然后问这段代码执行后的结果。这道题虽然看似简单,但是当时却意外的难住了很多Java牛人,或者说不是难住,只是每个人都很肯定的说出答案,但却各不相同……Pity,答案却只有一种。这其实怪不得他们,有多少牛人能犯这种低级错误呢?即便是我这种菜鸟,也从来没冒天下之大不韪的甩出过两个"main"在class里啊。不过IBM就是IBM,注重细节到了变态的地步。我现在已经记不清那两个main函数到底是怎样一种写法,更不用说正确答案。所以今天打算实地把各种双main函数的情况都试验一下,弥补下当时心中的那块空白。

PS:测试用Java版本是1.5。为了正确的反应实验结果,我没有使用任何IDE,只通过Windows的command运行Java程序。

 

1、完全相同,access identifer 不同, 返回值不同

 

public class MainTest {
  
   public static void main(String[] args) {
       System.out.println("main1 starts.");
   }
   
   public static void main(String[] args) {
       System.out.println("main2 starts");
   }

}

 

   编译错误:MainTest.java:7: main(java.lang.String[]) is already defined in MainTest

   注意:错误发生在第二个main函数运行时(看到这里想起来,这也是那道题的一个考察点,就是错误抛出的位置)。

 

2、参数不同

public class MainTest {
  
   public static void main(String[] args) {
       System.out.println("main1 starts.");
   }
   
   public static void main(Integer[] args) {
       System.out.println("main2 starts");
   }

}

 

   编译通过。

   运行结果:main1 starts.

 

3、参数不同且没有String[] 参数型main方法

public class MainTest {
  
   public static void main(Boolean[] args) {
       System.out.println("main1 starts.");
   }
   
   public static void main(Integer[] args) {
       System.out.println("main2 starts");
   }

}

 

   编译通过。

   运行错误:Exception in thread "main" java.lang.NoSuchMethodError: main

   结论:虚拟机只运行"public static void main(String[] args)"形式的main函数,且只可有一个此种形式的main函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值