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. Springboot 和 Mybatis集成开发

    Springboot 和 Mybatis集成开发 本项目使用的环境: 开发工具:Intellij IDEA 2017.1.3 jdk:1.7.0_79 maven:3.3.9 额外功能 PageHel ...

  2. POJ1815_Friendship

    一个无向图,问你删除多少点后,可以隔断起点到终点的所有路径?输出字典序最小的删点方案. 求最小点割,先拆点,容量为1,普通边容量无穷,最大流即为应删点数. 需要求出字典序最小的方案,可以从小到大枚举所 ...

  3. UVA11624_Fire!

    在一个矩形方阵里面,一个人要从一个位置走向另一个位置,其中某些地方有火源,每过一分钟,火源就会点燃相邻的点,同时相邻的点也变成了火源.人不能通过有火的点.问一个人能够安全地走到目的地去?最短时间多少? ...

  4. python的N个小功能(找到要爬取的验证码链接,并大量下载验证码样本)

    # -*- coding: utf-8 -*- """ Created on Mon Mar 21 11:04:54 2017 @author: sl "&qu ...

  5. Genaro Network —— 区块链3.0缔造者

    在2018年1月26日硅谷密探在美国旧金山艺术宫成功举办了“Blockchain Connect Conference”.在大会上,Genaro Network 联合CEO Jason Inch 携同 ...

  6. BZOJ.1036 [ZJOI2008]树的统计Count ( 点权树链剖分 线段树维护和与最值)

    BZOJ.1036 [ZJOI2008]树的统计Count (树链剖分 线段树维护和与最值) 题意分析 (题目图片来自于 这里) 第一道树链剖分的题目,谈一下自己的理解. 树链剖分能解决的问题是,题目 ...

  7. POJ.1067 取石子游戏 (博弈论 威佐夫博弈)

    POJ.1067 取石子游戏 (博弈论 威佐夫博弈) 题意分析 简单的威佐夫博弈 博弈论快速入门 代码总览 #include <cstdio> #include <cmath> ...

  8. Chapter11(关联容器)--C++Prime笔记

    1.关联容器: map关键字-值对,经常被称为关联数组 set中每个元素只有一个关键字,即只保存关键字的容器 ①允许重复的关键字的容器名字都包含multi. ②不保持关键字顺序存储的容器的名字都以但粗 ...

  9. 题解【bzoj2002 [Hnoi2010]Bounce 弹飞绵羊】

    Description 给 \(n\) 个点以及它们的弹力系数 \(k_i\) ,含义为 可以弹到 \(i + k_i\) 的位置. 支持两个东西,修改一个点的弹力系数:求一个点要弹多少次弹出 \(n ...

  10. 二叉树(前序,中序,后序,层序)遍历递归与循环的python实现

    二叉树的遍历是在面试使比较常见的项目了.对于二叉树的前中后层序遍历,每种遍历都可以递归和循环两种实现方法,且每种遍历的递归实现都比循环实现要简洁.下面做一个小结. 一.中序遍历 前中后序三种遍历方法对 ...