java 一个类的构造函数有多个,为什么不能在有参数的构造中不使用this直接用函数名调用构造函数???
5个回答
展开全部
呵呵,构造函数从来都不是用名字调用的,跟普通成员不同,调用时必须明确指定对象,否则构造函数会返回一个临时对象。下面是分析。
A(int a)
{
A(); //这种用法,A()需要返回一个临时对象,由于你没事先分配内存,所以会出错
}
A(int a)
{
this(); //这种用法,A()是对this 当前对象进行操作,不再新创建一个临时对象,当然也就不需要new 了
}
所以构造函数的调用方式只有两个:
1 new 类名(参数) //返回一个对象,需要事先分配内存,即new
2 对象(this/super)(参数)//对指定的对象进行操作
真后悔浪费时间做了这么多分析,直接被忽视了
A(int a)
{
A(); //这种用法,A()需要返回一个临时对象,由于你没事先分配内存,所以会出错
}
A(int a)
{
this(); //这种用法,A()是对this 当前对象进行操作,不再新创建一个临时对象,当然也就不需要new 了
}
所以构造函数的调用方式只有两个:
1 new 类名(参数) //返回一个对象,需要事先分配内存,即new
2 对象(this/super)(参数)//对指定的对象进行操作
真后悔浪费时间做了这么多分析,直接被忽视了
展开全部
这东西就像生孩子一样当你调用了构造函数时就已经生成实例了也就是说孩子已经生出来了,你不可能说生下来发现是个扁鼻子觉得不满意,然后塞回去决定重新生个鹰钩鼻的.对构造函数也是一样当构造函数执行完了之后就说明对象已经构造好了,无论外面是否还有一层构造函数.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的代码写的有问题,你在一个构造函数中调用另一个构造方法,应该使用this或者super关键字。正确的写法如下:
class A{
A(){
}
A(int a){
this();
}
}
追问
我知道这么用不行,我想知道为什么不行
追答
一般情况下,我们要使用一个对象的变量或者方法,采用的是对象.方法的形式,这意味着,你需要先在JVM中生成这个对象的实例,也就是new一个对象。
在一个方法的内部希望获得当前对象的句柄,由于这个句柄是编译器秘密传递的,所以时没有明确的标志符来识别的,这个时候我们可以使用this这个关键字。通俗含义:不论是生成的哪个对象调用了这个方法,都会生成一个指向这个对象的指针this 。
在类声明的时候,并不知道当前的对象是什么,因此使用this关键字,不管你怎么生成这个A对象,都会生成一个指向这个对象的指针this 。
在构建器里调用构建器
若为一个类写了多个构建器,那么经常都需要在一个构建器里调用另一个构建器,以避
免写重复的代码。可用this关键字做到这一点。在一个构建器中,若为其赋予一个自变量列表,那么this关键字会具有不同的含义:它会对与那个自变量列表相符的构建器进行明确的调用。这样一来,我们就可通过一条直接的途径来调用其他构建器。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
构造方法不是这样调用的,你换成A aa = new A();就不会错了。A();这样直接调用是调用类方法。
更多追问追答
追问
我知道不对 ,我想知道的是为什么会错,提示的错误是系统没有这个函数,难道构造函数在系统内部跟别的函数有什么不同么
追答
是的。构造函数跟其他的函数不一样。构造函数必须是new xx(); 一般函数直接调用 xxx();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
this是jvm给类自身的一个引用,是不能用在静态模块上的;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询