记得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函数。
分享到:
相关推荐
### 函数重载的详解和应用 #### 一、引言 函数重载是C++中一项非常重要的特性,它允许我们定义具有相同名称但参数列表不同的多个函数。这一特性极大地提高了代码的复用性和可读性。本文将详细介绍函数重载的概念、...
函数重载是面向对象编程中的一个关键特性,它允许在同一个作用域内使用相同的名字定义多个函数,但这些函数的参数列表必须有所不同。这通常通过改变参数的数量、类型或者参数的顺序来实现。函数重载使得程序员可以为...
### C++函数重载在员工月工资计算中的应用 #### 一、背景介绍与问题描述 本案例旨在通过设计一个菜单程序,运用C++中的函数重载特性来实现不同类型员工月工资的计算。具体而言,根据不同的员工类型(管理人员、...
### 实验六:函数重载与运算符重载 #### 实验目的 1. **掌握函数重载的方法**:理解并能够实现同一名称但参数不同的多个函数,以便根据不同的参数类型或数量调用相应的函数体。 2. **掌握运算符重载的方法**:学会...
在编程中,函数重载(Overload)是面向对象编程的一个重要特性,它允许在同一作用域内声明多个同名函数,但每个函数的参数列表必须不同。这些函数可能有不同的返回类型,但关键在于它们的参数数量或参数类型不相同。...
### 友元函数与函数重载在C++中的应用 #### 概述 在C++编程语言中,类是封装数据和操作数据的方法的一种手段。然而,在某些情况下,可能需要让一个非成员函数访问类的私有或保护成员。这时就需要使用到友元函数的...
### 两个二维数组相加与相减:使用成员函数重载运算符“+”和“-” 在C++中,运算符重载是一种强大的特性,它允许程序员改变内置运算符的行为,使其适用于自定义类型(如类或结构)。本文将详细介绍如何通过成员...
在C++编程语言中,友元(Friend)和函数重载(Function Overloading)是两个重要的概念,它们分别增强了类的封装性和灵活性。本实验旨在通过实际操作让你深入理解这两个特性,并能综合运用到实际编程中。 **一、...
根据给定文件的信息,本文将围绕C++编程语言中的“类”与“函数重载”的概念,以及如何利用这些概念来实现对不同图形面积的计算展开讨论。 ### 一、理解“类”与“函数重载” #### 1. 类 在C++中,“类”是一种...
C++ 函数重载.pdf 本文主要介绍了C和C++函数符号生成规则,以及C++函数重载机制。 一、C函数符号生成规则 在C语言中,函数符号生成规则主要有三种:cdecl调用约定、std call调用约定和fastcall调用约定。 1. ...
在C++编程语言中,函数重载(Function Overloading)是一项非常实用的功能,它允许我们定义多个同名但参数列表不同的函数。这种特性可以提高代码的可读性和复用性。本文将详细介绍如何通过函数重载来解决变量排序的...
【函数重载】是C++面向对象编程中的一个重要特性,允许在同一作用域内定义多个同名函数,但每个函数的参数列表必须不同,这通常通过不同的参数类型、数量或顺序来实现。在实验中,这一特性被用于实现不同类型的变量...
### 函数重载和覆盖的区别 #### 一、引言 在编程领域,函数重载(Overloading)和覆盖(Overriding)是两种常见的多态性实现方式,它们允许程序员在代码中创建更加灵活和复用性强的功能。尽管两者名称相似,但它们...
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++中的另一个重要特性,允许我们为相同名称的函数提供不同的实现,根据传入的参数类型或数量来选择合适的版本。本教程将深入探讨如何结合模板类和函数重载来实现矩阵的加减乘除运算。 首先,我们需要...
在 Java 中,main 函数可以被重载,但是 JVM 只会调用名称为 "main" 的函数,且其参数类型必须是 String[] 或 String...。 在 Java 中,可以使用数组来存储命令行参数,然后在 main 函数中遍历数组来处理每个参数。...
本示例展示了如何使用函数模板来处理不同类型的数据,同时也展示了函数重载的概念——即如何在同一作用域内定义多个同名函数,而这些函数之间通过参数列表的不同来区分。通过这种机制,我们可以编写更加灵活、可复用...
在上述代码中,`operator+`和`operator-`是加减法运算符的成员函数重载。它们接受一个`Complex`类型的参数,并返回一个新的`Complex`对象,代表当前对象与参数对象的和或差。这些成员函数通常被声明为`const`,因为...
C++函数的重载 定义 在同一个作用域中,函数名相同,函数的参数列表不同的函数之间构成重载关系,在不同作用域中的同名函数遵循标识符隐藏的原则 ATTENTION:重载与函数的返回值类型无关,因为声明一个函数不需要...
最常见的入口函数是`main`函数,它的标准形式如下: ```cpp int main(int argc, char* argv[]) { // 程序代码 return 0; } ``` 在这个函数中,`argc`参数表示命令行参数的数量,`argv`是一个字符指针数组,包含...