java中对toString方法和对控制台输出以及重写toString问题的理解(笔记)
2018-01-12 16:18
369 查看
我们都知道,system.out用于控制台输出,便于我们初学者测试,调试程序。接下来有几种不同的情况。
在控制台会输出一段“我们看不懂的内容”,其实我们知道"t"是什么就可以,第5行代码中,等号左边的t表示引用,右边是一个对象的实例化,也就是new出的一个对象,而等号就是将这个对象指向这个引用“t”,此处不赘述,因为在JAVA初学阶段中尽量避免指针引用内存回收等问题,因为java语言的产生的某部分作用就是为了避免这些底层编程模式,提高我们的效率。
这时候
[b]*第一个问题来了,为什么把引用放在system.out.println()里面,在控制台就能出现那个“我们看不懂的内容”呢?我们选中println点进去看看源码:[/b]
按住ctrl左键点击valueof
好了,这里出现了toString(),我们一下明白了,原来printfln()方法默认会调用toString()方法,所以当我们system.out.printfln(t),实际上它的真正语句是system.out.printfln(t.toString());
ps:print 和println唯一的区别就是后者输出换行
[b]
*第二个问题来了,我们现在知道默认输出toString(),但是为什么输出的是“ kaizi.Test@15db9742”,而不是“java夺去了我的天真”,“德玛西亚”,“JVM笑着看你装B”,接下来我们要了解toString()方法里面到底写了什么。[/b]
快捷键ctrl+shift+t,输入object(为什么是object,别急后面会说),打开,ctrl+F查找toString()方法。如下图
至此,我们看图就可以看出他为什么会输出这个结果了吧。
[b]*第三个问题蹦蹦跳跳着来了,你会问:为什么有的时候要重写toString()方法呢?或者第三张图为什么是obj.toString()?跟我这个类有什么关系?第二个问题中为什么要找object类?[/b]
当然有关系,因为如果在创建类的时候没有声明要继承的类
那么java就默认继承Object类。这下懂了吧,虽然源码上是通过obj调用的toString(),可是我这个类是object类的子类,所以当然可以调用父类(object)的toString方法。所以有的时候我们用快捷方式(ctrl+shift+s再按s)创建toString方法的时候,会有一个@Override的注解,即为子类的重写。让我们测试下重写toString()方法后会输出什么结果。
最后一个问题我就不改板式了,你问我为什么会继承object类了呢,一句话,你为什么有两个眼睛呢?这是一个道理。规定好的。
初学JAVA,闲暇之余写写文章,当做笔记且供大家一起讨论学习,有错误的或者不懂的可以站内私信我。
原创帖,转载请署名出处。
1。输出字符串
(略),比如我们想输出“Hello world”,只需要写system.out.println(“Hello world”)就好了,“”里面的是String类型,这个很好理解。2。输出“类名”
在控制台会输出一段“我们看不懂的内容”,其实我们知道"t"是什么就可以,第5行代码中,等号左边的t表示引用,右边是一个对象的实例化,也就是new出的一个对象,而等号就是将这个对象指向这个引用“t”,此处不赘述,因为在JAVA初学阶段中尽量避免指针引用内存回收等问题,因为java语言的产生的某部分作用就是为了避免这些底层编程模式,提高我们的效率。
这时候
[b]*第一个问题来了,为什么把引用放在system.out.println()里面,在控制台就能出现那个“我们看不懂的内容”呢?我们选中println点进去看看源码:[/b]
按住ctrl左键点击valueof
好了,这里出现了toString(),我们一下明白了,原来printfln()方法默认会调用toString()方法,所以当我们system.out.printfln(t),实际上它的真正语句是system.out.printfln(t.toString());
ps:print 和println唯一的区别就是后者输出换行
[b]
*第二个问题来了,我们现在知道默认输出toString(),但是为什么输出的是“ kaizi.Test@15db9742”,而不是“java夺去了我的天真”,“德玛西亚”,“JVM笑着看你装B”,接下来我们要了解toString()方法里面到底写了什么。[/b]
快捷键ctrl+shift+t,输入object(为什么是object,别急后面会说),打开,ctrl+F查找toString()方法。如下图
至此,我们看图就可以看出他为什么会输出这个结果了吧。
[b]*第三个问题蹦蹦跳跳着来了,你会问:为什么有的时候要重写toString()方法呢?或者第三张图为什么是obj.toString()?跟我这个类有什么关系?第二个问题中为什么要找object类?[/b]
当然有关系,因为如果在创建类的时候没有声明要继承的类
那么java就默认继承Object类。这下懂了吧,虽然源码上是通过obj调用的toString(),可是我这个类是object类的子类,所以当然可以调用父类(object)的toString方法。所以有的时候我们用快捷方式(ctrl+shift+s再按s)创建toString方法的时候,会有一个@Override的注解,即为子类的重写。让我们测试下重写toString()方法后会输出什么结果。
最后一个问题我就不改板式了,你问我为什么会继承object类了呢,一句话,你为什么有两个眼睛呢?这是一个道理。规定好的。
初学JAVA,闲暇之余写写文章,当做笔记且供大家一起讨论学习,有错误的或者不懂的可以站内私信我。
原创帖,转载请署名出处。
相关文章推荐
- 巧用重写toString的方法,输出格式的问题留给java帮我解决吧~
- Java笔记5:解决MyEclipse控制台输入中文乱码输出问题(Eclipse也可以用)
- 简单的java实验,涉及到 类继承以及接口问题,方法体的重写(区别于重载)
- @V@ java代码笔记2010-06-12:java控制台输入各类型类实现;以及判断输入字符串里面是否有数字的两种方法:方法1:转换成字符数组;方法2:正则表达式。
- Java笔记5:解决MyEclipse控制台输入中文乱码输出问题(Eclipse也可以用)
- 【数据结构java描述(一)】单链表类的create()方法的重写以及Node类的理解
- 理解和掌握类的加载过程以及子类继承父类后,重写方法的调用问题
- 使用ToStringBuilder输出对象所有属性以及对应的值-java笔记
- Java学习笔记2:在控制台输出“倒”金字塔
- 关于流和缓冲区的理解以及一般标准输入问题的解决方法小结
- Java程序中遇到的乱码问题以及解决方法
- Java学习笔记5:在控制台输出“空”棱形
- java学习笔记九——构造函数、方法重写、重载
- Java中的类成员访问控制符和继承重写父类的方法时的类成员访问控制符的相关问题
- Java方法重写问题
- 关于流和缓冲区的理解以及一般标准输入问题的解决方法小结
- Java中关于==和equal的区别 以及equals()方法重写
- java 中值传递与引用传递以及方法中别名的问题
- 关于流和缓冲区的理解以及一般标准输入问题的解决方法小结 (fflush() setbuf() )
- Java学习笔记3:在控制台输出“空”金字塔