我删除了一个必要的构造函数,但它仍然编译并运行

时间:2011-05-07 13:47:31

标签: java

虽然通过删除我认为不必要的代码来整理我的项目,但我删除了表单的构造函数

public MyClass(int a,  int b) 

留下其他构造函数

public MyClass(double c, double d)

调用了int,int构造函数,我没有注意到,但它编译并运行但调用了double,double版本,非常正确地导致我写入的异常处理程序被抛出。 MyClass不会扩展任何其他类。

Java会导致这种不可见的自动转换发生什么规则?

3 个答案:

答案 0 :(得分:6)

按此规则:http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.1.2

这是一个不断扩大的转换。

答案 1 :(得分:3)

这是Widening Primitive Conversion。由于您可以将int转换为double而不会丢失任何信息,因此Java语言无形地执行此操作。

答案 2 :(得分:1)

在方法重载中,会调用最具体的方法,因此如果您有foo(int, int)foo(double, double)并且调用foo(1,2),则会调用foo (int, int)。但由于1,2可能也会增加一倍,如果你没有foo(int, int)foo(double, double)将被调用。