java 一个类的构造函数有多个,为什么不能在有参数的构造中不使用this直接用函数名调用构造函数???

例如: class A{ A(){}A(int a){A(); //系统会报错}}
2024-12-13 00:04:37
推荐回答(5个)
回答1:

呵呵,构造函数从来都不是用名字调用的,跟普通成员不同,调用时必须明确指定对象,否则构造函数会返回一个临时对象。下面是分析。
A(int a)
{
A(); //这种用法,A()需要返回一个临时对象,由于你没事先分配内存,所以会出错
}
A(int a)
{
this(); //这种用法,A()是对this 当前对象进行操作,不再新创建一个临时对象,当然也就不需要new 了
}
所以构造函数的调用方式只有两个:
1 new 类名(参数) //返回一个对象,需要事先分配内存,即new
2 对象(this/super)(参数)//对指定的对象进行操作

真后悔浪费时间做了这么多分析,直接被忽视了

回答2:

这东西就像生孩子一样当你调用了构造函数时就已经生成实例了也就是说孩子已经生出来了,你不可能说生下来发现是个扁鼻子觉得不满意,然后塞回去决定重新生个鹰钩鼻的.对构造函数也是一样当构造函数执行完了之后就说明对象已经构造好了,无论外面是否还有一层构造函数.

回答3:

你的代码写的有问题,你在一个构造函数中调用另一个构造方法,应该使用this或者super关键字。正确的写法如下:

class A{
    A(){
    }
    A(int a){
     this(); 
    }
}

回答4:

构造方法不是这样调用的,你换成A aa = new A();就不会错了。A();这样直接调用是调用类方法。

回答5:

this是jvm给类自身的一个引用,是不能用在静态模块上的;