20155303 2016-2017-2 《Java程序设计》第三周学习总结
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就接近了。
计划学习时间:25小时
实际学习时间:23小时
改进情况:按照N=3来计算,误差在可接受的范围之内。以后会加强这方面的训练,使计划学习时间与实际学习时间更接近。
参考资料
20155303 2016-2017-2 《Java程序设计》第三周学习总结的更多相关文章
- Java程序设计第三周学习总结
1. 本周学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...
- 对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈
对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈 一:教学中存在的学习问题 “1.由于同学们平时练习不足,上课总是出现跟不上老师的节奏的现象. 2.个别同学上课不认真听讲,打开 ...
- 20155303 2016-2017-2 《Java程序设计》第二周学习总结
20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...
- 20155303 2016-2017-2 《Java程序设计》第九周学习总结
20155303 2016-2017-2 <Java程序设计>第九周学习总结 目录 学习内容总结(Linux命令) 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考 ...
- 20155303 2016-2017-2 《Java程序设计》第一周学习总结
20155303 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 浏览教材,根据自己的理解每章提出一个问题 Chapter1 Java平台概论:MyProgr ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
随机推荐
- SQL利用Case When Then多条件
CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 WHEN 条件3 THEN 结果3 WHEN 条件4 THEN 结果4......... ...
- service依赖dao的接口进行数据传输
service依赖dao的接口进行数据传输
- Python排序算法动态图形化演示(实现代码)
1.冒泡排序 冒泡排序是最简单也是最容易理解的排序方法,其原理就是重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是 ...
- python读取写入内存方法SringIO,BytesIO
python中不仅仅可以在磁盘中写入文件,还允许直接在内存中直接写入数据:需要借助StringIO和BytesIO来实现: 1.直接操作StringIO from io import StringIO ...
- 【科技】KD-tree随想
大概就是个复杂度对的暴力做法,在你不想写二维线段树等的时候优秀的替代品. 优点:思路简单,代码好写. 他大概有两种用法(虽然差不多). 在平面坐标系中干一些事情: 例如最常规的平面最近最远点,不管是欧 ...
- 使用msiexec.exe绕过应用程序白名单(多种方法)
0x00 前言 在我们之前的文章中,我们讨论了“Windows Applocker策略 - 初学者指南”,因为它们为应用程序控制策略定义了AppLocker规则,以及如何使用它们.但今天您将学习如何绕 ...
- Linux系统启动详解(三)
上节已系统initramfs已启动完成,将系统控制权交给了真正的rootfs的/sbin/init,下面就是/sbin/init干活的时间了. 4 /sbin/init initramfs ...
- Android实现透明的颜色效果(zz)
android Button或者ImageButton背景透明状态设置 设置Button或ImageButton的背景为透明或者半透明 半透明< Button android:backgroun ...
- vue入门教程
vue视频教程(对vue有个概览,要掌握vue-cli的用法,对vue-router,vuex有基本的概念) https://www.imooc.com/learn/1091 1. vue-cli v ...
- HTTP状态码的含义: 200:400:403:404:408:500:503:504
http协议的状态码 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态码. 100(继续) 请求者应当继续提出请求.服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101( ...