20155312 2016-2017-2 《Java程序设计》第五周学习总结

20155312 2016-2017-2 《Java程序设计》第五周学习总结

课堂笔记

  • 十个基本类型
  • 命令:ascii打印ascii值,
  • od -tx1 Test.java用十六进制查看代码,od -tx1 -tc Test.java显示出对应的原代码
  • 信息 = 位 + 上下文
  • 乱码缘由:编码方式不一样。
    • 每一个汉字有个“国标码”。设定编码为utf-8
  • 自定义类型
    • java中: ;c语言中:结构体。
      • 用父类声明变量名的引用,子类生成新的对象。
      • is - a规则
      • 强制类型转换。(类型)父类->子类。
    • 具有抽象能力
      • 根据业务逻辑抓事物本质特征。
      • 不一样业务系统中抽象的内容不一样。
  • Don't Repeat Yourself: DRY
    • 使用变量:final int nstu = 84;
    • 使用函数:f( ... )——方法
    • 使用继承:抽象出父类。
    • bin 中的.class文件与src中的.java文件重复,无需托管。
    • .git 版本信息,.gitignore:其中注释的文件无需托管。eg:*.class
  • 面向对象的三要素:封装、继承和多态。封装是继承的基础,继承是多态的基础。
  • lamda表达式:实现匿名内部类的新方法。

教材学习内容总结

知识

  • API文档中带throws的必须使用try...catch,例如System.in.read()
  • 堆栈追踪信息中,最顶层是异常的根源,如下是调用方法的顺序。printStackTrace还接受PrintStream、PrintWriter的版本,能够将堆栈信息以指定方式至输出目的地。
  • try的括号中越后面撰写的对象资源会越早被关闭。

动手

  • 根据老师的课程指导,对P227Average文件进行了三组测试,用例为(1)8 9 10 0 ->平均9.00;(2)5 6 4 2 0->平均4.25;(3)5 4 8 0->平均5.67。指望结果与输出结果相同。
  • 输入u以后,显示出错截图以下:(产生异常的报错信息出如今第一行Exception in thread "main" java.util.InputMismatchException:非预期输入不匹配)(引发异常的程序代码信息在最后一行:at Average.main(Average.java:10)
  • 与 Average.java比较,Average2.java程序的优势是:利用try catch非法输入后能够显示友好的提示信息。
  • 与 Average2.java比较,Average3.java程序优势是:将try catch放在控制输入的while循环中,用户非法输入后能够回复正常流程。
  • 正则表达式概要:
    • 正则表达式能够看做是文本处理中“查找/替换"的领域专用语言。
    • 在信息安全专业课中有不少应用,好比数据安全验证、Web安全中的SQL注入防范、XSS攻击防范等。

教材学习中的问题和解决过程

  • 『问题1』:为何8.1.2异常继承架构中第一个使用try catch打包System.in.read()的代码片断在补全后,结果与预测值不同?(输入89,预测89,实际输出56)。截图以下:
    html

  • 『解决方案』查询了API中关于System.in.read()的说明, 了解到System.in.read()返回的是输入数值的 ASKII 码。
  • 『问题2』:还是问题1的代码段,其中ex.printStackTrace是进行了怎样的错误处理?
  • 『解决方案』:ex:表示异常对象,这个对象中包含了当前异常的全部信息;printStackTrace();则表示打印异常堆栈信息,通常是打印到控制台,方便问题的定位和分析(日记记录)。
  • 『问题3』:用ascii打印出来的表怎么看?截图以下:
    java

  • 『解决方案』:查了一下,第一列Dec表示十进制,第二列Hex表示十进制对应的十六进制,第三列没有名字,是十进制对应的计算机中的字符。(97 61 a:表示a的ascii值为97,用十六进制表示为61)
  • 『问题4』:异常对象的名称能够随便定义吗?仍是只能用书中出现的eex
  • 『解决方案』:进行了尝试,将其改为自定义名称hh,仍然能够编译运行。
  • 『问题5』:try {...}catch(IOException e){...}中++IOException++为何前面不加java.io?
  • 『解决方案』:在个人虚拟机中第一种写法编译没法经过,应该把java.io补上。
  • 『问题6』:异常对象是并列关系时,try catch前后顺序有差异吗?
  • 『解决方案』:只要父类不出如今子类以前就能够了。
  • 『问题7』:InterruptedException是什么异常?
  • 『解决方案』:当线程在活动以前或活动期间处于正在等待、休眠或占用状态且该线程被中断时,抛出该异常。抛InterruptedException的表明方法有:
  1. Java.lang.Object 类的 wait 方法
  2. java.lang.Thread 类的 sleep 方法
  3. java.lang.Thread 类的 join 方法
  • 『问题8』:scanner.hasNext()是在判断什么?
  • 『解决方案』:查询了API,"Returns true if this scanner has another token in its input."这句话的意思应该是输入仍在进行就返回true吧。截图以下:
    git

  • 『问题9』:builder.append(scanner.nextLine());builder.append('\n');这两句中的.append()是在作什么?
  • 『解决方案』:append函数的功能:以可写方式打开文件。若是文件不存在,将会自动建立。使用该函数,将会覆盖文件中的全部内容。因此这两句是将输入的一句写入文件,再换行。查询API截图以下:
    正则表达式

  • 『问题10』:StringBuilder类的具体定义语法是什么?
  • 『解决方案』:查询了API,StringBuilder()是构造一个没有元素的字符串,最初的容量是16个字符。截图以下:
    编程

  • 『问题11』:老师给的代码,运行完m3()为何会“Caught IOException in m1()...rethrowing”?返回主函数后为何会“Caught IOException in main()”?
  • 『解决方案』:API中关于IOException的解释为“Signals that an I/O exception of some sort has occurred. This class is the general class of exceptions produced by failed or interrupted I/O operations.”意思是“当发生某种 I/O 异常时,抛出此异常。此类是失败或中断的 I/O 操做生成的异常的通用类。”因为在m1中调用m3(true)时参数genExc为true,在m3中执行 if (genExc)中的语句,新建异常对象,返回m1后接受到这个异常因此执行catch中的语句。
  • 『问题12』:9.1.1中Guest.java代码中guest.toUpperCase()是什么意思?
  • 『解决方案』:查询了API,其中toUpperCase()解释为:返回一个字符串,该字符串中的全部字母都被转化为大写字母。
    vim

  • 『问题13』:为何用Set自动去掉重复字符串打印时,会有两个"[]"括号把字符串括起来呢?
  • 『问题14』:为何打印9.1.3Words.java中的tokens时,只打印出第一个字符串呢?
  • 『解决方案』:String [] tokens表示tokens是字符串数组,System.out.printf("%s",tokens);只是打印tokens所指向的第一个成员的字符创,若是想所有打印,须要用循环。设计模式

    代码调试中的问题和解决过程

  • 『问题1』:在补全8.3.1中第一个代码后,编译提示找不到符号FileInputStream。
  • 『解决方案』:查询了API,FileInputStream是java.io.InputStream的子类,因此使用前前须要import java.io.*;截图以下:
    api

  • 『问题2』:写了TestFileUtil类测试p236 FileUtil.java编译时提示“必须对FileNotFoundException进行捕获或声明以便抛出”。截图以下:
    数组

  • 『解决方案』:在main(String[] args)后加throws FileNotFoundException结果编译经过,运行时,将readFile()中的参数设为"FileUtil"结果显示没法找到文件FileUtil。截图以下:
    安全

  • 「尝试」将参数中添加文件所在路径~/zjy20155312/src/Unit08/FileUtil但仍是抛出FileNotFoundException异常,没法找到指定文件。
  • 『问题3』:补全doSome的代码片断后出现这样的编译问题:

  • 『解决方案』:添加一个class。总结:一个程序中若是没有定义class,interface,enum,只是定义了一个方法,是没法经过编译的。

代码托管

  • 代码提交过程截图:

  • 代码量截图:

上周考试错题总结

  • 『错题1』:填空:”Hello”.charAt(1) 的值是(‘e’)
    • 「缘由」:理解题意有误,觉得是求字符‘e’对应的整数值。
    • 「理解状况」:已理解,charAt(1)的意思是取字符串下标为1的字符(下标从0开始)。
  • 『错题2』:填空:写出编译P165 RPG.java的命令(javac –d . *.java)
    • 「缘由」:觉得只是编译RPG.java这个文件便可,因此个人答案是(javac -d xxx RPG.java)。
    • 「理解状况」:1.不理解为何把生成的.class文件放到.当前文件夹下,这样指定路径还有什么意义呢?2.用*代替RPG的是由于要连带把文件中涉及到的SwordsMan.java和Magician.java两个文件一块儿编译了吗?解决:RPG是测试类代码,老师答案中*.java是把它和工做类代码一同翻译了。
  • 『错题3』:判断:父类中有个public void fight(),子类中有个public void fight( Weapon w),这两个方法的关系是Override.(X)
    • 「缘由」:对方法的重载(Overload)和覆盖(Override)概念混淆。
    • 「理解状况」:方法重载是在一个类中使用多个同名构造函数,其间只是参数类型和个数不一样;覆盖是子类对父类中定义的方法的从新描述,其方法名,参数表都须要一致。参考方法重写(OverRide)具体对好比下:
      • 相同点 : 都要求方法名称相同均可以应用于抽象方法和非抽象方法之间。
      • 不一样点:
      1. 方法重载发生在同一个类的内部的方法内,而方法重写发生在继承关系中,子类重写了父类的方法;
      2. 方法重载不要求方法的返回类型一致与否 而方法重写要求返回类型必须一致,要求方法的参数签名必须不一致,而方法重写要求方法的参数签名必须一致
      3. 方法重载对方法的访问权限和抛出异常没有限制,而方法重写对方法的访问权限和抛出异常有限制
  • 『错题4』:填空:实现接口表示(拥有行为),但不是ISA关系。
    • 「缘由」:对题目理解不到位,时间不够用。
    • 「理解状况」:已经理解,“拥有行为”与“是一种”关系相似,都是等号右侧“...”等号左侧。
  • 『错题5』:填空:实现一个类中的equals()方法时,必定要同时实现(hashCode())方法。
    • 「缘由」:时间不够。
    • 「理解状况」:书有这样一句话“操做equals()同时也会操做hashCode()”。
  • 『错题6』:判断:Java中全部的对象都有equals()方法。(OK)
    • 「缘由」:不记得本身有没有作这道题。
    • 「理解状况」:equals是Object类有定义的方法,它的源程序是return this == obj,对于Java中的全部对象,不管是基本类型仍是类类型,均可以进行==比较。
  • 『错题7』:判断:XX是一个引用型变量,System.out.println(XX)等价于System.out.println(XX.toString()). (OK)
    • 「缘由」:时间不够。
    • 「理解状况」:已理解。
  • 『错题8』:面向对象中,设计经验能够用(设计模式)表达。
    • 「缘由」:看书不仔细,自学过程当中虽然结合了教学指导,但仍不知道一部分知识是重点。
    • 「理解状况」:设计模式是可复用面向对象软件的基础。参考Java开发中的23种设计模式详解
  • 『错题9』:判断:Math中的abs()方法能够Override.(X)。

    • 「理解状况」:override 具体知识点:
      • 子类的方法名称,参数签名和返回类型必须与父类的方法名称,参数签名和返回类型一致。
      • 子类的方法不能缩小父类方法的访问权限,只能扩大不能缩小。
      • 子类方法不能抛出比父类方法更多的异常,子类方法抛出的异常必须与父类相同或抛出的异常类为父类抛出异常类的子类。
      • 父类的静态方法不能被子类覆盖为非静态方法。
      • 父类的非静态方法不能被子类覆盖为静态方法。
      • 父类的非抽象方法能够被子类覆盖为抽象方法。

        结对及互评

        这周我对搭档的帮助主要是帮她在周三的练习题中分析代码,一块儿修正代码。在计算机二级的考试复习阶段相互鼓励,与她共享个人复习文档和考试经验,同时督促对方学习java。

        评分标准(满分10分)

  1. 从0分加到10分为止
  2. 正确使用Markdown语法(加1分):
    • 不使用Markdown不加分
    • 有语法错误的不加分(连接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  3. 模板中的要素齐全(加1分)
    • 缺乏“教材学习中的问题和解决过程”的不加分
    • 缺乏“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺乏“结对及互评”的不能打开的不加分
    • 缺乏“上周考试错题总结”的不能加分
    • 缺乏“进度条”的不能加分
    • 缺乏“参考资料”的不能加分
  4. 教材学习中的问题和解决过程, 一个问题加1分

  5. 代码调试中的问题和解决过程, 一个问题加1分

  6. 本周有效代码超过300分行的(加2分)
    • 一周提交次数少于20次的不加分

6 其余加分:
- 周五前发博客的加1分
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进状况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深刻的加1分
7 扣分:
- 有抄袭的扣至0分
- 代码做弊的扣至0分

点评模板:

  • 基于评分标准,我给本博客打分:(0-10)。得分状况以下:xxx

  • 参考示例

点评过的同窗博客和代码

其余(感悟、思考等,可选)

自我总结以下:

  1. 作题速度慢,课堂测验出现作不完题的状况。
  2. 对书本知识掌握存在片面性,对延展性知识了解不够。
  3. 学习java的最终目的是实现自动化,即会编出质量高的程序解决需求。因此夯实基础的同时提升编程能力才是重中之重。
  4. 第五周因为花费了大部分时间准备计算机二级考试,周一到周五没能作到天天学习java,在之后的学习中不会再出现这样的状况。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 4/0 1/3 28/80 下载了JDK和GIT
第二周 61/4 1/4 20/108 在unbuntu中熟练编写程序,熟练进行文件、目录等操做
第三周 684/65 1/5 27/108 初步配置vim方便使用,会本身解决一些代码问题
第四周 1238/749 1/6 23/135 大部分本身补全的代码片断不会出现问题,渐渐具有脱离书本编代码的能力
第五周 696/1987 1/7 20/158 可以帮助其余同窗发现代码出错的缘由

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进本身的计划能力。这个工做学习中很重要,也颇有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为何这么难软件工程 估计方法

参考资料

相关文章
相关标签/搜索