20175218 2018-2019-2 《Java程序设计》第六周学习总结
教材学习内容总结
- 第七章
- 第七章主要讲的是内部类和异常类。而里面的内容又主要分为内部类、匿名类、异常类和断言。
- 内部类,Java支持在一个类中声明另一个类,也就是内部类。而包含内部类的类则称为内部类的外嵌类。
- 匿名类,和某类有关的匿名类就是该类的一个子类或和某接口有关的匿名类就是实现该接口的一个类,该子类没有明显地用类声明来定义,就称作匿名类。
- Java的异常出现在方法调用中,即在方法调用中抛出异常对象,就会导致程序运行异常。
- Java可以使用try-catch语句来处理异常,把可能出现异常的操作放在try-catch语句的try部分,当try部分中的某个方法调用发生异常后,try部分将立刻结束执行,转向执行相应的catch部分。
- 第十章
- 第十章主要讲的是输入、输出流。而里面的内容又主要分为File类,文件字节输入流,文件字节输出流,文件字符输入、输出流,缓冲流,随机流,数组流,数据流,对象流,序列化与对象克隆,使用Scanner解析文件,文件对话框,带进度条的输入流和文件锁。
- 输入、输出流的作用就是提供一条通道程序,可以用来读取源中的数据,亦或是把数据送到目的地。其中,输入流的指向为源,而程序从指向源的输入流中读取源中的数据;输出流的指向叫做目的地,而程序通过向输出流中写入数据把信息传递到目的地。
- 对于字节输入流,InputStream的子类创建的对象就是字节输入流。字节输入流按字节读取源中的数据,只要不关闭流,每次调用读取方法时就顺序地读取源中的其余的内容,直到源中的末尾或流被关闭。
- 对于字符输入流,Reader 的子类创建的对象就是字符输入流。字符输入流按字符读取源中的数据,只要不关闭流,每次调用读取方法时就顺序地读取源中的其余的内容,直到源中的末尾或流被关闭。
- 对于字节输出流,OutputStream 的子类创建的对象就是字节输出流。字节输出流按字节将数据写入输出流指向的目的地中,只要不关闭流,每次调用写入方法就顺序地向目的地写入内容,直到流被关闭。
- 对于字符输出流,Writer的子类创建的对象就是字符输出流。字符输出流按字符将数据写入输出流指向的目的地中,只要不关闭流,每次调用写入方法就顺序地向目的地写入内容,直到流被关闭。
- 当我们使用对象流写入或读入对象时,一定要保证对象是序列化的。
教材学习中的问题和解决过程
- 问题1:不清楚内部类和匿名内部类的区别
- 问题1解决方案:
上网查询资料后得知:
- 匿名内部类只能使用一次,不区分static和非static。如果用到外部类的变量的话,必须是类变量或者实例变量,就是必须是类定义的变量,或者final的局部变量。匿名内部类如果是继承某个类的话是可以重写那个类的方法的,这个和普通内部类一样
- 内部类可以是static的或者非static的,static内部类只能包含静态方法和静态类变量,只能访问外部类的静态元素,内部类可以实例化,多次使用所有可以用匿名内部类的地方都可以用内部类替换
-
问题2:抽象类和接口不能直接实例化,但在匿名内部类中为什么就可以直接用new实例化
-
问题2解决方案:
查询资料得知,new filenamefilter()是创建一个继承自filenamefilter的匿名类对象,通过new表达式返回的引用自动向上转型为对filenamefilter的引用。因为匿名类不存在构造方法,需要显式调用父类的构造方法,并重写父类的方法。 -
问题3:bufferedreader流是否可以直接指向一个文件
-
问题3解决方案:
看了BufferedReader的构造函数后就知道了,不能。
因为BufferedReader是一个包装类,主要功能就是对读到的内容进行缓冲,使用它时首先要有一个读取流,然后它再对读取流中读取的内容进行缓冲。 -
问题4:不知道怎样使用输入、输出流克隆对象
-
问题4解决方案:
其实书上有解释,刚开始漏掉了,后来问学霸,说书上有,然后自己也理解了一下。
使用对象流很容易获取一个序列化对象的克隆。只需将该对象写入到对象输出流,而用对象输出流读回的对象一定是原对象的一个克隆。
代码调试中的问题和解决过程
-
问题1:不理解例子2的 Example7_2.java 里面的 board.showMess(new OutputEnglish())
-
问题1解决方案:看书知道了,这是向参数传递 OutputAlphabet 的子类, OutputEnglish 的对象,类似的下面还有board.showMess(new OutputAlphabet()....【中间有一堆代码】),这就是传递OutputAlphabet的匿名子类的对象。
-
问题2:不能分清throw和throws
-
问题2解决方案:看到书上有说,throw是Java关键字,该关键字的作用就是抛出异常。throw和throws是两个不同的关键字。
-
问题3:运行第十章例子12的代码时,找不到符号,EncryptAndDecrypt()有错,如图:
-
问题3解决方案:发现后面那个EncryptAndDecrypt打错了,所以引用不成功,就出现找不到符号这个问题。重新更正代码后,能成功运行。
代码托管
新建的一个仓库的脚本截图
上周考试错题总结
- 无
其他(感悟、思考等,可选)
第二周测试题总结分析博客链接:
第二周测试总结分析
第七章代码运行截图:
截图链接
第十章代码运行截图:
截图链接
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 |
-
计划学习时间:28小时
-
实际学习时间:28小时
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)