JavaI删除了一个必要的构造函数,但它仍然可以编译和运行
在通过删除我认为不必要的代码来整理我的项目的同时,我删除了表单的构造函数
public MyClass(int a, int b)
将另一个构造函数留在原位
public MyClass(double c, double d)
有一个对int,int构造函数的调用,我没有注意到,但是它编译并运行了,但是调用了double,double版本,非常正确地导致抛出我编写的异常处理程序。MyClass不扩展任何其他类
Java根据什么规则导致这种不可见的自动转换发生
# 1 楼答案
根据这个规则:http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.1.2
这是一个不断扩大的转变
# 2 楼答案
在方法重载中,调用最具体的方法,因此如果有
foo(int, int)
和foo(double, double)
并且调用foo(1,2)
,那么foo (int, int)
将被调用。但是由于1,2也可能是双倍的,如果你没有foo(int, int)
,那么foo(double, double)
将被调用# 3 楼答案
这是一个Widening Primitive Conversion。由于可以在不丢失任何信息的情况下将
int
转换为double
,因此Java语言以不可见的方式执行此操作