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

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

教材学习内容总结

JAVA Fundations : 数据结构。
Java程序设计 第八版

目录
. - 目录 - 第八章:数组 - 第九章:继承

第八章 数组

  • 数组是对象。
  • 确定数组中元素的地址的方法:某个元素的地址值 = 该元素在数组中的索引值✖每个元素所占的字节数(根据数组类型来确定的) + 该数组的起始地址。
  • 一旦数组声明中确定了数组的大小之后,数组的大小就不能变化了,即:数组能够保存的值的个数就不可再改变了。
  • 每个JAVA数组都是迭代器,所以可以用 for-each 循环来处理数组中的每个元素即:for(int i:array){}
  • 数组索引值必须小于数组的个数length。
  • 数组对象中的length是常量,它保存了数组的长度。由上一条可知:数组的最大索引值是(length-1)
  • 数组是对象,所以当把一个数组作为形参传递给方法时,该方法可以改变数组的元素值,但不能改变数组引用本身。即:你改不了门牌号,要是你改了,其他人怎么来找到这个人。。。但由于你有门牌号(这个“门牌号”只是复印得到的一个副本,真正的原件还在新区的房间里放着,方便后面的人也得到这个原件的副本,从而也可以找到我)这个地址,所以你找到了这个人,你可以对这个干些什么,比如:约出去吃饭。
  • 对象数组:非常类似一个概念“数组的嵌套”,数组A中存放着数组B。但是,这里的数组A的元素里放着的是一个一个对象的引用,即:一个一个同类型对象的地址!不是普通意义上的一个数组B。 书上的例子8.7以及我编的PP81都有着这种“嵌套”的思想!
  • 命令行实参:将在命令行输入的 java * 1,2,3,4 中的,1,2,3,4放进String[] args 数组,以供main程序使用。
[回到顶部](#top)
[回到顶部](#top)
第九章
  • 继承的目的:复用已有的软件。
  • protected 修饰符用于继承。各个可见性修饰符的可见性(当前同一个类中是否可以使用?同一个包内是否可以使用?子孙类是否可以使用?),如下图。

  • super() 引用:因为构造方法不能被继承,所以得用super()来调用父类的构造方法。super也可以用来调用父类的各个成员。子类的构造方法负责调用父类的构造方法。一般情况下,子类的构造方法的第一行应该使用super关键字来调用父类的构造方法。如果没有这样显示的调用语句,则Java在子类的构造方法的最开始出自动调用不带参数的super方法。这样就能保证:在子类的构造方法执行完毕之前,父类会初始化完毕父类的成员变量,这样子类就能继承得到这些父类的成员变量了。
  • 继承只能有一个父类,接口允许多继承。
  • 所有的类都直接或间接的派生与Object类。所以,每个类都继承了toString 和 equals 方法。
  • 抽象类不能实例化,它定义的抽象方法有该抽象类的子类来实现: 实现“父亲”的夙愿,要不然你就不是我儿子。。。。UML类图中,抽象类是斜体。
  • 抽象方法声明为static类型会出现矛盾:静态方法在还没有声明类的对象的时候就能通过类名来调用,但是抽象方法如果你不在子类中实现的话,就无法调用呀(抽象类的抽象方法是没有函数体的,所以一定要实现了才能去调用,所以不能用static修饰)。


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

有点不是太能理解:用super类调用父类的构造方法这一行为。基于我现在的理解,我的看法就像刚刚上面说到的:在子类中去调用父类的构造方法,这样子类便可以有父类的成员变量了,所以子类不用再重复的声明和实例化对应的成员变量。 满足DRY(Don't Repeat Yourself.s)原则。

  • 解决过程:其实上面的理解是正确的。经过翻阅书籍,理解更加深刻,理一下思路后,总结如下:为啥要在子类的构造方法中第一条语句去使用super 关键字调用父类的构造方法呢?
    • 第一:子类无法继承父类的构造方法,所以:当要使用父类的构造方法时就得用super 关键字来调用呀。
    • 第二:为什么会要用到“父类的构造方法”?因为:子类不用再重复的声明和实例化对应的成员变量,子类便可以有父类的成员变量了,所以要用到“父类的构造方法”。
    • 第三:如果我在子类的构造方法中不用super来调用父类的构造方法会发生什么?JAVA它自动帮你加super(),自动去调用父类的不带参数的构造方法。所以此时:你得保证父类的构造方法中有不带参数的构造方法,否则会报错。
[回到顶部](#top)
## 代码调试中的问题和解决过程 问题一:语法错误。编写类的时候,不需要有像函数那样的形参括号。 ![](https://img2018.cnblogs.com/blog/1554324/201812/1554324-20181225213914185-224396547.jpg) 问题二:编程时犯了逻辑错误,出现了死循环。现象:程序进行到最后的时候就是卡死在某个地方,就是好像Died了。 ![](https://img2018.cnblogs.com/blog/1554324/201812/1554324-20181225214052769-735481296.jpg) 问题三:使用IDEA调试时,对toString()方法进行调试时,不能STEP INTO 进到toString()方法中 ![](https://img2018.cnblogs.com/blog/1554324/201812/1554324-20181225214322320-139403746.jpg)

解决方法:如图改设置。
问题四:使用IDEA,运行时java XXXXX 输入命令行参数args

问题五:JAVA中默认的浮点数类型是double。所以,在使用float类型时,要明显的“说”出来,否则JAVA就认为你输入的小数是double型的。

问题六:关于vim-plug的插件的修改设置。

[回到顶部](#top)
## 本周代码托管截图 ![](https://img2018.cnblogs.com/blog/1554324/201812/1554324-20181225214951460-722903646.jpg) ## 其他(感悟、思考等,可选) 好好学,不急,坚持下去。像vim,从最开始的不愿意接受,到现在的有点意思。要坚持下去。所以,我认为学习的方式就是这样:最开始学一个东西的时候就是死活觉得它难,死活觉得它枯燥。但是只要挺过了那个阶段,后面学起来就会稍微轻松一些,就是一个坚持的问题了。怎么挺过去那个阶段呢?我现在的看法是:一开始不要去就想做到有老师带的那种程度,毕竟你是自学,所以你的目标就是以最快的方式去把它那整个流程走下来,把大体的学习框架和流程弄清,接下来就是不断的花时间,最多两周,就可以达到有老师带的那种程度了。
[回到顶部](#top)
## 学习进度条
代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一次
第二次 弄清了对象在内存中的存放
第三次
第四次 684/704 1/5 通过调试,知道了实例化过程是怎样的
第五次 678/1120 1/6
[回到顶部](#top)

参考资料

  • Java程序设计 第八版
  • Java2实用教程
  • java程序设计与数据结构教程 第二版
原文地址:https://www.cnblogs.com/alan6y/p/10176732.html