【博学谷学习记录】超强总结,用心分享 | 第3周:Java基础学习中初学者常见错误(3)

本周进行了JavaSE进阶部分的学习,其中一些常见的错误和误区整理如下。

1.多态的理解

Cat是Animal的子类,当把Cat对象赋给Animal类的变量时,就会出现多态的表现形式。

Animal a = Cat c;

对于这种情况,其实可以按照“容器”和“内容物”来类比。把变量看成是装在数据的“容器”,而相应的对象是包装好数据的“内容物”。

在没有多态之前,容器和内容物是一一匹配的,可以看成是大小刚好,形状也一致的。但在出现继承之后,子类就会从父类继承一部分内容,进而形成自己的独有的内容物。

通常父类的容器要比子类的容器要大,所以子类的内容物放到父类的容器里是没有问题的。如果想要把装在父类容器里的内容物,重新放到和自己大小相称的子类容器中(向下转型),就需要给出特定的指令才可以。

Animal a = Cat c;
Cat c1 = (Cat) a;

按照“容器”和“内容物”来理解多态,能更加形象的知道里面的区别。

2.IO流

IO流当中,涉及到字节流和字符流,并且每个流当中,还有对应的缓冲流,记起来不太容易。

首先要区分,字符流是读写文字的,所以结尾都是Reader和Writer,字节流是读取纯数据的,就是正常的“流”,结尾都是Stream。

其次,缓冲流只是一种优化手段,并不是必须的。相当于在每种流外面,又包裹了一层,所以就需要内外层的结尾要一样(Stream 包裹 Stream, Reader包裹Reader)

BufferedInputStream bis = new BufferedInputStream(new FileInputStream("test.txt"));

至于转换流,就是Stream和Reader同时存在的流,可以实现字符流和字节流的相互转换,方便后续的操作。

所以只要知道他们之间的关系,就不需要死记硬背里面的关键词了。

3.多线程

创造多线程的方式有三种:Thread,Runnable,Callable。

前两种用的比较多,而且理解起来也相对更简单,因为有对应的比喻。Thread可以看成是一条条公路,而Runnable可以看成是跑在上面的车(具体代码)。

如果某个类想要成为多线程,可以继承Thread,然后每创建一个对象,相当于新建了一个公路,每条公路上的代码就能同时运行了。但这有一个弊端,就是代码和公路是绑定的,每条公路只能跑自己的代码。

如果是实现了Runnable接口的类,可以单独定义其中运行的代码,相当于把车和公路分离了。如果想要这辆车在不同的公路上运行,就可以新建一条条空白的公路,然后把车放进去,就可以并行的跑了。

利用公路和车的比喻,可以更好的理解多线程的意义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值