2-16中的疑问及资料问题
three和four指向的是相同的实例地址,有没有方法改变three指向实例里面的属性(int)而不是指向新的实例?four是否也就改变了?资料里面各个类中的方法的返回值类型是不是有错误?
正在回答
同学你好,
1、理解正确。
2、首先源码是不能被修改的。所以,不管是Object类,Integer类的toString方法都不能被修改。
其次,Integer的实例输出时,会自动调用Integer对象重写后的toString方法,将数字转化为字符串进行输出。
同学现在可以看懂源码是很棒的哦~但是在现阶段,Java的知识还没有完全学习完,不建议同学根据源码中的每一个细节进行学习的呢~
建议同学将就业班的课程学习完毕,回过头来看源码,就会发现很多东西可以融会贯通了呢~
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
问题1:2-16课件大概在9分00秒到10分15秒讲到:four是由于three的存在,所以指向了three新实例化的实例,而hree是新构建一个实例对象(老师的原话是:100肯定不在所以会在缓存区构建一个)。但是在源码中调用valueOf方法的时候其实已经有了Integer的数组cache,且cache是静态代码块中的,所以在类加载的时候已经产生并赋值,所以应该是three和four都指向一个已经构建的实例,而不是three第一次构建。不知道理解对不对?
问题2:Integer a=new Integer(1);我想输出a的位置信息,但是Integer里重写了父类Object的toString方法,本想把Integer里的toString方法注释掉,可是发现不能编辑,且并不能通过创建Integer的子类重写toString方法,所以想问对于Integer的实例如何调用父类Object里的toString方法?或者是输出位置信息?
同学你好,1、Integer a=1;-->是在缓存区直接创建1的对象
而 a=2;-->判断缓存区是否有2的对象 有会直接指向2的对象
同学所说的Cat cat=new Cat();cat.age=1; age是Cat对象的属性,但是Integer中的属性,都是用final修饰的,例如
同学所说的修改对象的成员属性是不可以的哦!
2、怎样查看Integer的源代码?
(1)、同学可以在Eclipse中的一个类中写一个Integer,然后按住Ctrl鼠标指上它,然后单击,就可以进入它的源码哦!
(2)、但是如果出现的是如下的界面,就是同学没有配置源码信息哦,可以参考如下步骤配置
1)、点击Edit Source
2)、在此对话框下,选择”External location“,可以看到你的Path路径是空的,点击右边External File...
3)、找到路径为安装java JDK时的路径,关键是在此路径下,找到src.zip,就行了
4)、点击OK就可以看到文件源代码就可以出来了。
3、子类实例怎么调用已经重写过的父类的方法?
public class Animal { private String name; public void play(){ System.out.println("我是父类的方法"); } public Animal(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
public class Cat extends Animal { public Cat(String name) { super(name); this.setName(name); } @Override public void play() { // TODO Auto-generated method stub System.out.println("小猫"+this.getName()+"在做游戏!"); } }
new Cat(),就是创建一个Cat类的对象,通过父类Animal类型来接收,在调用方法时,就会调用子类中的play方法!
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
相似问题
登录后可查看更多问答,登录/注册
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星