教材学习内容总结

封装、继承、多态

封装:封装类私有数据,让用户无法直接存取。
继承:

定义:避免多个类间重复定义共同行为,就是相同的代码提升为父类,java中只能继承一个父类。用继承的方式编写代码可以提高代码的弹性。

关键字extends:j继承父类的行为并扩充原本没有的行为。

语法细节:protected:用protected定义的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类中直接存取。

java中所有对象一定“是一种”object。如果定义类没有使用extends关键字指定继承任何类,那么一定是继承java.lang.Object。

权限(由小到大):private ->无关键字 ->protected ->public。

多态:

is-a:子类与父类之间是is-a(是一种)关系,编写代码时可以使用is-a检查语法的逻辑是否正确:从=右边往左读,看右边是不是左边的子类。当右边不是左边的子类的时候,程序编译错误,也可能存在检查为右边可能是左边子类的不确定的结果,这时可以执行(Cast)叫程序住嘴语法,错误时抛出ClassCastException.

多态:单一接口操作多种类型的对象。

关系:

封装私有数据使用户不能直接存取,程序代码的相同代码可以定义在父类中,子类可以继承使用,一个父类中的同一个操作接口可能有多个子类使用,子类中的操作内容可以待到父类中调用,同一操作接口操作多个操作内容,称为多态。

重新定义

定义:

在继承父类之后,定义与父类中相同的部署,但是执行的内容不同,操作接口相同,只是方法操作内容不同。

super:

想取得父类中的方法定义,可以在调用方法前,加上super关键字,使用它调用的父类方法不能定义为private。

  • 注意:重新定义对于父类中的方法权限,只能扩大不能缩小,并且其他部分必须与父类中方法签署完全一致。

抽象类与接口

抽象类

1.方法区块中没有任何程序代码操作,使用abstract标示该方法为抽象方法,,类中若有方法没有操作,并且标示为abstract,表示类定义不完整,称为抽象类。

2.java中可以使用interface来定义抽象的行为和外观。

3.子类继承抽象类的两种做法:继续标示该方法或者操作抽象方法。

4.为了工作的合理和编写的方便,写程序是可以先创建实例,然后执行go()方法过程中调用抽象方法。

接口

1.implements关键字:类要操作接口,必须使用implements关键字。

  1. 接口定义方法:操作接口定义的方法或者将该方法标示为abstract.

3.类可以操作两个以上的接口。

4.语法细节:接口的方法没有操作时,一定得是公开且抽象,为方便可省略public abstract.

final关键字

  1. 定义:限定不想再改变的指定变量值,如果被声明的final没有明确用=指定值,表示延迟对象成员指定。

2.class前用final关键字定义,表示这个类是最后一个了,不再有子类也不能被继承。

equals()

1.equals()方法是Object类有定义的方法,程序代码:

    `public boolean equals(Object obj){

     return (this==obj);
}`

2.instanceof运算符:判断对象是否由某个类创建,左操作数是对象,右操作数十类。

enum枚举常数

enum可用于定义枚举常数。enum定义了特殊类,继承自java.lang.Enum,由编译程序处理,直接撰写会被拒绝。

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

问题一:

重新定义的意义是什么,既然在父类中定义了操作接口,还需要在子类中定义操作内容,也就是说父类中不定义操作接口,子类中直接定义也可以执行,那么为什么还要在父类中定义呢,这不是与代码实行继承的初衷违背了吗?

解决:没有什么比较清楚的解释,大致书上的意思可能只是说可以把它提上去,没说必须把它提上去。

问题二:

在编译教材P187页Inheritance ConsoleGame.java时因为误把return scanner.nextInt();写成了return Scanner.nextInt();导致编译错误,但是之前说加上@override就不用担心打错字的问题,这是为什么呢?

解释:大致应该跟偷懒是一种,他只是对比之前能读懂那种常见的书写错误,但scanner是关键字,大小写区分不考虑为打错字的范围。

问题三:

编译错误和执行错误到底是什么区别,怎么判断,弄不清。

解决:编译错误差不多就是语法不对,比如你写String str='str'编译就会出错。运行错误是指语法没问题,当时逻辑错误,比如一个方法传进一个String类型的变量str,方法体中有类似于str.equals("str");的语句,但是传进的是一个null,那么这一句就相当于null.equals("str");这肯定会抛空指针异常。

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

1.

错误:java:找不到符号

类型:SwordsMan()

错误:package jdy.cls

解决:上周的问题又犯了,对文件进行了打包,把编译生成的文件和.java文件分类存放了,使得程序调用时找不到相应的文件。

2.
  	`public class MultiChat {
public static void main(String[] args) {
Client c1=new Client ("127.0.0.1","Caterpillar");
Client c2=new Client ("193.168.0.2","Justin"); ClientQueue queue=new ClientQueue();
queue.addClientListener(new ClientListener(){
@Override
public void clientAdded(ClientEvent event){
System.out.printf("%s 从 %s 联机%n",
event.getName(),event.getIp());
}
@Override
public void clientRemoved(ClientEvent event){
System.out.printf("%s 从 %s 脱机%n",
event.getName(),event.getIp());
}
});
queue.add(c1);
queue.add(c2);
queue.remove(c1);
queue.remove(c2);
}
}

`

错误:(10, 14) java: 找不到符号

符号: 方法 addClientListener(<匿名ClientListener>)

位置: 类型为ClientQueue的变量 queue

解决:还是大小写啊

3.
import java.util.Scanner;
public class ConsoleGame extends GuessGame {
private Scanner scanner=new Scanner (System.in); @Override
public void print(String text){
System.out.print(text);
}
@Override
public void println(String text){
System.out.println(text);
}
@Override
public int nextInt() {
return Scanner.nextInt();
}
}
错误:java: 无法从静态上下文中引用非静态 方法 nextInt()
解决:把return canner.nextInt();改成return sScanner.nextInt(); Scanner是一种方法,对输入的数扫描的动作,而scanner是对输出的数显示。

本周代码托管截图





学习感悟

之前一直就觉得java是一门理论学习可,但是现在越来越感觉到这是一门语言,就像和韩国人讲韩语一样,我们也是通过java语言和计算机进行交流,把自己的思想通过代码告诉计算机,计算机也会像人一样工作,掌握好java语言,可以让我们的思想得以具体实现。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 50/50 2/2 20/20 实现“HelloWorld”
第二周 100/150 2/4 20/20 学会用IDEA编写代码
第三周 100/250 2/6 20/20 掌握更多的语法知识
第四周 150/400 2/8 20/20 学会用Git托管代码

参考资料

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

20145329《Java程序设计》第四周学习总结的更多相关文章

  1. Java程序设计第四周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 答:①String类是final类,不能定义String的子类. ② instanceof ...

  2. 杨其菊201771010134《面向对象程序设计(java)》第四周学习总结

    <面向对象程序设计(java)> 第四周学习总结 第一部分:理论知识 1.类与对象 a.类(class)是构造对象的模板或蓝图.由类构造对象的过程称为创建类的实例: java中类声明的格式 ...

  3. 对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈

    对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈 “这部分同学博文总结没有写,实验作业没有提交.”——1.关于博文作业.实验作业教学功能的正解:学习知识.暴露问题.衔接课上.2 ...

  4. 201871010106-丁宣元 《面向对象程序设计(java)》第四周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第四周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-da ...

  5. 20155318 2016-2017-2 《Java程序设计》第九学习总结

    20155318 2016-2017-2 <Java程序设计>第九学习总结 教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛型 ...

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

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

  7. 20145304 刘钦令 Java程序设计第二周学习总结

    20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...

  8. 20145304 刘钦令 Java程序设计第一周学习总结

    20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...

  9. 20145120黄玄曦 《java程序设计》 寒假学习总结

    1和2.我对未来规划不多,我认为好好学习积累知识能帮助我应对未来的挑战,这是我的学习动力之一,此外,了解新知识满足好奇心也是我的主要的学习动力. 3.我认为专业课学习比公务员考试重要,我认为专业知识是 ...

  10. 201621123007 Java程序设计第一周 学习总结

    第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...

随机推荐

  1. js 正则 exec() 和 match() 数据抽取

    js 的正则表达式平常用的不多,但以前抽取数据的时候用到过,主要是有这样的需求: var text='<td class="data">2014-4-4</td& ...

  2. Bootstrap初学基础总结

    Bootstrap 1>.Web UI 框架 可以帮助菜鸟程序员 ,迅速简便的搭建起专业级界面效果 2>如何快速掌握利用框架 1.框架的整合和搭建,让框架能够正常跑起来 2.通过复制粘贴文 ...

  3. vsftp or pureftpd

    一.安装pureftpd //这个软件比vsftp配置起来更加灵活和安全. /*官网是 http://www.pureftpd.org/project/pure-ftpd*/ [root@localh ...

  4. Ubuntu安装atom

    sudo add-apt-repository ppa:webupd8team/atom sudo apt-get update sudo apt-get install atom 安装的时如果报错, ...

  5. vscode中设置自动保存

  6. kibana5.6 源码分析以--环境搭建&技术准备

    Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的.你可以用kibana搜索.查看.交互存放在Elasticsearch索引里的数据,使用各种不同的图表.表格 ...

  7. Django内置form表单和ajax制作注册页面

    settings.py import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_D ...

  8. SQL事务回滚 写法(转)

    以下是SQL 回滚的语句:方案一:SET   XACT_ABORT   ON--如果产生错误自动回滚GOBEGIN   TRANINSERT   INTO   A   VALUES   (4)INSE ...

  9. 详解C++中命名空间的意义和用法

    看过鸡啄米的C++编程入门系列教程的朋友,应该能注意到,在其中的很多实例中,都有这么一条语句:using namespace std;,即使用命名空间std,其作用就是规定该文件中使用的标准库函数都是 ...

  10. 缓存系统MemCached的Java客户端优化历程

    Memcached 是什么? Memcached是一种集中式Cache,支持分布式横向扩展.这里需要解释说明一下,很多开发者觉得Memcached是一种分布式缓存系统,但是其实Memcached服务端 ...