`
DBear
  • 浏览: 229065 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类

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函数。

分享到:
评论

相关推荐

    重载函数\重载函数.cpp

    void main() { int fab(int x); float fab(float x); double fab(double x); int ifab; float ffab; double dfab; cout; cin>>ifab; cout的绝对值为"(ifab); cout; cout;

    C++函数重载详解及实例代码

    C++函数的重载 定义 在同一个作用域中,函数名相同,函数的参数列表不同的函数之间构成重载关系,在不同作用域中的同名函数遵循标识符隐藏的原则 ATTENTION:重载与函数的返回值类型无关,因为声明一个函数不需要...

    入口函数( main、WinMain)

    入口函数( main、WinMain) 在C/C++中,我们知道有一个如下格式的函数: int main(int argc, _TCHAR* argv[]) { return 0; } 该函数是C/C++中的入口函数,而在WindowsAPI中也有自己的入口函数,该函数的格式...

    C++ 课程作业 多态性 运算符重载-成员函数(复数类)

    **【问题描述】** 请定义一个复数类,将+/-运算符重载为成员函数,实现复数与复数的加减及复数与浮点数的加减。 请根据给定的main函数,设计Complex类。

    xiaozhengyu#StudyNotes#静态类型与函数重载1

    public static void main(String[] args) {// 静态类型:编译期可知// 实际类型:运行期可知// 实际类型变化// 静态

    运算符重载

    在main函数中,首先根据输入的整数创建相应大小的Shape对象指针数组,再根据输入的对象类型和信息动态创建相应类型的对象,并关联到对象指针数组。输入的信息格式如下: 3 // 对象指针数组的元素个数 R 23 17 // ...

    C++ 课程作业 多态性 运算符重载-综合(Point类)

    **【问题描述】** 请定义一个Point类,将前置++和后置++运算符重载为成员函数,实现成员变量m_x和m_y的加一操作 同时重载流插入运算符,实现对Point类对象的格式化输出。...请根据给定的main函数,设计Point类。

    重载与覆写/重写的区别

     无法以返回值类型作为重载函数的区分标准。 复制代码 /** * 1. 方法重载只可以通过方法名和方法参数来区别,即“方法签名” * @return * @throws NumberFormatException */ public int getSides...

    C++ 类的深拷贝

    (1)实现构造函数重载,可以根据指定的元素个数动态创建初始值为0的整型数组,或根据指定的内置整型数组动态创建整型数组。 (2)设计拷贝构造函数和析构函数,注意使用深拷贝。 (3)设计存取指定位置的数组元素...

    C++中构造函数重载

    #include class Test { private: int i; int j; int k; public: Test() { i=j=k=0; } Test(int v) { i=j=k=v; } void print() { printf(i= %d, j=%d, k=%d \n,...int main() { Test t1(1); Test t2=

    吉林大学多项式类的定义以及运算符重载.zip

    对如下多项式编写类定义: +++…+ 其中,n为多项式的次数。完成如下功能: (1)可存储任意大的多项式(提示:可用动态...(6)写main函数测试类的功能。 (7)采用多文件实现。 考虑:哪些成员函数可以声明为const.

    10个Java经典的Main方法面试题!

    1.main 方法是做什么用的? main 方法是 Java 程序的入口方法,JVM 在运行的时候会首先查找 main 方法。 2.不用 main 方法如何运行一个类? 不行,没有 main 方法我们不能运行 ...可以,我们可以重载 main()方法。一

    asd.zip_nationxnd

    1. 编写程序完成如下功能:  ⑴ 编写一个自己的字符串类MyString,它有一个私有的数据成员:指向字符串的指针m_data。编写该类的构造函数、拷贝构造函数和析构函数,... ⑶ 编写main函数,测试该类及被重载的运算符。

    c++拷贝构造函数的调用

    先看代码: #include class B { int data; public: B(int a) : data(a) { std::cout << 111111 << std::endl; } B(const B &b) { data = b.data;...int main() { B t1 = MyPlay(5); sys

    特殊的C++笔试题,非常不错的

    如:由于函数重载,函数名一样,但汇编代号绝对不能一样。 为了区分,编译器会把函数名和参数类型合在一起作为汇编代号,这样就解决了重载问题。具体如何把函数名和参数类型合在一起, 要看编译器的帮助说明了。 ...

    -C++参考大全(第四版) (2010 年度畅销榜

    第14章 函数重载、拷贝构造函数和默认变元 14.1 函数重载 14.2 重载构造函数 14.3 拷贝构造函数 14.4 查找重载函数的地址 14.5 重载的过去与现在 14.6 默认的函数变元 14.7 函数重载和二义性 第15章 运算符重载 ...

    C++程序设计实验6.doc

    在main函数里定义复数对象,测 试重载的这些运算符。 2.进阶部分 (2)设计一个mystring类,包括数据成员char * pstr; 和 int length; 通过运算符重载实现字符串的输入>>、输出、连接+=、赋值=、关系运算(==、!=、>...

    运算符重载的部分代码

    visual basic 2005 技术内部中第六章第七节运算符重载代码。 operator部分: Module Module1 Sub Main() End Sub End Module Public Structure Fraction 'Read-Only fields Private num As Long Private ...

    c++程序设计基础.pptx

    第十一章 C++程序设计基础 c++程序设计基础全文共99页,当前为第1页。 问题的提出 结构化程序设计方法...函数的重载 函数的重载:一个函数可以对应多个函数的实现,可以实现不同的功能 重载函数:具有相同的名称,具

    此项目主要是关于C++学习过程的小demo.rar

    涉及到自定义类的构造函数、重载构造函数、函数默认值、析构函数、复制构造函数、重载运算符(赋值函数、加法函数)、虚函数、常值函数、静态函数、静态变量、常值变量、枚举变量、内部类、访问修饰符、继承、重写虚...

Global site tag (gtag.js) - Google Analytics