《Java程序设计》第二次学习总结

2018.12.15 《Java程序设计》第二次学习总结

教材学习内容总结

JAVA Fundations : 数据结构。

  • 看完了第三章和第四章。知道了new运算符的作用是:返回新创建的对象的Reference(地址)。
    接下来重点说一下自己对于关于Reference的相关理解。
    • Refer的英文解释是:

    • Reference的英文解释之一是:
      综上,reference就是我们通常理解的”地址“,从这个地址中我们能得到我们感兴趣的信息。通常来说这个产生了这个reference就产生了一个对象,这个reference就是对象的”身份证号码“。结合之前的思考,个人觉得”对象“就是一间房子。即:对象=房子。
      所以,reference就是这个房子的一个编号(地址),代表它的位置在哪里。

    • 注意区分reference和reference name的区别,如:House 419 = new House();

这个例子中,reference name就是419,reference是 new House();所产生的值。中文翻译时,reference name为引用变量,我个人认为就是一个变量,上篇随笔中说到:变量是门牌号,这里这个所谓的“引用变量”(就是一个变量)也就是"门牌号"。

接下来,介绍在Java学习笔记中4.1.3节中的对象的指定与相等性。

Java中有两大类型系统:

一类是基本类型(Primitive Type),主要包括:整数,浮点数,字符,布尔,字节,这五种类型。注意不包括字符串。

第二大类是“类类型”(Class Type)也被称为参考类型(Reference Type)。我个人理解,该类型就是自己定义的类型
对于基本类型,“=”和“”就是C语言里的意思,进行赋值与比较是否相等。
对于自定义的类型,“=”是用在将某个名牌绑到某个对象,而“
”是用在比较两个名牌是否绑到了同一个对象。

结合自己的理解,对象是房子。则:“=”就是一个把“门牌号”贴到房子的过程,而“==”是一个比较两个门牌号是否是贴在同一个房子。如:


House a = new House("0.1");

House b = new House("0.1");

System.out.println(a==b);			//结果为假

System.out.println(a.equals(b));	//结果为真


程序中 a==b 就是在问,贴a门牌号的那座房子是不是贴b门牌号的那座房子?答案:不是(因为两座房子的地址不可能一样)。
程序中 a.equals(b) 就是在问,贴a门牌号的那座房子里”住着的“数值与贴b门牌号的那座房子里”住着的“数值相等吗?即:是否内含的数值相等?答案:是(都是0.1)。

注意,在计算机的世界里,一个房子可以有两个门牌号噢。即:多个引用变量可以指向同一个对象。

其实,从内存的底层的角度来看,基本类型的数值是直接存放在它的门牌号对应的房子里的(即:栈中)。而类类型的数值以及方法不是直接存放在它的门牌号对应的房子里的,门牌号对应的房子里放着的是实际数值所在的地址(在“堆”中),即:在门牌号(419)对应的房子里(新区419)的放着一张纸条:“要找我去老区515西”。我个人理解为:对象是一个很复杂的类型了,原来简单的那个房子不能很好的让这个对象继续待下去,所以这个对象搬去了一个能够很好描述它的地方,即:老区。但是,为了能让其他人也能从老区找到人,所以在新区的房子里也放着一张纸条来写对象实际所在的地址。 (新区的大一大二的学生学的东西都基本一样:高数,线代,概率论,英语...,但是,到了大三,不同专业的学生要学的东西开始复杂起来了,所以不住新区419了,得搬去老区515,为了更好的学习复杂的知识了,我们的知识从大一的简单变得不那么简单了。)

  • Math类的所有方法都是静态的,即:可以通过类名Math来调用方法。
  • NumberFormat和DecimalFormat类看用于对信息进行格式化。
  • 含有‘+’和‘-’的标识符是非法的,因为这两个字符是非法的。
  • 包装类:将基本类型值“包装”为一个对象,如:Int,Double...(从这个包装类也表明了:Java中存在这两大类型,且管理这两类的数据的方式是不同的。基本类型的方式是:直接存放的是基本数据的值,而类类型的管理方式是:存放的是对象的引用(实际住的地方在哪里)。)
  • 自动包装:自动将基本数据类型转换为对应的包装类,逆向的过程称为”拆包“。
  • 浮点数的比较:不能用”==“,而应该用:计算两个浮点数的差值的绝对值,并把这个绝对值与公差(自己规定的,如:0.0001)相比较,如果绝对值小于公差,则这两个浮点数相等,否则不等。
  • 不能使用相等或关系运算符对String对象来进行比较,String对象是一个对象,不是基本类型。可以使用equals()方法来进行比较。或者compareTo()。
  • 如果一个字符串是一个更长的字符串的前缀,如:app和apply,则:短字符的顺序是在长字符的前面的,即:app.compareTo(apply)<=0
  • 程序是稳健的是指:程序能未卜先知,尽可能处理它所会可能遇到的各种问题。
  • 迭代器对象有方法:hasNext(),next()
  • 循环变量的创建、检查、修改都是在for循环头中完成的,循环控制变量可以用在循环体中。
  • 如果一个对象实现了Iterable接口,则可以使用变形的for循环来处理每一项,即:for-each语句。注意:Scanner类没有实现Iterable接口,所以不能用for-each语句。for-each的语法格式如下:

for(声明循环变量:数组的名字)
{...}

 

其中,声明的循环变量的类型必须和数组的类型相同。可以将这种形式的for语句翻译成:循环变量i依次取数组中的每一个元素的值。

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

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

做了pp33,pp35,pp38

  • 问题1:编写pp33时遇到了逻辑错误,即:代码不是按照我想的那样跑,它是按照我写的那样跑的。会出现两位数的情况,不合题意。经过修改后解决了这个问题。其实就是,我现在一开始的写法会有:0.092这种情况出现,而且“###”并不会把最开始的0也算成一个数字“#”

  • 问题1解决方案:既然知道了“###”,那就直接用整数吧,不用浮点数了。这样就可以避免0.092的情况了,一开始之所以用浮点数是因为想要有092这样的数字出现,但是好像没有按照我的想法:最开始的0也算数字。所以用直接规定范围的整数来实现,但是不知道这样的编程会不会出现我相要的092的情况。

  • 问题2:错误: 找不到或无法加载主类

  • 问题2解决方案:路径要对。因为,如果在代码里是写了package chapter03 这个命令的,即:打包了。那么用JAVAC -d bin/ 编译后会自动在bin目录下生成一个chapter03的文件夹,里面放着.class文件。如下图2所示。

      						              图2
    

所以接下来用Java来运行字节码文件时,用-cp命令要注意**不是-cp bin/chapter03/pp33 ** 不是!!!而应该是:-cp bin/ package.public主类名。注意空格!所以,这里要注意虽然tree里面有chapter03文件夹,但是那其实不是真正普通意义上的文件加,那是package名

  • rm -rf 删除非空文件夹

代码托管

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

这次作业主再一次熟悉整个流程,还巩固了一下如果带有包名,在运行时要加上报名前缀。学到了DecimalFormat类的用法,还有Random类的用法。
同时,巩固了,要从键盘读数,则要用system.in+scanner类来实现。Scanner sc = new Scanner(System.in);
知道了找不到主类就是路径的问题。
知道了习题并不是那本教材上的,而是另一本第八版上的。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 20/20 3/3 无统计
第二周 68/88 2/5 无统计

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

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

  • 计划学习时间:无统计

  • 实际学习时间:无统计

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

原文地址:https://www.cnblogs.com/alan6y/p/10125440.html