java中两个类相互调用是属于传值调用还是传址调用? 即A类中新建B类对象,B类中也新建A类对象。

publicclassA{Bbi;publicA(){bi=newB(this);}voidseB(Bbi){this.bi=bi;}}publicclassB{Aai;... public class A{
B bi;
public A(){ bi=new B(this); }
void seB(B bi){ this.bi=bi; }
}

public class B{
A ai;
public B(A ai){ this.ai=ai; ai.setB(this);}
}

public class AB{
public static void main(String []args){
A aa=new A();
}
}
————————————————————————
如上面代码。 新建对象aa时,在A类构造函数中有"bi=new B(this)" 这时候把this(即aa)作为值传入bi中, 这时候的传值是 传值还是传址?就是说在bi中改变ai会不会改变原本新建的aa?
另外在类B构造函数中有 "ai.setB(this)" 有什么意义?
两个类相互包含,这是为了方便两个类之间的参数共享使用吧?这种类型叫做,有专门术语?
展开
 我来答
zhou073
2013-01-22 · TA获得超过134个赞
知道小有建树答主
回答量:191
采纳率:80%
帮助的人:64.1万
展开全部
记住,对象的传递,就是你所说的“地址传递”,修改值会相互影响。

"ai.setB(this)"有什么意义?除了这个还有getter()方法,setter()是用来设置值,而getter()方法是用来得到值。为什么这样设置呢?java里面不推荐外部直接访问类的成员变量,鼓励使用getter()、setter()方法来访问,成员变量一般都会设置为私有的。就像你这里,一般不会这样用:aa.bi =...;而使用:aa.seB(...);

“两个类相互包含,这是为了方便两个类之间的参数共享使用”这句你说对了,这个叫关联,不仅仅java这么叫,UML里都这么叫的
天天好宝宝
2013-01-22 · TA获得超过373个赞
知道小有建树答主
回答量:603
采纳率:0%
帮助的人:491万
展开全部
呵呵!Java中绝对没有传地址这一说法,也就是说在Java里只有传值!
貌似这种应用叫做“关联类”,确实可以更好的实现访问和数据共享!
public class A{
B bi;
public A(){ bi=new B(this); }
void setB(B bi){ this.bi=bi; }
}
执行A类的setB方法为A.bi赋值
其实别把自己绕进去,咱就看看A到底有什么属性?那么是包含了一个bi。同样B也是如此,包含一个ai
通过实例化一个对象,完成了"你中有我,我中有你",这种关联是一种双向的。
可以这样理解 "a的bi属性是B对象,B对象的逆属性是a的bi"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Many_question
2013-01-22 · TA获得超过2853个赞
知道大有可为答主
回答量:2040
采纳率:66%
帮助的人:2328万
展开全部
这样一来两个类中都有对方的句柄,都可以直接访问和调用对方.android中前台活动和后台服务之间就常常弄成这种解构.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a87327035
2013-01-22 · 超过31用户采纳过TA的回答
知道答主
回答量:120
采纳率:0%
帮助的人:63.7万
展开全部
这个时候是传值
将当前对象作为ai对象的b属性放置进去
两个类相互包含这个倒是可以写,不过好像不太建议这么干吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式