3-2 temp问题理解

3-2 temp问题理解

public class Test {
	public static void main(String[] args) {
		Animal one=new Animal();
		one.name="花花";
		Animal two=new Animal();
		two.name="帆帆";
		one.help(two);
	}
}
public class Animal {
	public String name;
	public int month;
	
	public Animal() {
		
	}
	
	public void eat() {
		System.out.println(this.name+"在吃东西");
	}
	public void help(final Animal temp) {
		temp=new Animal();
		temp.name="牛牛";
		temp.eat();
	}
}

老师 temp=new Animal();提示报错 是不是因为final修饰了Animal类 导致Animal 在Test类中被one和two两个对象初始化后  不能再在help方法中被对象temp修改?我的理解对吗?





正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,这里并不是因为在Test类中,one和two两个对象初始化造成的,而是因为:

        1、因为参数被声明为final,而temp是一个引用变量,那么它就不能被修改指向另一个对象,所以会报错。

        2、使用new Animal();在进入help方法前,传入的这个Animal类型的temp参数已经进行实例化了,因为在内存中已经分配空间了,这时让temp指向了新的对象,就会报错。

这里我们不写Test类,只写Ainmal类,它是不符合语法规范的,所以Animal类会直接报错,而不是因为Test类实例化了两个Animal类型的对象。例如:

http://img1.sycdn.imooc.com//climg/5da2c35a09a8d2e906000436.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 慕后端4084011 提问者 #1
    可是temp不是还没被实例化吗?temp被实例化的过程在哪?是Animal temp吗?
    2019-10-13 17:58:02
  • 好帮手慕小班 回复 提问者 慕后端4084011 #2
    同学你好,1、这里传入的对象是已经实例化好的,就好像小学入学的报名处,我们在报名的时候,肯定首先是一个出生了的人,然后是一个已经幼儿园毕业的小朋友,符合这些条件,才能报名入学。2、同样的道理,这里help方法传入的Animal类型的对象,就是一个已经实例化好了的对象,不管是从哪儿实例化的Animal类型的对象,这里要求传入的是一个已经实例化好了的Animal类型的对象。如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-10-13 18:47:38
  • 慕后端4084011 提问者 回复 好帮手慕小班 #3
    那就是Animal x 形式就代表已经实例化好了的对象 可以这样理解吗?
    2019-10-14 11:13:30
提问者 慕后端4084011 2019-10-13 13:20:48

应该是final修饰了Animal类型 不是Animal类 ?

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师