20155339 2016-2017-2 《Java程序设计》第4周学习总结
20155339 2016-2017-2 《Java程序设计》第4周学习总结
教材学习内容总结
继承、多态与is-a
- 继承就是避免多个类间重复定义共同行为。
- 可以把相同的成粗代码提升为父类。
- java中子类只能继承一个父类,这种子类父类之间的关系就是is-a关系。
- 检查语法是否正确就可以使用is-a即“是一种”来判断,方式是从=右边往左读:判断右边是不是一种左边。例:
Role role1=new SwordsMan()
;就是判断SwordsMan
是不是一种Role
?若是则语法正确,反之则编译失败。相关练习:链接1,链接2,链接3 ,运行结果如下
重新定义行为以及抽象方法、抽象类
在继承父类之后,定义与父类中相同的方法部署,但执行内容不同,这称为重新定义。
此处应该注意在重新定义父类中某个方法的时候,一定要注意子类与父类的签署必须相同。这个问题看似不起眼,但是在自己学习过程中就有发生,在下面的代码调试部分由作出详细的说明,因此为了防止打错字,可以在子类中某个方法前标注@Override
,要求编译程序检查,是否真的重新定义了父类中的某个方法。这部分的练习与结果如下:链接1,链接2,链接3
1.在上面的学习中,Role2中的fight中没有任何程序操作,这时候可以使用
adstract
表示该方法为抽象方法,不用撰写{}区块,直接“;”结束即可。例如
public abstract class Role{ ..... public abstract void fight(); }
2.注意内含抽象方法的类,一定要在class前表示abstract。
3.抽象类不能使用new生成对象。
4.子类继承抽象类方法:1.继续标示该方法为abstract;2.操作抽象方法。
相关练习:链接1,链接2,链接3,运行结果如下图
继承语法细节
protected成员以及重新定义的细节
被声明为
protected
的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取。进行练习,链接1,链接2,链接3,运行结果如下图
JAVA中private、无关键字、protected、public权限依次递增。
在JAVA中如果想取得父类的方法定义,可以在调用方法前,加上super关键字。相关练习链接1,链接2,链接3
程序结果如下图
构造函数
- 父类中可以重载多个构造函数,如果子类构造函数中没有指定执行父类中哪个构造函数,默认会调用父类中无参数构造函数。
- 如果想执行父类中的某个构造函数,可以用super()来指定。
this()
与super()
只能选择一个调用,而且一定要在构造函数第一行执行。- Object上定义的方法,只要不被定义为final方法,都可以重新定义。
- 相关练习及截图:链接1,链接2,结果如下
垃圾收集
对于不再有用的对象,JVM有垃圾收集机制,收集到的垃圾对象所占据的内存空间,会被垃圾收集器释放。
第七章 接口与多态
接口定义行为以及行为的多态
- 对于“定义行为”,在java中可以使用
interface
关键字定义。 - 类要操作接口,必须使用implements关键字。操作某接口时,对接口中定义的方法有两种处理方式,一种是操作接口中定义的方式,另外这一种是再度将方法标示为abstract。
- 为避免在多个种类的时候设计多个重载方法,可以通过统一的接口来设计一个方法。
对于这部分的练习:链接1,链接2,链接3,链接4,链接5,链接6,程序结果如下图
解决需求变化
- 增加新的需求,原有的程序无需修改,只需针对新需求撰写程序,就是有弹性、具可维护性的程序。
- 在java中,类可以操作两个以上的类,也可以同时继承某个类,并操作某些接口。
- 在java中接口可以继承自另一个接口,也就是继承父接口的行为,再在子接口中额外定义行为。进行了书上的练习,链接1,链接2,链接3结果如下图
接口语法细节
接口的默认
在Java中可以使用interface来定义抽象的行为和外观,如接口中的方法可声明为
public abstract
。接口中的方法没有操作时一定得是公开且抽象的。也可以省略
public abstract
。在接口中可以定义常数,但只能定义
public static final
的常数,在程序中可以省略。例如:链接1,链接2,结果如下图
接口可以继承别的接口,也可以同时继承两个以上的接口,同样也是用extends关键字,这代表了继承父接口的行为。
匿名内部类与使用enum枚举
- 临时继承某个类或操作某个接口并建立实例,由于这类子类或接口操作类只使用一次,不需要为这些类定义名称,可以使用匿名内部类。
- enum可以同于定义枚举常量。
教材学习中的问题和解决过程
- 1.教材中在介绍
protected
成员时,定义的toString()
方法中,书上既编写了使用getName()
来取得姓名,也编写了直接用this,name
来取值,那对于protected
成员,是两种都可以吗? - 解决:上机编写两种了程序,发现即使把
getName()
删了,用this.name
也可以取得姓名,相反用getName()
方法也是可以取到值的,比较出了protected
与private
的区别。同时对于getName()
方法,既然是已经声明了的方法那么就对于所有情况都可以使用。 - 2.为什么接口中的常量只能用
public static final
来修饰。 - 解决:通过上网查询,综合自己的理解,得到了如下的答案。首先对于使用public比较好理解,因为定义的接口是为了后来的程序来使用,所以肯定需要将接口里的类和方法用public来修饰;对于static,static修饰就表示它属于类的,随着类的加载而存在的,如果是非static的话,就表示属于对象的,只有建立对象时才有它,而接口是不能建立对象的,所以接口的常量必须定义为static;对于final则是为了保障常量不能被改变,虽然static是静态变量,但还是可以随时改变其值,所以必须要有final来保障常量的值不会被改变。
- 3.在学习使用enum枚举常量时 教材中说到不需要使用default在执行的时候才能检查,那么他是怎么检查的呢?
- 解决:通过编译代码,知道了当定义了美剧常量的时候,如果输入了不合法的常量,那么就会提示出错,无法越界,如下图
- 4.对于教材中关于扮演的内容,书上的例题可以通过现实生活中的常识来判断可不可以通过编译,比如让人阿里扮演鲨鱼之类,但是编程时如果遇到一些抽象的内容,怎么判断能不能编译通过呢?
- 解决:尚未解决。
- 5.在做课后的练习题时,接口前并没有加上
public
或者public abstract
,但可以通过编译,是为什么? - 解决:通过查询,接口默认为public abstract,所以即使不加亦不会出错。
代码调试中的问题和解决过程
1.在重新定义行为的时候,不知道为什么,我在子类中重新定义的fight总是出错,如下图
解决:检查代码,翻阅书籍,发现是父类在写fight方法时签署打错了,在此一定要注意重新定义父类中某个方法的时候,一定要注意子类与父类的签署必须相同,否则就会出错。
2.在再看抽象类部分,书上的代码,对于输入的文本即使我把“\n"去掉,文本之后还是会换行,对于println的重新定义也没用换行,这是为什么呢?代码如下
public abstract class GuessGame {
public void go(){
int number=(int) (Math.random()*10);
int guess;
do{
print("输入数字:");
guess=nextInt();
}while(guess!=number);
print("猜中了");
}
//public void println(String text){
//print(text);
//}
public abstract void print(String text);
public abstract int nextInt();
}
import java.util.Scanner;
public class ConsoleGame extends GuessGame {
private Scanner a=new Scanner(System.in);
@Override
public void print(String text){
System.out.println(text);
}
//@Override
// public void println(String text){
//System.out.println(text);
//}
@Override
public int nextInt(){
return a.nextInt();
}
}
解决:尚未解决。
2.在学习继承父类接口的时候,当我定义了doswim方法时,编译总是不通过,并且还会出现以下提示:
解决:在上网搜索后发现,static修饰的方法称为静态方法,那么根据提示应该就是static修饰的方法出现了问题,检查代码,发现是将定义的内部类写成了public类,导致编译不通过。修改代码,并再次运行,最终得到正确结果。
代码托管
代码提交过程截图:
代码量截图:
上周考试错题总结
- 1.Linux Bash中,(grep )命令可以进行全文搜索。
- 对Linux命令不够熟悉。
- 2.两个Integer对象比较大小,可以使用(comareTo())方法 。
- Integer提供comareTo()方法与另一个Integer比较大小,Integer类中需要重写equals方法,不然仍旧比较的是地址,而不是内容。
- 3.“30”转化为byte类型的30的语句是(Byte.parseByte(“30”);)
- 题目给出的是“30”,而不是30。
其他(感悟、思考等,可选)
首先对于之前的内容,可能还是不够清楚自学的方法,即使觉得看的可以了,考试时候就会惊觉学到的东西好像还是欠缺很多,因此对于重点的掌握还是需要改进。对于第六、第七章的学习,总的来说,任务还是比较繁重的,但一天天的积累,一点点的累积,收获还是颇丰,慢慢的找到了一些自己学习的门路,比如可以借助网络等。希望在日后的学习中可以更透彻的掌握学习java的方法,可以事倍功半,是最好不过的。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 20/20 | 1/4 | 20/20 | |
第二周 | 145/165 | 1/5 | 12/32 | |
第三周 | 411/576 | 1/6 | 16/48 | |
第四周 | 1021/1597 | 1/7 | 25/73 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:25小时
实际学习时间:25小时
改进情况:这周每天都或多或少的敲了些代码,每天分批次学习,同时对上周的内容温习了一下,同时自己也有去设计一些简单的程序,来结合对书本上的内容的学习。
参考资料
20155339 2016-2017-2 《Java程序设计》第4周学习总结的更多相关文章
- 20155306 2016-2017-2 《Java程序设计》第九周学习总结
20155306 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 16.1 JDBC入门 Java语言访问数据库的一种规范,是一套API ...
- 20155305乔磊2016-2017-2《Java程序设计》第九周学习总结
20155305 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC入门 JDBC简介 1.JDBC是java联机数据库的标准规范,它定义了一组标准类与 ...
- 20155331 2016-2017-2 《Java程序设计》第九周学习总结
20155331 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC是什么? JDBC代表Java数据库连接,这对Java编程语言和广泛的数据库之间独立 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
随机推荐
- 1001.A+B Format (20)解题描述
1. 作业链接 2. 解题的思路过程 首先这是道简单的计算题,要求计算a+b的值. 看初值条件,将a和b的取值限制在一个区间内. 本题难点和重点是如何把输出值形成题目要求的格式. 因为负数可通过在前面 ...
- 020.2.5 Calender对象
内容:日历对象获取时间,设置时间,日期偏移 通过工厂化获得对象.getInstance();get() 获取时间信息 Calendar c = Calendar.getInstance(); //获取 ...
- URAL-1039 Anniversary Party---树形DP入门题
题目链接: https://cn.vjudge.net/problem/URAL-1039 题目大意: 开一个party,每个员工都有一个欢乐值,只有是上司和下属不同时存在时才能欢乐,问怎样安排能有最 ...
- BZOJ3224:普通平衡树(Splay)
Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相 ...
- [TJOI2013]攻击装置
题目 癌我竟然会做 发现我们要求的是一个最大独立集问题 发现一个格子和能攻击到的格子的奇偶性和它都不同,于是我们就可以按照\(i+j\)的奇偶性把整张图分成两个部分 两个部分之间没有连边 于是二分图最 ...
- 《metasploit渗透测试魔鬼训练营》学习笔记第四章—web应用渗透
继续来学习metasploit...记好笔记是很重要的,下面开始正文: 二.WEB应用渗透技术 1.WEB应用渗透基础知识 先介绍WEB应用攻击的主要类型(大致介绍,具体请自行查 ...
- selenium + python自动化测试unittest框架学习(三)webdriver元素操作(二)
上一篇是元素的定位,那么定位元素的目的就是对元素进行操作,例如写入文本,点击按钮,拖动等等的操作 (1)简单元素操作 简单元素操作 find_element_by_id("kw") ...
- 洛谷P1832 A+B Problem(再升级)
放题解 题目传送门 放代码 #include<bits/stdc++.h> using namespace std; ];//n为被分解数 a数组用于存储素数 ];//dp数组用于存储方案 ...
- Dubbo实践(六)Spring加载Bean流程
根据上一小节对于spring扩展schema的介绍,大概可以猜到dubbo中相关的内容是如何实现的. 再来回顾Dubbo实践(一)中定义的dubbo-provider.xml: <?xml ve ...
- HDU 1158(非常好的锻炼DP思维的题目,非常经典)
题目链接: acm.hdu.edu.cn/showproblem.php?pid=1158 Employment Planning Time Limit: 2000/1000 MS (Java/Oth ...