![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java知识点精析
文章平均质量分 55
无数碎片寻你
相同的回忆,错位的时空,隔空的爱恋,散落的碎片(bilibil无数碎片寻你)
展开
-
6.1 抽象
如果一个类有了一个抽象的方法,这个类就必须声明为抽象类。如果父类是抽象类,那么子类必须覆盖所有在父类中的抽象方法,否则子类也成为一个抽象类。一个抽象类可以没有任何抽象方法,所有的方法都有方法体,但是整个类是抽象的。Shape类表达的是一种概念,一种共同属性的抽象集合,我们并不希望任何Shape类的对象会被创建出来。抽象的方法是不完全的,它只是一个方法签名而完全没有方法体。这个类有很多的子类,每一个子类也实现了父类的方法。●抽象类------------表达概念而无法构造出实体的类。...原创 2022-07-24 09:45:23 · 304 阅读 · 2 评论 -
5.5 框架加数据
所以这是一种思路,把程序的硬编码,尽可能的分解成框架和数据的结构,框架规定说,我们有一个HashMap,我们有这几个接口函数,数据就是我们放在HashMap里面的东西.我们之前刚开始城堡游戏做的是硬编码,就是把方向什么都当作Room的成员变量,然后调用,后来我们利用HashMap函数,将方向和房间联系起来,这样我们就可以随意的增加不同的方向,我们现在要的是,实现Game里面的goRoom成员函数的功能,如果这里game是指针的话,这种方法是可以的,我们需要拿到的是game的对象。..............原创 2022-07-23 15:55:44 · 360 阅读 · 0 评论 -
5.4.1 可拓展性实例
当然Room里面的成员函数内部虽然改变了,但是成员函数的名字没变,返回的参数也没变,所以Game调用Room,不受影响,唯一受影响的就是,我们改变了方向和房间的关系,所以在Game里创建对象,对对象进行关系赋值的时候会受影响,我们采用的是方向键值和那个方向的房间进行的匹配关系。因为,我们封装之前是Room的细节是直接曝光给Game的,Game是直接访问Room的四个成员变量来掌握方向的出口,现在我们把Room的变量都做成私有了,提供了两个接口,一个接口给出了文字描述,一个接口是返回一个指定方向的那个房间。.原创 2022-07-22 23:24:14 · 200 阅读 · 2 评论 -
5.4 可拓展性
按钮和图像,也是很有意思的一个种拓展。还是可能保留着命令字,还是会在玩家输入帮助命令的时候显示命令字帮助文本,但是可能是显示。我们已经实现的设计与其原始版本比较已经有了很大的改进,然而还可以有进一步的提高。优秀的软件设计者的一个是素质就是有可预见性。什么是可能会改变的?在游戏的很多类中,硬编码进去的一个假设是,这个游戏会是一个基于字符界面的游戏,在窗口的文字域中,而不是使用System.out.println?可拓展性的意思就是代码的某些部分不需要经过修改就能适应将来可能的变化。软件的生命期内不会改变的?.原创 2022-07-22 21:35:22 · 561 阅读 · 0 评论 -
5.3.1 封装
然后Game类,privatevoidgoRoom(){}这个传入方向,出房间的成员函数就变了,它直接调用Room里面的成员函数,就可以得出下一个方向房间的信息了。我们在Room里面创建一个成员变量,根据传入的方向参数Stringdirection,再调用自己的成员变量,返回给Game对应方向的房间。传入方向Stringdirection,判断赋值下一个房间的时候,我们也重复调用了Room的成员变量,有一个问题就是,Room里面的成员变量,我们说非不得已,不用Public,然而我们用了之后,...原创 2022-07-22 16:53:10 · 340 阅读 · 0 评论 -
5.3 聚合和耦合
聚合与程序中一个单独的单元所承担的任务数量和种类有关,它是针对类或方法这样大小的程序单元而言的理想情况下,一个代码单元应该负责一个聚合任务(也就是说,一个任务可以被看做是一个逻辑单元。遵循这个理论的一个额外的好处是,当程序某部分的代码需要改变时,在某个代码单元还可能会找到所有需要改变的代码。耦合这个词指的是类和类之间的联系,之前的章节中提到过,程序设计的目标是一系列通过定义明确的接口通信来协同工作的类。要评判某些设计比其他的设计优秀,就得定义一些在类的设计中重要的术语,以用来讨论设计的优劣。...原创 2022-07-22 15:33:52 · 404 阅读 · 0 评论 -
5.2 消除代码复制
代码复制存在的问题是,如果需要修改一个副本,那么就必须同时修改所有其他的副本,否则就存在不一致的问题。很可能发生的一种情况是,维护程序员看到一个副本被修改好了,就以为所有要修改的地方都已经改好了。然后在,privatevoidgoRoom(Stringdirection)和privatevoidprintWelcome()展示目前在的位置的时候,调用一下,showPrompt();我们从消除代码复制开始。我们在创建城堡游戏的时候,就有一个非常严重的问题,就是代码复制,...原创 2022-07-22 15:06:42 · 539 阅读 · 0 评论 -
5.1 城堡游戏
currentRoom已经定义初始化了,那出口就需要判断一下了,我们在Room的成员函数里,可以把房间的四周的地名已经输入进去进行判断了,有门就可以了,无门就是null,当然,这些还是不够的,我们需要的就是,要能够知道房间的东西南北到底是那个地方,分别标出,当我们输入对应方向的时候,对应判断,位置赋值,进而输出位移后的位置。第三步刚开始,输入提示信息,肯定需要知道目前在那个地方,所以我们要定义初始化,把地方都定义一遍,然后初始地方currentRoom也定义一下。对应北,东,南,西。......原创 2022-07-22 14:42:30 · 1120 阅读 · 0 评论 -
4.1.2
首先我们CD和DVD类表明了extends了Item类,但是这样说有点牵强,回过来看Database对item的全部认识如何,它认为item应该有一个print函数,因为这是在Database唯一用到Item的东西,然后在Item里面说,是有print的,现在在CD里面也是有print(),对于。debug一下,new创建对象的时候,会先去Item父类里面初始化对象,然后去调用函数的时候,直接跳转到Item的print()函数,这说明什么,说明CD天然得到了Item里面的函数。(子类从父类得到了什么?...原创 2022-07-20 23:12:55 · 156 阅读 · 0 评论 -
4.2 子类父类关系
比缺省的访问属性要宽一些。而对于父类的缺省的未定义访问属性的成员来说,他们说在父类所在的包内可见,如果子类不属于父类的包,那么在子类里面,这些缺省属性的成员和private的成员是一样的不可见。在构造一个子类对象时,父类的构造方法也是会被调用的,而且父类的构造方法在子类的构造方法之前被调用。所有东西,所有的父类的成员,包括变量的方法,都成为了子类的成员,除了构造方法.构造方法是父类所独有的,因为它们的名字就是类的名字,所以父类的构造方法在子类中不存在.除此之外,子类继承得到父类的所有成员....原创 2022-07-20 22:19:30 · 393 阅读 · 0 评论 -
4.1 继承----媒体资料库的设计
然后就可以了,对于输出容器里面的对象的话,是我们在调用成员函数的所完成的,修改的话,就是在DVD和CD类的成员函数里面修改,调用的话就是在Database里面,创建成员函数,然后利用for-each循环,将容器里面的值依次赋予自定义变量。此时,我们想把创建的DVD对象传入到容器里面,但是new一个DVD的时候,需要对DVD对象的成员变量赋值,但是DVD成员变量都是private,所以需要调用DVD里面的构造函数,来创建构造器完成初始化,//DVD类型的引用类型,可以直接调用自己的属性。......原创 2022-07-20 17:45:04 · 380 阅读 · 1 评论 -
第四章 继承和多态
在继承中,新的类不是凭空产生的,而是基于一个已经存在的类而定义出来的。通过继承,新的类自动获得了基础类中所有的成员,包括成员变量和方法,包括各种访问属性的成员,无论是public还是private。如果我们用程序设计的语言来描述这个鸡和鸵鸟的关系问题,首先有一个类叫做“鸟”,它具有一些成员变量和方法,从而阐述了鸟所应该具有的特征和行为。无论是从“鸟”那里继承来的变量和方法,还是它自己加上的,都是它的变量和方法。鸟的一个子类,比如鸡,具有鸟的所有的特性,同时又有它自己的特性,比如飞不太高等等;...原创 2022-07-19 15:56:47 · 67 阅读 · 0 评论 -
3.5 设计学生成绩的数据结构
如果我们希望通过学生的姓名,可以找到他的所有成绩,而每一门课的成绩,是由课程名称和分数构成的。如果要写程序表达一个班级的很多个学生的很多门课的成绩,应该如何表达这些数据?而如果我们还希望这个程序能找出某一门课的全部学生的成绩应该怎么做呢?注意,并非所有的学生都参加了所有的课程。...原创 2022-07-19 15:46:54 · 403 阅读 · 0 评论 -
3.4 散列表(Hash)
这个键值类型是Interger,是int的包裹类型,这时一个面向对象的程序,在这个容器里面,所有的东西必须是对象,而不能基本元素。当然我们可以用Switch,但是太啰嗦了,我们能不能实现,今天有1,对应one,明天有8对应eight。Hash表是非常有用的数据结构,熟悉它,充分使用它,往往能起到事半功倍的效果。我们放进去两个参数,第一个代表“键”,第二个代表元素,一个键对应一个值。我们可能有一种需求,输入一个数字,然后给出对应的英文。对应地址,放对应元素,不是很漂亮。.........原创 2022-07-18 22:17:40 · 152 阅读 · 1 评论 -
3.3 集合容器
注意这里传入的参数,是在类里面定义过的,通过this来修改的,这个publicStringtoString只是会让我们调用对象名字的时候,同时调用这个函数,进而返回值。在我们对象创建完之后,他们会主动调用这个toString函数,让这个函数产生的String来把他输出。前面我们说了,对象数组创建以后里面没有对象,只有管理者,所有不能直接便利输出。我们可以自己在成员函数里面创建一个数组,利用for循环来将数组赋值然后输出。集合就是数学中的集合的概念所有的元素都具有唯一的值,元素在其中没有顺序。......原创 2022-07-18 21:29:32 · 81 阅读 · 0 评论 -
3.2 对象数组
当数组的元素类型是类的时候,数组的每一个元素其实只是对象的管理者而不是对象本身。因此,仅仅创建数组并没有创建其中的每一个对象。String[10]字符串数组,10个位置指向存储字符的位置,字符串数组存储的是对象的管理者。我们这里每对一个对象数组元素赋值,实际上是新创建了一个对象,那对象数组就是数组的管理者,而非对象本身。上面说了普通数组和普通数组,下面我们讨论一下,如何遍历对象数组呢?并没有对他赋值s指的是另一个对象,它只是对象的管理者。这就是对象数组和普通数组所不同的地方。......原创 2022-07-18 18:28:54 · 124 阅读 · 0 评论 -
3.1.1 记事本的例子
当我们用add函数把对象放进容器中去的时候,究竟是把什么放进了容器?如果修改了放进去的那个对象,容器中的对象会变化吗?答案容器里元素的类型是对象,对象是引用类型,那存放在容器里的内容相当于对象的变量,也就是对象的管理者。我们调试的时候会发现,东西是有顺序的,ArrayList这个容器泛型,会按顺序把输入进去的值。如果我们想把元素插入到特定位置上,同样有办法(如果原来那个位置上有元素,会被推到后面的坐标)把业务逻辑和数据分开,我们现在只考虑,数据传入了,我们应该怎样处理,至于如何传入的,...原创 2022-07-18 17:28:10 · 108 阅读 · 1 评论 -
3.1 容器
所谓容器,就是“放东西的东西”。数组可以看作一种容器,但是数组的元素个数一旦确定就无法改变,这在实际使用中是很大不足的。一般意义上的容器,是指具有自动增长容量能力的存放数据的一种数据结构。所以才有“放东西的东西”这个说法。java具有丰富的容器,java容器具有丰富的功能和良好的性能。熟悉并能充分有效地利用好容器,是现代程序设计的基本能力。我们首先学习的是顺序容器,即放进容器中的对象是按照指定的顺序(放的顺序)排列起来的,而且允许具有相同值的多个对象存在。容器是现代程序设计非常基础而重要的手段。...原创 2022-07-18 16:14:27 · 323 阅读 · 0 评论 -
2.4.2 类函数
static成员的创建和对象的创建是没有关系的,放心创建对象,对象new的时候,不会对static的成员变量进行初始化的,static只会在类装载的时候被初始化一次。是主函数的入口,static表明这个函数是属于这个类,并不隶属于那个对象,不会被对象所调用。不能访问value,静态函数只能访问静态成员变量,value是不可取的。这样是可以不用对象调用,因为他们同属于这个类。还是访问的这个类的静态函数。......原创 2022-07-18 14:34:13 · 53 阅读 · 0 评论 -
2.4类变量
意思就是,非static成员函数和成员变量可以通过对象建立它们之间的关系,但是一旦加了static,它们就属于这个类,不能再和个别对象建立单独联系,函数属于这个类,只能访问static的成员变量和成员函数。static成员变量,一旦被修改,在这个类中,所有对象的这个static成员变量也会相应的改变,原因是static成员变量属于整个类,而不是属于单独的某个对象,当然对象也可以通过对象名加变量名去访问到这个变量。在类里所描述的成员变量,是位于这个类的每一个对象中的。...原创 2022-07-18 14:17:04 · 47 阅读 · 0 评论 -
2.3 包
当你的程序越来越大的时候,你就会需要有一个机制帮助你管理一个工程众多的类了。包就是Java的类库管理机制,它借助文件系统的目录来管理类库,一个包就是一个目录,一个包内的所有类必须放在一个目录下,那个目录的名字必须是包的名字。包的名字里面的那个点,实际上表达的就是文件系统里面,文件夹的层次,每一个点代表一个文件夹层次,java通过这样的手段来管理所有类,把这些类起上全名,分门别类的放在各种包里面,形成一个有效的包的管理机制,管理机制叫做包。当然,包都是用文件夹来分隔的,当你想用另一个包里的类的时候,.....原创 2022-07-18 12:14:17 · 80 阅读 · 0 评论 -
2.2.2开放的访问属性
●在一个编译单元里面可以有很多java类,但是只有一个类可以是public,这个类如果没有public,意味着这个类只能在这个包里面起作用。意思是,访问属性是“friendly”,和它位于同一个包里的其他类可以访问。●并且要求它必须处于编译单元文件里面,编译单元的文件名必须和这个类的名字相同。●编译单元的名字必须与publicclass类的名字相同。●任何人指的是在任何类的函数或定义初始化中可以使用。●表明任何人都可以用这个类的定义来定义变量,●使用指的是调用、访问或定义变量。......原创 2022-07-18 11:37:59 · 83 阅读 · 0 评论 -
2.2.1封闭的访问属性
按照常理说,定义所有成员变量的时候,都应该是私有的,除非你有非常合理的理由,只有让成员变量是私有的,才能保护这些变量不被外界随意的使用,才能够让这些变量,按照类的设计者自己的意图去发生改变,去被使用,因为我们定义的服务都是在类的内部,外部调用的时候只是传入了参数数值,而没有对成员变量的初始值进行干扰,在一定程度上保护了类操作的安全。2、所有public的函数,只是用来实现这个类的对象或类自己要提供的服务的,而不是用来直接访问数据的。表明,这个成员变量或函数是这个类私有的,●这个限制是对类而不是对对象的。..原创 2022-07-17 22:27:36 · 100 阅读 · 0 评论 -
2.1对象交互
我们理想中的模型,可不是拖泥带水的,是对象和对象之间的耦合要尽可能的松,平行的对象要尽量减少直接联系,让更高层次的对象来提供通信服务。那么下一个问题,就是当一个对象里面有多个对象的时候,那些对象之间是如何交互的,对象和对象之间的联系是如何建立的,对象如何和其他对象交流。如果不是面向对象,很容易,来一个if循环就可以了,但是当我们用到面向对象的时候,需要考虑,我们需要两个显示器,一个表达分钟,一个表达小时,两个对象之间形成一种交互,在今后面对实际问题领域时,可以试试用这里提到的概念来做对象的划分和类的设计。.原创 2022-07-17 16:35:40 · 323 阅读 · 1 评论 -
1.4 对象初始化
这个构造函数可以在我们创建对象的时候,传入参数,new对成员变量初始完之后,会调用这个构造函数,并且传入参数从而对成员变量赋值。对于没有初始值的成员变量,我们在new一个对象的时候,会遍历成员变量,没有初始值的会赋值0或null,null表示没有。如果有一个成员函数的名字和类的名字完全相同,则在创建这个类的每一个对象的时候会自动调用这个函数-------->构造函数。变量的初始化是程序安全很重要的一环,一旦创建了一个对象,有什么手段可以保证其中的每一个成员变量都有确定的初始值呢?......原创 2022-07-17 15:29:39 · 157 阅读 · 0 评论 -
1.3成员变量和成员函数
此时的this.balance就是代表调用这个函数的那个对象的成员函数,说白了就是哪个咸鸭蛋调用了这个价格,那this.balance就是谁的咸鸭蛋,至于把balance就是类的成员函数的值。所谓变量就是会变的量,我们虽然在咸鸭蛋这个类里面定了咸鸭蛋应该有的属性,但是不同的咸鸭蛋属性的数据不一样,例如大小,价格,口味等,所以这个“变”指的就是我们创建一个对象之后传入的数据不一样罢了,所以变的那个量不在类里,而是在创建的每一个对象里。就是谁调用,这个值给谁。怎样才能保证如此呢?......原创 2022-07-17 12:10:39 · 225 阅读 · 0 评论 -
java知识点精讲----1.2 定义类
说白了,就是我们要创建一个对象,就需要知道他的属性,那就要把这一类东西定义一下,然后这一类东西应该有的东西全部定义一遍,这一类东西所能进行什么操作,就用函数定义,至于具体的数据,等到我们要创建一个具体对象,进行调用类的时候进行传递。不同的咸鸭蛋有共同的属性,但是属性的数据互不干扰。一旦定义了类,我们就可以创建这个类的多个对象,这些对象都会做那个类所定义的动作(函数),但是各自具有不同的数据。我们自己定义一个函数操作名,后面跟着要传入的参数,这个参数就是我们刚开始定义的属性,然后我们就可以进行相应的操作。..原创 2022-07-17 10:30:27 · 90 阅读 · 0 评论 -
JAVA 面向对象程序设计----知识精析1.1-----类与对象
尤其重要的是我们理解了对象变量和普通变量的不同,对象变量是对象的管理者而非所有者,所以涉及到赋值、函数参数传递和比较都与普通变量有所不同。数据是函数操作进行包裹的,我们在类中定义的类型,其实就是鸭蛋可能有的属性,至于调用对象传入的参数就是属性的定义。对象名就是我们创建的对象,要调用的函数名就是我们用那个类创建的函数操作,括号里面可以填函数需要的参数。如果没要传参数的话,那么我们就根据类的定义的属性,和类的函数操作,进行初始化定义。就像一个咸鸭蛋一个,咸鸭蛋有大有小,首先我们要一个现实存在的咸鸭蛋,.....原创 2022-07-17 09:58:41 · 304 阅读 · 0 评论