Java语言进阶(浙大翁恺学习笔记)
文章平均质量分 50
阿拉马坠德
Java
展开
-
P82:抽象
** P82(抽象): ** P82(抽象):一、什么是抽象?二、抽象函数、抽象类三、实现四、抽象的两种意义 一、什么是抽象? 在类或函数前有:abstract 二、抽象函数、抽象类 只要类里有一个函数是抽象的,那这个类就是抽象的 抽象的函数不能有括号 抽象的类不能产生对象,eg: 三、实现 eg: 想要让红×消失,应该去实现 move 方法: 如果不想实现 move 方法也行,那我们应该,将该子类变为抽象,eg: 四、抽象的两种意义 ...原创 2021-08-13 16:59:37 · 127 阅读 · 0 评论 -
P80-P81:可扩展性、框架加数据、城堡游戏优化码
** P80-P81(可扩展性、框架加数据): ** Game: package castlegamea; import java.util.ArrayList; import java.util.HashMap; import java.util.Scanner; public class Game { //定义变量 private Room currentRoom;//当前房间,默认为null private HashMap<String, Handler> han原创 2021-08-12 17:27:45 · 192 阅读 · 0 评论 -
P78-P79:城堡游戏代码修改:StringBuffer、封装来降低耦合、代码质量、StringBuffer
** P78-P79(城堡游戏代码修改:StringBuffer、封装来降低耦合、代码质量): ** P78-P79(城堡游戏代码修改:StringBuffer、封装来降低耦合、代码质量):一、评判一个好的代码?二、封装来降低耦合耦合是什么?封装是什么?三、城堡游戏代码修改修改:StringBuffer什么是 StringBuffer ?什么时候用 StringBuffer ? 一、评判一个好的代码? 这个代码是否适应于将来的需要 是否适合于扩展 是否有可扩展性(可扩展性:将来有什么新东西要加进来的时候原创 2021-08-10 22:00:54 · 269 阅读 · 0 评论 -
P77:城堡游戏1、null的赋值、in.nextLine、split
** P77(城堡游戏1): ** 前言:城堡游戏是mooc浙江大学面向对象编程第五周的代码,要在翁恺老师的带领下修改这些代码,使代码具有可扩展性。所以在改造代码之前,必须要深入理解代码,才能看懂后面的改造 先上城堡的地图: 要先根据代码画出地图,才能测试改造后的代码是否正确。 理解代码要先从程序的入口main函数开始,一条一条的写上注释: Game类 package castlegamea; import java.util.Scanner; //Game类 public class Game {原创 2021-08-10 12:14:13 · 163 阅读 · 0 评论 -
P76的补充:DoME的新媒体类型、代码质量
** P76的补充(DoME的新媒体类型): ** 可扩展性、可维护性 在现在这种 Database 的架构下,我们要增加一个新的媒体类型,会变得非常容易,只需要增加 item 类的一个新的子类就可以了,对于 Database 来说,它里面的 add函数、list函数等是不需要动的,这种特性被我们称为:可扩展性 可扩展性:你的代码不需要经过修改,就可以扩展去适应新的数据、新的内容 可维护性:你的代码需要经过修改,可以去适应新的数据、新的内容 更深的继承 ...原创 2021-08-08 17:52:50 · 91 阅读 · 0 评论 -
P76:Object 类
** P76( Object 类): ** P76( Object 类):一、Object 类与单根结构二、Objcet类函数我们学习 ==toString()和 equals()函数==toString()函数equals()函数@Override是什么?"equals"和"=="的区别(面试题) 一、Object 类与单根结构 Java 实现了一个单根结构,Java中所有的类,不管你愿意不愿意,不管你声明不声明,这些类一定都是一个叫做 Object 类 的子类 ,这个 Object 是 Java 的原创 2021-08-08 17:27:01 · 95 阅读 · 0 评论 -
P75:多态
** P75(多态): ** 一、什么是多态变量 它有两个类型,一个是它的声明类型,一个是它的动态类型,它的声明类型永远是 Item,而它的动态类型是这次拿到是什么就是什么,可能是 CD 可能是 DVD 当通过点运算符说 item 所管理的对象去做 print()的动作的时候,它会让它所实际管理对象的那个类型去做 print()的动作,这样子的一件事情叫做多态 二、多态的技术基础是什么? 绑定 对于 Java 来说,所有的绑定都是动态绑定 最后一点也是动态绑定,所有的成员函数的调用都应该是看作一种原创 2021-08-07 22:28:36 · 99 阅读 · 0 评论 -
P74:向上造型
** P74(向上造型): ** P74(向上造型):一、什么是造型?造型就是把一个类型的对象赋给另外一个类型的变量,这个过程叫做造型二、类型转换和造型的区别三、什么是向上造型?四、一个小点 一、什么是造型? 造型就是把一个类型的对象赋给另外一个类型的变量,这个过程叫做造型 子类的变量不能去接收父类的对象 最后一点,eg: 二、类型转换和造型的区别 将 10.2 类型转换过后,10.2 就变成了 10,不再是 10.2 了; 而造型是将它当作另外一个类型来看待,但并不会改造成为另外一个类型 三原创 2021-08-07 19:44:41 · 114 阅读 · 0 评论 -
P73:多态变量
** P73(多态变量): ** P73(多态变量):一、为什么子类对象能放进父类容器中?解释:二、多态变量 一、为什么子类对象能放进父类容器中? 解释: 二、多态变量 Java中保存对象类型的变量是多态变量。“多态”这个术语(字面意思是许多形态)是指一个变量可以保存不同类型(即其声明的类型或任何子类型)的对象。 ...原创 2021-08-07 18:14:32 · 118 阅读 · 0 评论 -
P72:子类和父类的关系
** P72(子类和父类的关系): ** 父类的东西都继承给了子类,子类都得到了; 子类当中如果有父类当中有过的,完全一样名字的成员变量,那么在子类中,父类的那个会被隐藏起来;当在子类中提到该变量时,所说的是子类自己的,而在父类中对该变量操作时,所说的是父类的 ...原创 2021-08-06 21:13:03 · 158 阅读 · 0 评论 -
P71:子类继承了什么
** P71(子类继承了什么): ** 父类中是 private 的成员变量在子类中不可用 解决这个问题两个方案: 将 private 改为 protected ,protected 代表同一个包内的其他类可以访问、子类可以访问原创 2021-08-06 11:39:00 · 84 阅读 · 0 评论 -
P70:继承
** P70(继承): ** CD、DVD例子中的代码不良,因为冗余过多、重载过多、重复性的代码过多,CD.Java和DVD.Java太相似,我们是否可以从这两个类里面提取出来东西,去做一个公共的东西,使这个公共的东西可以表达CD或者DVD,然后让Database去管那些公共的东西,而不是管好几个类 extend:扩展,eg:public class CD extends Item 代表CD扩展了Item,之后CD成为了Item的一个子类,这就叫做继承 ...原创 2021-08-05 09:57:23 · 83 阅读 · 0 评论 -
P69:媒体资料库的设计(CD、DVD例子)
** P69(媒体资料库的设计(CD、DVD例子)): ** P69(媒体资料库的设计(CD、DVD例子)):一、如何将一堆成员变量快速初始化起来?二、同一个类里放两个容器 一、如何将一堆成员变量快速初始化起来? 点击蓝色区域之后: 点击生成后: 这里的 super()先暂时不说,此处可有可无。 二、同一个类里放两个容器 该CD、DVD例子的结构: 代码段: package dome; import java.util.ArrayList; public class Database原创 2021-08-04 18:19:54 · 517 阅读 · 0 评论 -
P68:Hash表
** P68(Hash表): ** 一、Hash表 什么是 Hash表? Hash表是一种数据结构,在这种数据结构里面所有的东西是以一对值放进去的,一个叫做key(键),一个叫做value(值),放在 Hash表里的所有东西都是由一个 k 和一个值放进去的,当我们放进去的时候代表的就是这个值对应的就是这个键,当我们取出来的时候,拿出来了那个键所代表的那个值 定义 Hash表的语法 HashMap < K ,V> Hash表名 = new HashMap < K ,V >();原创 2021-08-04 10:25:18 · 263 阅读 · 0 评论 -
P67:集合容器
** P67(集合容器): ** 我们不是只有 ArrayList 这一种容器,我们还有一些别的容器,比如说 Set… P67(集合容器):我们不是只有 ArrayList 这一种容器,我们还有一些别的容器,比如说 Set...一、ArrayList 和 Set 的不同二、Set的特点三、直接输出容器为什么容器可以直接输出呢?原因:public String toString(){ ... }由此可见,ArrayList 和 HashSet 也都一定实现了那个 toString()函数,因此我们才能够输出原创 2021-08-03 22:06:41 · 107 阅读 · 0 评论 -
P66:对象数组的for-each循环、如何设计能传递任意数量参数的函数?
** P66(对象数组的for-each循环、如何设计能传递任意数量参数的函数?): ** 一、 对象数组的for-each循环有点不一样 普通数组的for-each循环中: for(int k:a) { .... } 若对 k 进行一些操作,并不影响数组的值,因为k只是相当于一个复制者,并不是数组本身。 但是for-each循环对于对象数组来说是有些不一样的。 因为,在循环的每一轮,k 可以拿到数组元素所管理的那个对象,然后可以对那个对象做操作 二、容器类也能使用for-each循环原创 2021-08-03 19:58:38 · 198 阅读 · 0 评论 -
P65:对象数组
** P65(对象数组): ** 数组与数组对象 有很多初学者可能会觉得这两个是一样的,以前我也是这么认为的。但是它们是不一样的,虽然他们都是数组。数组只是一个值得集合,而数组对象是一个对象的集合;数组对象的范围更大。 对象数组中的每个元素都是对象的管理者而非对象本身 当数组的元素的类型是类的时候,数组的每一个元素其实只是对象的管理者而不是对象本身。因此,仅仅创建数组并没有创建其中的每一个对象! 对象数组格式 类[] 对象数组名称 = new 类[数组长度]; eg:String[] a原创 2021-08-03 17:10:23 · 90 阅读 · 0 评论 -
P62-P64:记事本的例子、容器
** P62-P64(记事本的例子、容器): ** 记事本 P62-P64(记事本的例子、容器):一、容器类容器类可以存放任意数量的对象二、定义好容器怎么用呢?ArrayList函数一:将元素放入容器ArrayList函数二:将元素插入容器的某个具体位置(其他会自动退后)ArrayList函数三:知道容器里面放了多少东西ArrayList函数四:获取容器中的某个元素ArrayList函数五:删除容器中某个具体位置上的元素ArrayList函数六:将容器中的所有元素赋给数组ArrayList还有许多其他函数原创 2021-08-02 19:41:07 · 161 阅读 · 0 评论 -
P61:类函数
** P61(类函数): ** 类是描述,对象是实体。在类里所描述的成员变量,是位于这个类的每一个对象中的。而如果某个成员有static关键字做修饰,它就不再属于每一个对象,而是属于整个类的了。 通过每个对象都可以访问到这些类变量和类函数,但是也可以通过类的名字来访问它们。类函数由于不属于任何对象,因此也没有办法建立与调用它们的对象的关系,就不能访问任何非static的成员变量和成员函数了。 - static 的函数和变量不属于任何对象,它们属于类 - static 的函数只能去调用 static原创 2021-08-02 17:14:24 · 141 阅读 · 0 评论 -
P60:类变量 static
** P60(类变量): ** P60(类变量):一、类变量static的成员变量叫做类变量通过例子深入理解: 一、类变量 static的成员变量叫做类变量 类变量:它不是成员变量,它是这个类的变量,它不属于任何一个对象,它属于这个类! 任何一个对象都拥有这个变量(类变量),但是,只有那一份,这个变量(类变量)不在每个对象里头 若想访问类变量,有两种方式,通过类或者通过对象,eg: Display.step d1.step 通过例子深入理解: ...原创 2021-08-02 11:07:04 · 66 阅读 · 0 评论 -
P59:包(package)
** P59(包(package)): ** 一、包(package) 包的名字里面可以带有点 如果有了一个包,那么这个包里面的所有的源代码文件的第一行一定都是那个包的名字,eg: 二、import import 后面的写法:包的名字.包里面的class的名字 只要所用到的类,不在一个包里,那么就要 import 它,eg: import display.Display; 代表 display 包里的 Display 类 若用到了不是一个包里的类,还不import,那么应该这么原创 2021-08-01 18:28:29 · 141 阅读 · 0 评论 -
P58:开放的访问属性
** P58(开放的访问属性): ** P58(开放的访问属性):一、publiceg:类前有 public编译单元二、friendly如果我们没有在一个成员前面加上 public 或者 private 的关键字来限定它,那么我们把它叫做:==friendly==friendly 意思是是说,和它位于==同一个包的其他类可以访问== 一、public eg: 类前有 public 若 class 的前面有 public 表明任何人都可以用这个类的定义去定义变量 若 class 的前面有 publi原创 2021-08-01 16:45:13 · 109 阅读 · 0 评论 -
P57:封闭的访问属性
** P57(封闭的访问属性): ** 一、封装 封装:把数据和对数据的操作放在一起。 (所谓封装就是把数据和对这些数据的操作放在一个地方,通过这些操作把这些数据保护起来,别人不能直接接触到这些数据) 二、private private int limit=0; private int value=0; 上面例子中 private 用来表明说这两个成员变量是私有的 private关键字只能用于成员变量和成员函数 private指,private后的东西在这个类中是私有的(私有的意思是说只有在这个类原创 2021-08-01 10:25:49 · 78 阅读 · 0 评论 -
P56:对象的交互
** P56(对象的交互): ** printf:表示带格式的输出,eg:System.out.printf("%02d:%02d\n",hour.getvalue(),minute.getvalue()); %02d:输出一个占据两个字符位置的整数 我们理想的模型,是对象和对象之间的耦合要尽可能的松,平行的对象要尽量减少直接联系,让更高层次的对象来提供通信服务。这些就是在我们这个非常简单的数字钟的例子中所体现的。 P51、P56都需要看视频来建立思维(点击) ...原创 2021-07-31 21:59:34 · 68 阅读 · 0 评论 -
P51:对象的识别
** P51(对象的识别): ** 面向对象程序设计的第一步,就是在问题领域中识别出有效的对象,然后从识别出的对象中抽象出类来。 往往存在多种对象划分的方式,而不同的划分会带来类的设计以至于程序结构的各种不同。 举了一个数字钟的例子,希望通过这个例子表明对象划分的重要性,给你一个感性认识。 这一章节需要看视频(点击) ...原创 2021-07-31 20:41:09 · 219 阅读 · 0 评论 -
P55:对象初始化
** P55(对象初始化): ** P55(对象初始化):一、关于类中成员变量的初始化问题二、构造函数(函数名和类的名字完全相同)三、函数重载(同名不同参的构造函数) 一、关于类中成员变量的初始化问题 我们知道对一个程序的安全性来说,初始化很重要,比如对于本地变量来说,Java或者ecplise会有一个强制性,如果变量未被初始化过,那么这个变量禁止被使用,编译时通不过的,但是对于类里面的成员变量,Java会保证先去给它们一个初始值:0 二、构造函数(函数名和类的名字完全相同) 构造函数:在构造的时候原创 2021-07-30 19:48:18 · 89 阅读 · 0 评论 -
P54:成员变量与成员函数
** P54(成员变量与成员函数): ** P54(成员变量与成员函数):一、成员变量二、this三、成员函数四、本地变量和成员变量的关系 一、成员变量 二、this 在任何一个成员函数里面,总是可以用this来表达这一次调用函数的那个对象。 三、成员函数 四、本地变量和成员变量的关系 本地变量定义在函数内部;成员变量定义在函数外部 Java中不关心什么时候消失,它有自动垃圾回收机制,若某个对象一直不被关心则会自动消失,我们只需要知道将它new出来就有了 ...原创 2021-07-30 19:01:05 · 110 阅读 · 0 评论 -
P53:定义类
** P53(定义类): ** 这个课时我们来学习如何自己定义类。一个类由两种东西组成:表示对象有什么的成员变量和表示对象能做什么的成员函数。 一旦定义了类,我们就可以创建这个类的多个对象,这些对象都会做那个类所定义的动作(函数),但是各自具有不同的数据。 就定义类的语法而言没什么的。 ...原创 2021-07-30 18:21:16 · 88 阅读 · 0 评论 -
P52:用类制造对象
** P52(用类制造对象): ** 一、用类制造对象 类与对象的关系: 类去定义了对象,而每一个具体的对象都是那个类的一个实体 举例: 设计了Circle的类出来,然后用它制造了两个Circle的对象 二、对象 封装:把数据和对数据的操作放在一起,然后由这些操作去保护内部的数据,数据是不对外公开的 三、面向对象的特性 ...原创 2021-07-30 09:35:30 · 111 阅读 · 0 评论