java中函数重载的模糊性

java中函数重载的模糊性,java,Java,因为返回类型在函数重载中不起任何作用,编译器只检查调用时使用的代码部分的唯一存在性 那么为什么这个代码不包含错误呢 class Temp{ Temp(){ System.out.println("Default Constructor"); } void Temp(){ S.o.p("HEll"); } public static void main(String a[]){ new Temp(); } } 输出=默认构造函数// 我很震惊没有

因为返回类型在函数重载中不起任何作用,编译器只检查调用时使用的代码部分的唯一存在性

那么为什么这个代码不包含错误呢

class Temp{
  Temp(){
    System.out.println("Default Constructor");
  }
  void Temp(){
    S.o.p("HEll"); 
  }
  public static void main(String a[]){
    new Temp();
  }
}
输出=默认构造函数// 我很震惊没有编译时错误,因为复制者只检查调用时使用的代码部分,这意味着编译器只需要检查Temp()的唯一存在,而Temp()的唯一存在

请详细说明,因为
void Temp()
是一个方法,您应该在实例中调用它。允许使用类的名称声明方法,但调用不同。只能使用
new
运算符调用构造函数

您可以在中阅读有关构造函数的更多信息

方法调用表达式从不调用构造函数(§15.12)

这里您应该注意的主要区别是构造函数没有返回类型,重载的定义包括返回类型。

因为
void Temp()
是一个方法,您应该在实例上调用它。允许使用类的名称声明方法,但调用不同。只能使用
new
运算符调用构造函数

您可以在中阅读有关构造函数的更多信息

方法调用表达式从不调用构造函数(§15.12)

这里您应该注意的主要区别是构造函数没有返回类型,重载的定义包括返回类型。不需要返回类型,
void Temp()
将被视为方法而不是构造函数

调用
void Temp()时,将调用不带参数的构造函数。

不需要返回类型,
void Temp()
将被视为方法而不是构造函数


调用
void Temp()时,将调用没有参数的构造函数。

一个是构造函数,另一个不是。

一个是构造函数,另一个不是。

编译器使用关键字
new
区分方法调用和构造函数调用。只有构造函数可以位于关键字
new
之后。

编译器使用关键字
new
区分方法调用和构造函数调用。只有构造函数可以位于
new
关键字之后。

类、方法和字段位于不同的命名空间中。编译器始终可以确定使用的构造,并轻松区分
new Temp()
(类)与
o.Temp()
(方法)和
o.Temp
(字段)。

类、方法和字段位于不同的名称空间中。编译器始终可以确定所使用的构造,并轻松区分
new Temp()
(类)与
o.Temp()
(方法)和
o.Temp
(字段)。

使用Eclipse,您可以避免这种用法:


请参见使用Eclipse时“应用”按钮上方的一行,您可以避免这种用法:


请参见“应用”按钮上方的行

此处没有重载。一个是构造函数,另一个是方法。这里没有重载。一个是构造函数,另一个是方法。但编译器会检查Temp()是否存在,如果我们不添加Temp(),编译器也会这样做,如果谈论方法重载的概念,仍然会检查Temp()是否唯一存在…我知道编译器区分方法和构造函数这一事实..我的疑问是,在构造函数和方法重载条件下,编译器是如何做的,但编译器会检查Temp()是否存在,如果我们不添加Temp(),编译器也会这样做,如果谈论方法重载的概念仍然是为了Temp()的唯一存在……我知道编译器区分方法和构造函数这一事实……我的疑问是在构造函数和方法重载条件下是如何做到的。是的,我们可能会编写类似Type=new Type()的恐怖代码;是的,我们可以写一些恐怖的东西,比如Type=newtype();