@(《Java编程思想(第四版)》第一二章小结)编程
第一篇博客发布,渴望作好 Java后端开发 ,但愿你们能够多多指教!后端
人解决问题的复杂性取决于抽象的类型和质量。
(1)汇编语言 是对 底层机器 的轻微抽象。
(2)C 等语言是对 汇编语言 的抽象。
以上语言的所作的抽象在解决问题时,要基于计算机的结构(移植性很差,维护成本较高)。
(3)Java 是针对解问题建模,以虚拟机做为中间层,方便移植,跨平台性极好。安全
(1)万物皆为对象。
(2)程序是对象的集合,他们经过发送消息来告诉彼此想要作的。
(3)每一个对象都有本身的由其余对象所构成的存储(全部的类都有同一个基类)。
(4)每一个对象都有类。(每一个对象都是某个类的一个实例)
(5)某一特定类型的全部对象均可以接受一样的消息(例:后面一个"圆形"类型的对象可以接受全部发送给"几何型"对象的消息)网络
将对象看作服务,有助于提升对象的内聚性。(问题通常将过多的功能集中在一个对象中。)高内聚即将对象各个功能" 组合 "的很好。良好的面向对象的设计中,每一个对象很好的完成一项任务,但不去作更多的事情。
(1)第一个对象提供支票排版的目录的服务
(2)第二个对象是通用的打印接口(打印服务)
(3)第三个对象调用另外两个对象的服务完成最终的打印并发
(1)public后面的元素对任何对象都是可用的。
(2)private除类型建立者和类型的内部方法以外任何人都不能访问。
(3)protected与private的做用至关,差异在于继承的类能够访问protected成员,可是不能访问private成员。函数
类能够访问同一个包(库构件)中的其余类的成员,包以外这些成员至关于指定了private。学习
(1)组合:利用现有的类合成新类(若是组合是动态发生的,组合被称为聚合)
新类的成员对象常被声明为private,不干扰客户端代码的状况下,在运行时修改这些成员对象,来动态修改程序。
(2)继承:源类(基类、超类或父类)发生变更后,被修改的副本(导出类、继承类或子类)
(例:几何形——圆形、正方形、三角形(每种都具备额外的特性和行为))
思考---
1°:导出类+新方法——基类需不须要此方法
2°:导出类可以使用与基类同名的方法来覆盖基类中同名的方法(即便用相同的接口方法,在新类中作些不一样的事情)
3°:前期绑定:非面向对象的编译器产生的函数调用会引发所谓的前期绑定,编译器产生一个具体函数名字的调用,而运行时将这个调用解析到被执行的代码的绝对地址。
4°:后期绑定:面向对象编程时,程序直到运行时才能肯定代码的地址,故采用后期绑定。设计
编译器编译doSomething()的代码时,不肯定doSomething()的确切类型。若是指望它的编译结果是调用基类Shape的erase()和draw()版本,而不是具体的Circle、Square或Line的相应版本。多态使得事情老是正确被处理。
1.定义:多态—不一样类的对象对同一消息作出响应,同一消息根据对象的不一样采用不一样的行为方式。
2.实现方式:经过动态绑定实现多态,执行期间根据对象的实际类型,调用其相应的方法。
3.条件:
(1)继承
(2)覆盖(方法重写)
(3)父类引用指向子类对象3d
容器的基本理解:不知道解决某个特定问题须要多少个对象,或者他们将存活多久,就不知道如何存储这些对象,去找容器。被称为容器的新对象,在任什么时候候均可以扩充本身来容纳要置于其中的全部东西。所以不须要知道未来有多少对象置于容器中,只要本身建立一个容器对象,而后让它处理全部细节。
容器 存储Java中的通用类型:Object。单根继承结构意味着全部的东西都是Object类型,能够存储Object的容易能够存储任何东西,于是很容易被复用。使用这样的容器,在其内置入对象引用,稍后将其取回。
(1)将对象置入容器时,它必须被向上转型为Object,所以会丢失身份(向上转型:子类转向基类或称父类)
(2)将它取出时,获取对Object对象的引用,不是置入时的那个类型的对象的引用。须要向下转型为置入时那个类型的对象的引用。(向下转型:父类或称基类转向子类)可是向下转型有很大的危险性,若是出现错误会引起异常。
经过参数化机制,编译器能够定制一个只收纳和取出Shape对象的容器,则能较为安全快捷的实现向上转型和向下转型。
一个处理器在同一时刻能够执行多个任务。即程序可以停下当前的工做,转而去处理某个其余问题,而后返回主进程。上述概念在java中成为并发,并发中有一个隐患:共享资源。多个并行任务都要访问同一资源,那么就会出问题。缘由:以两个进程同时向一台打印机发送信息为例,一个进程执行中,另外一个进程进来,前一个进程须要保护现场,至关于保护罪犯现场,别的人不能进来,所以会出现问题。解决这个问题,对访问共享资源的多个任务,有一个进程在访问共享资源时上锁,其余进程不能进来,访问结束后,释放资源锁,其余任务可使用共享资源。
Java尽管将一切都看做对象,但操做的标识符其实是对象的一个“引用”。能够想象成遥控器(引用)来操纵电视机(对象)。
(1)遥控器(引用)能够在房间的不一样位置,仍能调控电视机(对象)。
(2)没有电视机,遥控器也能够独立存在。
(1) 寄存器。寄存器是最快的存储区,位于不一样与其余存储区的地方—处理器内部。
(2) 堆栈。对象的引用放在堆栈中。
(3) 堆。Java的全部对象存放在堆中。
(4) 常量存储。常量值直接放在代码内部,在嵌入式系统中,常量会放在ROM中(只读存储器)。
(5) 非RAM存储。数据活在程序以外,彻底不受程序的控制。两个基本的例子是流对象和持久化对象。
1°:流对象:对象转化成字节流,一般被发送给另外一台机器。
2°:持久化对象:它被放在磁盘上,即使程序终止,他们仍能够保持本身的状态。这种技巧:对象能够转化为其余媒介上的事物,须要时能够恢复成常规的、基于RAM的对象。
通常使用new建立一个对象,将其放在堆里,但这种方法对建立特别小的、简单的变量每每不是颇有效。而基本类型所具备的包装类,使得能够在堆中建立一个非基本对象,用来表示对应的基本类型。(无需使用new)
(1)char c = ‘x’;
(2)Character ch = new Character(‘x’); //这个有new
(3)Character ch = ‘x’; //Java的自动包装功能能够自动将基本类型转为包装器类型。
char ch = new Character(‘x’);
new建立的对象在执行过程当中可能一直存在,只是对象的引用可能会因超出做用域范围而不可用。好像遥控器在电视机的屋子里可使用,可是拿到另外一个屋子里面就不能控制电视机了,可是电视机仍然存在。
一般状况下,建立类时,就是在描述那个类的对象的外观和行为。除非用new建立那个类的对象,才能分配数据空间,方法才能够被调用。当时有两种情形是没法解决的。
(1)只想为某特定区域分配单一存储空间,不考虑要建立多少个对象,甚至不考虑建立对象。
(2)但愿某个方法不与包含它的类的任何对象实例关联在一块儿。即没有建立对象,也能够经过类调用这个方法。
在此情形下诞生了static:
class StaticTest{ static int i=47; } //调用方法: StaticTest.i++; StaticTest st1 = new StaticTest(); StaticTest st2 = new StaticTest(); st1.i++; st2.i++; //在此情形下i的数值增长了3次,此时i==50. class Incremental(){ static void increment(){ StaticTest.i++; } } Incremental.increment(); Incremental sf = new Incremental(); sf.increment(); //在此情形下,i增长了两次。
但愿有心人能够补充一下!!!!
http://greggordon.org/java/tij4/solutions.htm
连接来自网络,若有违权,联系后即刻删除!!!!!
eg:Vehicle veh1 = new Vehicle();
这个语句的目的是建立一个对象,其实包含了四个动做。
(1)右面的 ”new Vehicle“ ,以Vehicle为模板,在堆里面建立了一个Vehicle类对象。
(2)末尾的“ () ”意味着,对象建立后,当即调用Vehicle类的构造函数,对刚生成的对象进行初始化。构造函数必定会存在,若是不存在,java默认生成一个构造函数。
(3)左边的“Vehicle veh1”是建立一个Vehicle类引用变量,放在栈里面,即之后用来指向Vehicle对象的对象引用
(4)“=”操做符,将对象引用指向建立的对象。
(1)基本类型直接存储在栈中 · 基本类型具备的包装容器,在堆中建立一个非基本对象,用来表示对应的基本类型 (2)基本类型与包装容器类对应以下 boolean Boolearn byte Byte short Short char Character int Int float Float long Long double Double (3)仅仅学习前两章节,涉及较少,后面回来补充!!!