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

教材学习内容总结

第四章

  • 学会如何查询Java API文件对于Java的学习很有帮助,可以了解到如何使用各种方法。

  • =是用在指定参考名称参考某个对象,而==是用在比较两个参考名称是否参考到同一对象。

  • 对于二维数组array[][],由于有两个维度,必须先通过array.length得知有几列。对于每一列,再利用array[x].length得知每一列有几个元素。

  • System.arraycopy()的五个参数分别是:来源数组、来源起始索引、目的数组、目的起始索引、复制长度。使用Array.copyof()方法更方便。

  • 注意区分“浅层复制”与“深层复制”。

第五章

  • 如果想存取对象的数据成员,可以通过“.”运算符加上数据成员名称。如:

    class CashCard { String number; CashCard card1 = new CashCard(); card1.number = A001; }

  • 在对象数组成员前加上this关键字,表示将参数的值,指定给这个对象(this)的各个数据成员。如:

    CashCard(String number){ this.number = number;}

  • 使用private声明,可以封装不希望被改动的私有数据,而是只能以get的形式读取数据。

  • public:类公开;private:类私有。如果没有声明权限修饰的成员,只有在相同包的类程序代码中才可以直接存取,也就是“包范围权限”。

  • 返回值类型不可作为方法重载依据。

  • 被声明为static的成员,不会让个别对象拥有,而是属于类。

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

  • 『问题一』

BigDecimal提供plus()、substract()、multiply()、divide()等方法,(好吧,其实是受英语思维的影响...)divide()方法在使用时应该把除数还是被除数放在括号里?

『解决』

编写了两组代码,分别将除数和被除数放在()里,疑惑得到解决。

  • 『问题二』

使用private声明,只能以get形式读取数据,否则会报错。如下图:

『解决』

使用get()方法读取数据。如下图:

  • 『问题三』

课本P109代码运行结果为NaN,并不是平均值。

『解决』

课本P109提到,“可以让用户命令行自变量提供整数,计算出所有整数平均值”。由于我编译运行并没有使用命令行,所以才会出现NaN的运行结果。
不太明白为什么会出现NaN的运行结果,上网查询NaN相关资料明白,NaN,是Not a Number的缩写,在IEEE浮点数算术标准(IEEE 754)中定义,表示一些特殊数值(无穷与非数值(NaN))。也可修改程序如下:

  • 『问题四』

课本上反复提到“反编译”一词,不太了解这是什么操作,大致觉得应该是根据代码运行结果及作用反推代码的过程。

『解决』

查阅了相关资料,在7款开源Java反编译工具这篇博客中了解到,需要安装相关软件进行反编译。如果之后的Java学习有需要,再进行进一步深入学习。

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

  • 『问题一』

编写了CashCard程序不能运行,左侧图标没有绿色的小箭头。

『解决』

仔细观察代码,没有main()主函数。而Java是从main()主函数开始运行的,因此不能run

  • 『问题二』

在改写课本上求平均值的代码时,第一次没有得到正确结果。如下图:

『解决』

do-while循环是先执行后判断,所以i多加了1,修改代码如下,得到了正确结果:

  • 『问题三』

在运行课本P91代码的时候,wrapper1.doubleValue() / 3的运行结果并不是课本上说的3.33333333333...一直循环下去,而是出现了这样的结果:


『解决』

设计代码,对Java中无限循环除法的运算规则进行进一步的了解。double的精度确实不如float精度高,而且对于循环小数也不是想象中的四舍五入。如下图:

代码托管

  • 代码提交过程及代码量截图:

『注』本周初在IDEA上重新提交了之前的代码,所以本周编写的代码量为:1001-235=766。

上周考试错题总结

  • Linux Bash中,查找当前目录中前天创建的Java文件的命令是(find . –name *.java -ctime 2)

『考点』:①与时间相关的命令参数:-atime:最后访问时间;-ctime:创建时间;-mtime:最后修改时间。以-mtime为例,-mtime n:n天之前的“一天之内”修改过的文件;-mtime +n:n天之前(不包含n天本身)被修改过的文件;-mtime -n:n天之前(包含n天本身)被修改过的文件。②当前目录为“.”,若根目录则为“~”。③Java文件的后缀为“.java”,所以可用“*.java”查找Java文件。

  • ~0b1011的十进制值是(-12)

『考点』:计算机存放时,一个byte8位,1011存放为000010011。按题目要求“~”取反得到11110100,最高位(符号位)为1,表示该数为负数,因此所对应的数为(各位取反,末位加一)10001100,即-12.

  • Java中,非零数字等价于true.(X)

『考点』:Java中,非零数字为false,零为true。

关于考试错题的一点思考

每次考试之前信心满满,考完试才发现漏洞百出,其实自己还有很多知识没有熟练掌握,很多概念没有深刻理解。学语言毕竟不能拘泥于“背过”代码或是概念,缺乏思考的机械性记忆绝不算是对一门语言的掌握。拿第一道题举例,上次错题分析只注重time的参数了,这次一拿到考卷就闷着头往上写,却忽略了“当前目录”和“Java文件”。其实这也说明一个问题,实践出真知,在虚拟机里运行我写的那个命令是绝对得不到想要的结果的。实践一次,出错一次,找到原因下次避免,才能不断进步吧。

学习感悟

三周过去了,我想我已经已经适应并热爱上这种自学模式了。从一名学生的角度来看,老师对课本单纯的讲解并不能使我们真正掌握什么,课后进行大量的练习实践才是根本途径。这三周,算是Java学习的一个开端,尤其是这一周,感觉难度比前两周有很大的提升,所以常常一学就是一下午一晚上。很多时候书上的都是伪代码,或是代码片段,甚至是有错误的代码,需要根据自己的理解补全才能运行。而自己的能力也就在这一次次修改代码中提高了。

目前我的学习模式是,每周一至周三修改前一周的博客,并学习新一周学习任务,在书中标出自己不懂的地方并查阅资料。从周三开始敲代码,并根据自己的理解学习进行修改调试。因此,目前我并没有做到每天编写一定量的代码,学习方法有待进一步改进。

有幸拜读刘未鹏著写的暗时间一书,目前还没有阅读完第一篇,已受益匪浅。书中“设计你自己的进度条”一节中提到,“如果你对整个目标的几个重大步骤有清晰的界定,能够对每个步骤的耗时作出靠谱的上界估计,你就不会对不确定的未来,不确定的时间投入感到恐惧,就不会被这种不确定感压迫到过早退出。”现在我们的学习正是借鉴了这种“进度条”模式。上学期第一次了解到要至少编写5000行代码的时候,说实话我有点怯懦了。不过,这种害怕的感觉很快被进度条上的数字打败,当代码总量破百的时候,当编写了第一个50行的程序的时候,觉得5000的目标其实触手可及。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 16/16 1/1 18/18 初步认识了Java
第二周 219/235 2/2 28/46 学习了Java的基本语法知识
第三周 766/1001 3/3 23/69 了解对象与参考的关系,以及封装的概念与实现

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

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

参考资料

20155303 2016-2017-2 《Java程序设计》第三周学习总结的更多相关文章

  1. Java程序设计第三周学习总结

    1. 本周学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...

  2. 对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈

    对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈 一:教学中存在的学习问题 “1.由于同学们平时练习不足,上课总是出现跟不上老师的节奏的现象. 2.个别同学上课不认真听讲,打开 ...

  3. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

  4. 20155303 2016-2017-2 《Java程序设计》第九周学习总结

    20155303 2016-2017-2 <Java程序设计>第九周学习总结 目录 学习内容总结(Linux命令) 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考 ...

  5. 20155303 2016-2017-2 《Java程序设计》第一周学习总结

    20155303 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 浏览教材,根据自己的理解每章提出一个问题 Chapter1 Java平台概论:MyProgr ...

  6. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  7. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  8. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  9. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  10. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

随机推荐

  1. SQL利用Case When Then多条件

    CASE    WHEN 条件1 THEN 结果1    WHEN 条件2 THEN 结果2    WHEN 条件3 THEN 结果3    WHEN 条件4 THEN 结果4.........    ...

  2. service依赖dao的接口进行数据传输

    service依赖dao的接口进行数据传输

  3. Python排序算法动态图形化演示(实现代码)

     1.冒泡排序 冒泡排序是最简单也是最容易理解的排序方法,其原理就是重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是 ...

  4. python读取写入内存方法SringIO,BytesIO

    python中不仅仅可以在磁盘中写入文件,还允许直接在内存中直接写入数据:需要借助StringIO和BytesIO来实现: 1.直接操作StringIO from io import StringIO ...

  5. 【科技】KD-tree随想

    大概就是个复杂度对的暴力做法,在你不想写二维线段树等的时候优秀的替代品. 优点:思路简单,代码好写. 他大概有两种用法(虽然差不多). 在平面坐标系中干一些事情: 例如最常规的平面最近最远点,不管是欧 ...

  6. 使用msiexec.exe绕过应用程序白名单(多种方法)

    0x00 前言 在我们之前的文章中,我们讨论了“Windows Applocker策略 - 初学者指南”,因为它们为应用程序控制策略定义了AppLocker规则,以及如何使用它们.但今天您将学习如何绕 ...

  7. Linux系统启动详解(三)

    上节已系统initramfs已启动完成,将系统控制权交给了真正的rootfs的/sbin/init,下面就是/sbin/init干活的时间了. 4       /sbin/init initramfs ...

  8. Android实现透明的颜色效果(zz)

    android Button或者ImageButton背景透明状态设置 设置Button或ImageButton的背景为透明或者半透明 半透明< Button android:backgroun ...

  9. vue入门教程

    vue视频教程(对vue有个概览,要掌握vue-cli的用法,对vue-router,vuex有基本的概念) https://www.imooc.com/learn/1091 1. vue-cli v ...

  10. HTTP状态码的含义: 200:400:403:404:408:500:503:504

    http协议的状态码 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态码. 100(继续) 请求者应当继续提出请求.服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101( ...