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

教材学习内容总结

第六章 继承与多态

6.1 何谓继承

  • 继承避免多个类间重复定义共同行为,使用关键字extends。继承表明了子类与父类之间的is-a关系,中文称为“是一种”。子类继承父类之后,定义与父类中相同的方法部署,但执行内容不同,这称为“重新定义” ,即“重写”(Override)。

  • 多态是使用单一接口操作多种类型的对象。

  • @Override是一个内建的标准标注。如果在子类中某个方法前标注@Override,表示要求编译程序检查,该方法是不是真的重新定义了父类中的某个方法,如果不是的话,就会引发编译错误。

  • 如果某方法区块中没有任何程序代码操作,可以使用abstract标示该方法为抽象方法。该方法不用撰写{}区块,直接;结束即可。如果尝试用抽象类创建实例,就会引发编译错误。

6.2 继承语法细节

  • 被声明为protect的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取。

  • 依权限大小可分为private、无关键字、protectedpublic

  • 在Java中,如果想取得父类中的方法定义,可以在调用方法前,加上super关键字。可以使用super调用的父类方法,不能定义为private(因为这就限定只能在类内使用)。

  • 重新定义方法要注意,对于父类方法中的方法权限,只能扩大不能缩小。若原来成员public,子类重新定义时不可为privateprotected

  • 如果想执行父类中某构造函数,可以使用super()指定。如:super(10)表示调用父类构造函数时传入int数值10。

  • 如果class前使用了final关键字定义,那么表示这个类是最后一个了,不会再有子类,也不会被继承。

  • 在Java中,任何类追溯至最上层父类,一定是java.lang.Object

  • go()方法中,可以调用抽象方法。

第七章 接口与多态

7.1 何谓接口

  • 在Java中可以使用interface关键字定义行为。

  • 类要操作接口,必须使用implement关键字。操作某接口时,对接口中定义的方法有两种处理方式:一是操作接口中定义的方法,二是再度将该方法标示为abstract

  • 继承有“是一种”的关系,操作接口则表示“拥有行为”

  • 在Java中,类可以同时继承某个类,并操作某些接口。

  • 在Java中,接口可以继承自另一个接口,也就是继承父接口行为,再在子接口中额外定义行为。

7.2 借口语法细节

  • 在Java中可以使用interface定义抽象的行为和外观。接口中的方法没有操作时,一定得是公开且抽象。

  • 在接口中枚举常数,一定要使用“=”指定值,否则会编译错误。

  • 在撰写Java程序时,经常会有临时继承某个类或操作某个接口并建立实例的需求。由于这类自类或接口操作类只使用一次,不需要为这些类定义名称,因此可使用匿名内部类来解决这个需求。

  • enum可用于定义枚举常数。

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

  • 『问题一』: Java字符串格式化String.format()的使用问题

课本P172出现了String.format()作为返回值,但关于format()方法的用法课本上并没有解释。

『解决』:在一篇JAVA字符串格式化String.format()的使用方法的博客中学习到,String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。不同转换符可以实现不同数据类型到字符串的转换。

  • 『问题二』:对Java“高内聚,低耦合”的理解

这周去找学长请教问题的时候,听到他说“最好不要在一个class里新建另一个class,在一个方法里调用另一个方法”。问他原因,他说,这违背了面向对象“高内聚,低耦合”的原则。那么,具体体现在哪些方面呢?

『解决』:之前老师在预备作业中让我们思考过这个问题,现在学习了一段时间Java,对这个原则有了更深刻的理解。对于低耦合,我的理解是:一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。这样有利于修改和组合。高内聚则指在一个模块内,让每个元素之间都尽可能的紧密相连。也就是充分利用每一个元素的功能,各施所能,以最终实现某个功能。如果某个元素与该模块的关系比较疏松的话,可能该模块的结构还不够完善,或者是该元素是多余的。

在一篇Java高内聚、低耦合的理解的博客中,对这个原则进行了通俗易懂的解释。做到“高内聚,低耦合”,模块的“可重用性”、“移植性”也就大大增强了。

  • 『问题三』:静态分配与动态分配

『解决』:所有依赖静态类型来定位方法执行版本的分派动作称为静态分配,静态分配发生在编译阶段,其典型动作是方法重载(Overload)。在运行期根据实际类型确定方法执行版本的分配过程称为 动态分配,它和多态性的另外一个重要体现——方法重写(Override)有着密切的关系。

  • 『问题四』:abstract classinterface(即 抽象类接口

『解决』:abstract classinterface是Java语言中对于抽象类定义进行支持的两种机制。不过,抽象类提供了继承的概念,它的出发点就是为了继承,否则它没有存在的任何意义。所以说定义的抽象类一定是用来继承的。接口是用来建立类与类之间的协议,它所提供的只是一种形式,而没有具体的实现。同时实现该接口的实现类必须要实现该接口的所有方法,通过使用implements关键字,表示该类在遵循某个或某组特定的接口。

抽象类接口有各自不同的使用方法,关于使用这两者时的注意事项,在博客java提高篇(四)——抽象类与接口有具体详尽的解释。

  • 『问题五』:方法重载方法重写

『解决』:多态性是面向对象编程的一种特性,和方法无关。静态多态性是指,同样的一个方法能够根据输入数据的不同,做出不同的处理,即方法的重载(有不同的参数列表)。动态多态性是指,当子类继承父类的相同方法,输入数据一样,但要有别于父类的相应时,就要覆盖父类方法,即在子类中重写该方法(相同参数,不同实现)。

  • 『问题六』:super.this.

『解决』:this表示当前对象,也就是当前类对象,super表示当前类的父类。例如:定义一个新的类A,这个A继承了类B,也就是说B是A的父类。那么如果A中有个方法:aa();B中也有个方法: aa();
那么在A 中用this.aa()调用的就是A中定义的方法,而super.aa()调用的就是A的父类B中定义的方法aa()。详细讲解参考博客super,this的区别和使用。

super.如下:


this.如下:

  • 『问题七』:add()方法的使用

课本P179提到,“如果要收集对象,可通过add()方法”。

『解决』:之前学习过java.math.BigDecimal标准类中的add()方法,java.util.ArrayList中也有add()的方法,查询API文档比较如下:
java.util.ArrayList.add()

java.math.BigDecimal.add():

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

  • 『问题一』: 标准备注@Override的使用

『解决』:在子类某个方法前标注@Override之后,会出现左侧的提示,查看该方法重新定义的父类方法。

  • 『问题二』:操作接口时缺少具体行为

如果类操作另一个类,没有定义行为时,程序会报错:

『解决』:操作类时,要注意定义行为。

  • 『问题三』:lengthlength()size()的区别

课本P179的程序和P180的程序分别用到了lengthsize(),但不太清楚这两者的用法。

『解决』:参考博客java中length,length(),size()区别进行学习,了解到java语言中针对数组提供了length属性来获取数组的长度,针对字符串提供了length()方法来获取字符串的长度,针对泛型集合类提供了size()方法来获取元素的个数。所以三者的用法还是有区别的。编写了一个程序加深对这三者的理解:

  • 『问题四』:一个很大的数与一个很小的数运算时,会发生消去误差。例如计算1+1/2+1/3+...+1/n时,从右向左计算会比从左向右计算得到更精确的结果。编写程序尝试了一下,却出现了以下的结果:

『解决』:没有考虑到类型转换问题,将sum += 1/i;改为sum += (float) 1/i后问题得到解决。

代码托管

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

上周考试错题总结

  • Linux Bash中,(grep)命令可以进行全文搜索。

『考点』:grep是linux中很常用的一个命令,主要功能就是进行字符串数据的对比,能使用正则表达式搜索文本,并将符合用户需求的字符串打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。grep在数据中查找出一个字符串时,是以整行为单位来进行数据选取的。

格式及常用的参数如下:

  • System.out.println(“”+52+25);的结果是(5225)

『考点』:System out println(""+i);等价于System.out.println(i.toString());public String toString()返回该对象的字符串表示。通常,ToString()方法会返回一个“以文本方式表示”此对象的字符串。因此在本题中以字符串形式输出5225。

  • p86 Guess.java中guess的值无法输入12。(X)

『考点』:代码:guess = scanner.nextInt();表示获取输入的下一个整型数,而且程序中没有设置错误输入提醒,所以可以输入12.

  • 可以使用java.util.Arrays的(fill())方法把数组初始化成相同的值。

『考点』:查询API文档可知,fill()方法的作用是Assigns the specified int value to each element of the specified array of ints.,即:将指定的int值赋给数组的每个元素。

  • “30”转化为byte类型的30的语句是(Byte.parseByte(“30”);)

『考点』:同样查询API文档可知,java.lang.Byte.parseByte()方法的作用是Parses the string argument as a signed decimal byte.,即:将字符串参数转换为带符号的十进制数。

错题总结

考点均在所学范围内,但考察得非常细致,这就要求我们在学习过程中一定要认真对待敲过的每一行代码,弄懂学习过程中的每一个疑问。同时,API对Java的学习非常有帮助,对于不太理解的方法,我们都可以从API中获得满意的解释。综上,在今后的学习过程中要勤于动手,善于思考。

学习感悟

『关于学习过程与方法』学习Java课程第四周,我最大的感悟是:不能局限于把课本上的代码敲上去,而不进行任何思考,不然再次拿起课本还是一头雾水。另外,CSDN真的是一个超级厉害的网站!学习过程中遇到的问题基本上都能在CSDN上各位牛人的博客中找到答案。所以,学编程,经常逛逛其他人的经验分享,总会有很大收获。

『关于英语学习』本以为过了四六级,英语水平就能应付日常了,但是Java的学习让我意识到这还远远不够。很多时候在维基百科搜到的文章都是英文的,图书馆也有很多关于编程的书籍只有英文版。看到这些,我只能咬咬牙,一边借助百度翻译,一边一个单词一个单词地啃,费时费力不说,理解还不一定准确透彻。So,本来每天在扇贝新闻阅读BBC报导的我,决定重新拾起扇贝单词,努力达到老师口中的“无障碍阅读英文著作”。

『关于Further Learning』新的一周总能认识到自己新的不足,遇到问题上网查阅资料的时候,这种体会尤为真切。网上的技术牛人太多太多,每次都是怀着近乎虔诚的心情点开博客,听过来人娓娓道来,细致讲解,深深明白自己的水平还与他们存在很大差距。所以,大学四年的结束不应该是我们学习的终结,而应该是一个新的开始。学无止境,希望所有人都能坚持“Lifelong-Learning”,在更深更远更广的领域开创出自己的一片天地。

学习进度条

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

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

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

  • 计划学习时间:25小时

  • 实际学习时间:18小时

  • 改进情况:这周的学习任务不算轻松,本应花费再多一点的时间理解学习。以后还是应该提高学习效率,同时挤出时间进行深入思考,巩固薄弱知识点。

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

参考资料

  • Java学习笔记(第8版)

  • 《Java学习笔记(第8版)》学习指导

  • JAVA字符串格式化-String.format()的使用

  • 面向对象原则:高内聚、低耦合。多聚合、少继承

  • java 高内聚,低耦合的理解

  • linux命令之grep用法

  • java.util.Arrays.fill()的使用概谈

  • java静态分配和动态分配

  • Java中abstract class 和 interface 的解释和他们的异同点

  • java中重载与重写的区别

  • java中的length属性,length()方法,size()方法

  • super,this的区别和使用

  • java提高篇(四)-----抽象类与接口

  • Java魔法堂:String.format详解

转载于:https://www.cnblogs.com/Vivian517/p/6576609.html

20155303 2016-2017-2 《Java程序设计》第四周学习总结相关推荐

  1. 《Java程序设计》课程学习资源集合

    文章目录 1.<Java程序设计>在线课程(福建省精品在线课程) 2. 在线编程练习题集 3. 郑老师教学博客 4.<Java程序设计>在线课程使用说明-2022版 5. 大学 ...

  2. java程序设计心得_学习Java编程的学习方法总结

    现在越来越多的人学习Java,参加高强度的Java培训,希望毕业后高薪就业,但是学习Java并非是短期内就可以速成的,不可能一口气吃成一个大胖子,4-5个月就能吧全部的技能学完,这需要一个寻寻渐进的过 ...

  3. 2015-2016-2 《Java程序设计》教学进程

    2015-2016-2 <Java程序设计>教学进程 目录 考核方式 寒假准备 教学进程 第00周学习任务和要求 第01周学习任务和要求 第02周学习任务和要求 第03周学习任务和要求 第 ...

  4. 20155327《Java程序设计》第二周学习总结

    <Java程序设计>第二学习总结 教材学习内容总结 类型 byte(字节) shot(短整型) int(整型) long(长整型) float(浮点型) double(双精度) char( ...

  5. 20145236 冯佳 《Java程序设计》第2周学习总结

    20145236 <Java程序设计>第2周学习总结 教材学习内容总结 一.Java的基本类型. 在Java中的基本类型主要可区分为整数.字节.浮点数字符与布尔. •整数: 类型 长度 范 ...

  6. 如何学习java c语言_20165237 学习基础和C语言基础调查

    学习基础和C语言基础调查 一.技能学习与特长 你有什么技能比大多人(超过90%以上)更好? 我的爱好和技能说实话挺广泛的.如果要挑出来一个很擅长的话,我觉得应该是钢琴. 针对这个技能的获取你有什么成功 ...

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

    20155303 2016-2017-2 <Java程序设计>第六周学习总结 课堂笔记 高效学习法推荐 看视频学习(2h)→ 以代码为中心看课本,思考运行结果并验证(3h)→ 课后作业验证 ...

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

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

  9. 20165218 2017-2018-1 《Java程序设计》第四周学习总结

    20165218 2017-2018-1 <Java程序设计>第四周学习总结 教材学习内容总结 第五章 子类与继承 子类与父类 通过关键字extands定义子类 class 子类 exta ...

最新文章

  1. approxPolyDP-轮廓近似
  2. apache tomcat部署web应用的三种实现方式
  3. wince6.0远程控制工具_【创新创效】门架业务主动监测工具和远程控制电源开关...
  4. 有人在代码里下毒!慎用 pip install 命令
  5. java类型转换答案,在java中支持两种类型的类型转换,自动类型转换和强制类型转换。父类转化为子类需要强制转换。...
  6. 百度搜索关键字抓取_百度搜索引擎收录的抓取规则 - 蜘蛛池
  7. 百亿身家中年男子告别房地产转行学Python,我们推荐他读这6本书
  8. String.raw()方法
  9. 框式交换机指示灯提示信息
  10. C++基础——有关引用的问题
  11. [转]SQL Server 安全性概論與無法刪除資料庫使用者的解決辦法
  12. SQL报错:this is incompatible with sql_mode=only_full_group_by
  13. java转换成kotlin语言教程_#7 Kotlin教程 | 把Java转换为Kotlin
  14. 微信小程序个人服务器搭建
  15. Deep Learning中的层结构
  16. 小白起步-大数据环境搭建-Java环境配置
  17. Linux中的基本命令无法使用,报Command not found的错误的解决方法
  18. 怎么理解面向对象编程【java基础第一讲】
  19. 笔记本电脑怎么录屏,3款简单操作电脑录屏软件
  20. 计算机一级题库ps视频,2016年国家计算机一级Photoshop题库及答案

热门文章

  1. 使用工具Source Monitor测量您Java代码的环复杂度
  2. myeclipse启动php,myeclipse,jdk_启动myeclipse报错,myeclipse,jdk - phpStudy
  3. pandas算加权平均值_4000 字详解TCP超时与重传,看完没收获算我输
  4. adaboost算法java代码_04-04 AdaBoost算法代码(鸢尾花分类)
  5. python print中文_python:print含有中文的list
  6. linux mysql 文件恢复_linux下误删数据文件恢复
  7. qemu 安装windows_BIOS+MBR启动引导安装双系统
  8. js 浅拷贝直接赋值_JS中实现浅拷贝和深拷贝的代码详解
  9. linux msleep 头文件,Linux延迟函数
  10. java安全增加url_规范化String以在Java中创建安全URL