《java编程思想(第四版)》第一二章学习笔记
@
一.Introduction
第一篇博客发布,渴望做好 Java后端开发 ,希望大家可以多多指教!
1.抽象过程
人解决问题的复杂性取决于抽象的类型和质量。
(1)汇编语言 是对 底层机器 的轻微抽象。
(2)C 等语言是对 汇编语言 的抽象。
以上语言的所做的抽象在解决问题时,要基于计算机的结构(移植性不好,维护成本较高)。
(3)Java 是针对解问题建模,以虚拟机作为中间层,方便移植,跨平台性极好。
2.面向对象语言(包括Java)的五个基本特性
(1)万物皆为对象。
(2)程序是对象的集合,他们通过发送消息来告诉彼此想要做的。
(3)每个对象都有自己的由其他对象所构成的存储(所有的类都有同一个基类)。
(4)每个对象都有类。(每个对象都是某个类的一个实例)
(5)某一特定类型的所有对象都可以接受同样的消息(例:后面一个"圆形"类型的对象能够接受所有发送给"几何型"对象的消息)
3.每个对象都提供服务
将对象看做服务,有助于提高对象的内聚性。(问题一般将过多的功能集中在一个对象中。)高内聚即将对象各个功能" 组合 "的很好。良好的面向对象的设计中,每个对象很好的完成一项任务,但不去做更多的事情。
(1)第一个对象提供支票排版的目录的服务
(2)第二个对象是通用的打印接口(打印服务)
(3)第三个对象调用另外两个对象的服务完成最终的打印
4.public、private、protected三者的区别
(1)public后面的元素对任何对象都是可用的。
(2)private除类型创建者和类型的内部方法之外任何人都不能访问。
(3)protected与private的作用相当,差别在于继承的类可以访问protected成员,但是不能访问private成员。
5.Java的默认访问权限(包访问权限)
类可以访问同一个包(库构件)中的其他类的成员,包之外这些成员相当于指定了private。
6.组合与继承
(1)组合:利用现有的类合成新类(如果组合是动态发生的,组合被称为聚合)
新类的成员对象常被声明为private,不干扰客户端代码的情况下,在运行时修改这些成员对象,来动态修改程序。
(2)继承:源类(基类、超类或父类)发生变动后,被修改的副本(导出类、继承类或子类)
(例:几何形——圆形、正方形、三角形(每种都具有额外的特性和行为))
思考---
1°:导出类+新方法——基类需不需要此方法
2°:导出类可使用与基类同名的方法来覆盖基类中同名的方法(即使用相同的接口方法,在新类中做些不同的事情)
3°:前期绑定:非面向对象的编译器产生的函数调用会引起所谓的前期绑定,编译器产生一个具体函数名字的调用,而运行时将这个调用解析到被执行的代码的绝对地址。
4°:后期绑定:面向对象编程时,程序直到运行时才能确定代码的地址,故采用后期绑定。
7.多态
编译器编译doSomething()的代码时,不确定doSomething()的确切类型。如果期望它的编译结果是调用基类Shape的erase()和draw()版本,而不是具体的Circle、Square或Line的相应版本。多态使得事情总是正确被处理。
1.定义:多态—不同类的对象对同一消息做出响应,同一消息根据对象的不同采用不同的行为方式。
2.实现方式:通过动态绑定实现多态,执行期间根据对象的实际类型,调用其相应的方法。
3.条件:
(1)继承
(2)覆盖(方法重写)
(3)父类引用指向子类对象
8.容器(自己最浅显的理解)
容器的基本理解:不知道解决某个特定问题需要多少个对象,或者他们将存活多久,就不知道如何存储这些对象,去找容器。被称为容器的新对象,在任何时候都可以扩充自己来容纳要置于其中的所有东西。因此不需要知道将来有多少对象置于容器中,只要自己创建一个容器对象,然后让它处理所有细节。
9.参数化类型
容器 存储Java中的通用类型:Object。单根继承结构意味着所有的东西都是Object类型,可以存储Object的容易可以存储任何东西,因而很容易被复用。使用这样的容器,在其内置入对象引用,稍后将其取回。
(1)将对象置入容器时,它必须被向上转型为Object,因此会丢失身份(向上转型:子类转向基类或称父类)
(2)将它取出时,获取对Object对象的引用,不是置入时的那个类型的对象的引用。需要向下转型为置入时那个类型的对象的引用。(向下转型:父类或称基类转向子类)但是向下转型有很大的危险性,如果出现错误会引发异常。
通过参数化机制,编译器可以定制一个只收纳和取出Shape对象的容器,则能较为安全快捷的实现向上转型和向下转型。
10.并发编程
一个处理器在同一时刻可以执行多个任务。即程序能够停下当前的工作,转而去处理某个其他问题,然后返回主进程。上述概念在java中成为并发,并发中有一个隐患:共享资源。多个并行任务都要访问同一资源,那么就会出问题。原因:以两个进程同时向一台打印机发送信息为例,一个进程执行中,另一个进程进来,前一个进程需要保护现场,相当于保护罪犯现场,别的人不能进来,因此会出现问题。解决这个问题,对访问共享资源的多个任务,有一个进程在访问共享资源时上锁,其他进程不能进来,访问结束后,释放资源锁,其他任务可以使用共享资源。
二.Everything Is an Object
1.用引用操纵对象
Java尽管将一切都看作对象,但操作的标识符实际上是对象的一个“引用”。可以想象成遥控器(引用)来操纵电视机(对象)。
(1)遥控器(引用)可以在房间的不同位置,仍能调控电视机(对象)。
(2)没有电视机,遥控器也可以独立存在。
2.存储位置
(1) 寄存器。寄存器是最快的存储区,位于不同与其他存储区的地方—处理器内部。
(2) 堆栈。对象的引用放在堆栈中。
(3) 堆。Java的所有对象存放在堆中。
(4) 常量存储。常量值直接放在代码内部,在嵌入式系统中,常量会放在ROM中(只读存储器)。
(5) 非RAM存储。数据活在程序之外,完全不受程序的控制。两个基本的例子是流对象和持久化对象。
1°:流对象:对象转化成字节流,通常被发送给另一台机器。
2°:持久化对象:它被放在磁盘上,即便程序终止,他们仍可以保持自己的状态。这种技巧:对象可以转化为其他媒介上的事物,需要时可以恢复成常规的、基于RAM的对象。
3.基本类型(无需使用new即可创建)
一般使用new创建一个对象,将其放在堆里,但这种方法对创建特别小的、简单的变量往往不是很有效。而基本类型所具有的包装类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。(无需使用new)
(1)char c = ‘x’;
(2)Character ch = new Character(‘x’); //这个有new
(3)Character ch = ‘x’; //Java的自动包装功能可以自动将基本类型转为包装器类型。
char ch = new Character(‘x’);
4.new创建对象的作用域
new创建的对象在执行过程中可能一直存在,只是对象的引用可能会因超出作用域范围而不可用。好像遥控器在电视机的屋子里可以使用,但是拿到另一个屋子里面就不能控制电视机了,但是电视机仍然存在。
5.static的作用
通常情况下,创建类时,就是在描述那个类的对象的外观和行为。除非用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增加了两次。
6.javadoc注释(未详细查看,暂时认识不到它的重要性)
希望有心人可以补充一下!!!!
7.《Thinking in Java》第四版课后习题答案链接:
http://greggordon.org/java/tij4/solutions.htm
链接来自网络,如有违权,联系后即刻删除!!!!!
三.疑惑点
1.对象引用和对象引用的区别
1°:使用文字的形式说明
eg:Vehicle veh1 = new Vehicle();
这个语句的目的是创建一个对象,其实包含了四个动作。
(1)右面的 ”new Vehicle“ ,以Vehicle为模板,在堆里面创建了一个Vehicle类对象。
(2)末尾的“ () ”意味着,对象创建后,立即调用Vehicle类的构造函数,对刚生成的对象进行初始化。构造函数一定会存在,如果不存在,java默认生成一个构造函数。
(3)左边的“Vehicle veh1”是创建一个Vehicle类引用变量,放在栈里面,即以后用来指向Vehicle对象的对象引用
(4)“=”操作符,将对象引用指向创建的对象。
2°:使用图例加以说明
2.基本类型和其对应的包装容器类的区别
(1)基本类型直接存储在栈中
· 基本类型具有的包装容器,在堆中创建一个非基本对象,用来表示对应的基本类型
(2)基本类型与包装容器类对应如下
boolean Boolearn
byte Byte
short Short
char Character
int Int
float Float
long Long
double Double
(3)仅仅学习前两章节,涉及较少,后面回来补充!!!
《java编程思想(第四版)》第一二章学习笔记的更多相关文章
- 《Linux内核设计与实现》 第一二章学习笔记
<Linux内核设计与实现> 第一二章学习笔记 第一章 Linux内核简介 1.1 Unix的历史 Unix的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆 ...
- 《Linux内核设计与实现》第一、二章学习笔记
<Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡 学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态 ...
- 《Linux内核设计与实现》第四周读书笔记——第五章
<Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...
- LINUX内核设计与实现第三周读书笔记
LINUX内核设计与实现第三周读书笔记 第一章 LINUX内核简介 1.1 Unix的历史 1969年的夏天,贝尔实验室的程序员们在一台PDR-7型机上实现了Unix这个全新的操作系统. 1973年, ...
- 《Linux内核设计与实现》Chapter 3 读书笔记
<Linux内核设计与实现>Chapter 3 读书笔记 进程管理是所有操作系统的心脏所在. 一.进程 1.进程就是处于执行期的程序以及它所包含的资源的总称. 2.线程是在进程中活动的对象 ...
- 《Linux内核设计与实现》Chapter 1 读书笔记
<Linux内核设计与实现>Chapter 1 读书笔记 一.Unix的特点 Unix从Multics中产生,是一个强大.健壮和稳定的操作系统. 特点 1.很简洁 2.在Unix系统中,所 ...
- 《Linux内核设计与实现》Chapter 2 读书笔记
<Linux内核设计与实现>Chapter 2 读书笔记 一.获取内核源码 1.使用Git 我们曾经在以前的学习中使用过Git方法 $ git clone git://git.kernel ...
- 《Linux内核设计与实现》Chapter 5 读书笔记
<Linux内核设计与实现>Chapter 5 读书笔记 在现代操作系统中,内核提供了用户进程与内核进行交互的一组接口,这些接口的作用是: 使应用程序受限地访问硬件设备 提供创建新进程与已 ...
- 《Linux内核设计与实现》Chapter 18 读书笔记
<Linux内核设计与实现>Chapter 18 读书笔记 一.准备开始 一个bug 一个藏匿bug的内核版本 知道这个bug最早出现在哪个内核版本中. 相关内核代码的知识和运气 想要成功 ...
随机推荐
- Python3 并发编程1
目录 操作系统发展 穿孔卡片 批处理 多道技术(单核) 并发与并行 进程 程序与进程 进程调度 进程的三个状态 同步和异步 阻塞与非阻塞 僵尸进程与孤儿进程 守护进程 Python中的进程操作 Pro ...
- pyplot概述
matplotlib.pyplot 是命令行风格的函数集,让matplotlib看起来像MATLAB.Each一样工作.pyplot函数能够对画布(figure)进行一些改变,例如:创 ...
- 小白的springboot之路(十)、全局异常处理
0.前言 任何系统,我们不会傻傻的在每一个地方进行异常捕获和处理,整个系统一般我们会在一个的地方统一进行异常处理,spring boot全局异常处理很简单: 介绍前先说点题外话,我们现在开发系统,都是 ...
- 【Element UI】使用问题记录
[Element UI]使用问题记录 转载:https://www.cnblogs.com/yangchongxing/p/10750994.html 下载地址: https://unpkg.com/ ...
- poj 2955 Brackets (区间dp基础题)
We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a ...
- SQL- SQL插入与更新删除
一 前言 经过之前的 [SQL]-SQL介绍, [SQL]- SQL检索阶段一, [SQL]-sql检索阶段二 的三篇文章你已经学会的sql的相关概念和如何查询数据库,这篇文章主要后续对数据库表的进入 ...
- 《Java基础知识》Java 泛型详解
JDK 1.5 之后,Java 通过泛型解决了容器类型安全这一问题,而几乎所有人接触泛型也是通过Java的容器.那么泛型究竟是什么? 泛型的本质是参数化类型:也就是说,泛型就是将所操作的数据类型作为参 ...
- 在项目中在线使用Iconfont图标
Iconfont真的很强大,图标数量惊人,基本任意的关键词都能搜索到你想要的结果.而且是国产的,网速会比较快,还可以改变图标颜色. 它提供svg.png.ai三种格式下载,之前我一直都是乖乖的一个个下 ...
- 一个类实现Java截屏并保存到指定文件夹
不知小伙伴们有没有遇到过使用java来截屏的需求,截屏后保存到指定的目录,在桌面上没有任何体现,完全不知道已经被截屏了.至于截屏后怎么做,可能有的老铁只是好奇想知道某人在干啥?也有的老铁可能想进行文字 ...
- IT兄弟连 HTML5教程 CSS3属性特效 CSS3背景
CSS3规范中对背景这一部分,新加入了一些有用的功能,如可以设置多个背景图片.可以指定背景大小.设置背景渐变等功能.CSS3规范中定义的背景属性新增了background-clip.backgroun ...