标签:【读书笔记】
该读书笔记的流程是:阅读 > 勾划知识点 > 整理笔记
有时读书真的是只是读,没过脑,所以整理笔记等于回看,把没过脑的地方再过一遍,然后整理出笔记,记录下知识点,加上自己的一些理解,加深印象
一、对象导论 【2018.1.14】
我们之所以将自然界分解,组织成各种概念,并按其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来……除非赞成这个协定中规定的有关语言信息的组织和分类,否则我们根本无法交谈。
—— Benjamin Lee Whorf (本杰明.沃尔夫,人类学家)
Java是一门面向对象的编程语言。面向对象程序设计(Object-oriented Programming,OOP)
-
阿伦凯(Alan Kay)总结了面向对象语言Smalltalk的五个特性,Smalltalk是Java所基于的语言之一
- 万物皆为对象
- 程序是对象的集合,它们通过发送消息来告诉彼此所要做的
- 每个对象都有自己的由其他对象所构成的存储
- 每个对象都拥有其类型
- 某一特定类型的所有对象都可以接收同样的消息
.
-
对象具有状态、行为和标识
分别对应 内部数据(成员变量)、方法、内存中的引用地址
类描述了具有相同特性(数据元素)和行为(功能)的对象集合,实际是一种数据类型
-
可以把对象理解为“服务提供者”
程序是对象的集合,程序向用户提供服务,其实就是调用一个个对象的提供的服务(方法)来实现
-
新的类可以由任意数量、任意类型的其他对象,以任意可以实现新的类中想要的功能的方式所组成
这种概念被称为组合、聚合,是一种 has-a (拥有) 关系
-
Java是单根继承结构
- 保证所有对象都具备某些功能
- 使垃圾回收实现变得容易
.
异常处理提供了一种从错误状况进行可靠恢复的途径
并发,就是同一时刻处理多个任务,隐患是:共享资源
线程,是一种为单一处理器分配执行时间的手段
客户/服务器系统的核心思想是:系统具有一个中央信息存储池用来存储数据,她通常存在于数据库中,你可以按需要将它分发给某些人员或机器集群
本章内容主要是带领读者先领略面向对象程序设计的全貌,讲的是一些概念性的东西。现在有些明白为什么有些人说《Java编程思想》不太适合入门读,可能是因为第一章的原因吧,没有任何概念之前看这些,真的会有点晕
二、一切都是对象 【2018.1.14】
如果我们说另一种不同的语言,那么我们就会发觉一个有些不同的世界。
—— Luduing Wittgerstein (路德维希·维特根斯坦,奥地利哲学家)
尽管Java是基于C++的,但是相比之下,Java是一种更“纯粹”的面向对象程序设计语言
Java中通过引用操作对象
-
我们通过 new 关键字来创建Java对象。不过,字符串可以用带引号的文本初始化,这是Java的一个特性
String s = new String("hello java"); String ss = "hello java";
-
java中对象存储位置
-
寄存器
处理器内部,最快的存储区,但不能直接控制
-
堆栈
RAM随机访问存储器中,对象引用都存放于其中。创建程序时,Java系统必须知道存放在堆栈内所有项的生命周期,以便上下移动堆栈指针。向上移动,释放内存;向下移动,分配新内存
-
堆
也位于RAM区,用于存放Java对象。堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间
-
常量存储
直接放在程序代码内部,这样是安全的,永远不会被改变
-
非RAM存储
存储于程序之外,有流对象和持久化对象
-
8种基本类型是不需要通过 new 创建的
基本类型 | 大小 | 包装器类型 |
---|---|---|
boolean | - | Boolean |
char | 2 byte | Character |
byte | 1 byte | Byte |
short | 2 byte | Short |
int | 4 byte | Integer |
long | 8 byte | Long |
float | 4 byte | Float |
double | 8 byte | Double |
boolean所占存储空间没有明确指定
换算关系
8 bit(位) = 1 byte(字节)
1024 byte = 1 KB
1024 KB = 1 MB
1024 MB = 1 GB
1024 GB = 1 TB
成员变量会得到初始化有默认值,局部变量需要自己初始化,在使用前赋值
Java中的方法是通过对象调用,但是static方法,并不依赖于对象,它是针对类调用的
程序包名,小写反转域名
-
static关键字
1. 只想为某特定域(字段)分配单一存储空间,而不用去考虑究竟创建多少对象,甚至不创建对象 2. 希望某个方法不与包含它的类关联 static修饰的字段、方法,不能直接访问非static字段、方法,因为,非static字段和方法必须先与对象关联
-
注释
-
单行注释
// 以双斜杠开头,这就是单行注释
-
多行注释
以 /* 开头,以 */ 结束,不过我们习惯每行前面都加上 * /* * 这是多行注释 */
-
注释文档
以 /** 开头,以 */ 结束 相关的有一套语法,可以为类、字段、方法添加。为private 和 默认修饰的成员添加注释文档,会被忽略
-
本章主要介绍一些Java入门的小知识,学完本章,在配置完jdk之后,我们已经可以编写出一个Hello Java程序了
三、操作符【2018.1.21】
在最底层,java的数据是通过使用操作符来操作的。
几乎所有的操作符都只能操作“基本类型”。例外的操作符是“=”、“==”和“!=”,这几个操作符能操作所有的对象。另外,String类支持“+”和“+=”
java中“=”为赋值操作符,意思是“取右边的值”,把它复制给左边
“++”,“--”为自动递增、自动递减,又分为“前缀递增”、“前缀递减”和“后缀递增”、“后缀递减”。前缀如++a,--a会先执行运算,再生成值;后缀如a--,a++会先生成值,再执行运算
比较是否相等,基本类型使用“==”,对象使用equals()方法
“短路”现象,即一旦能够明确无误的确定整个表达式的值,就不再计算表达式余下部分。 “||”,短路或;“&&”短路与
三元操作符 boolean-exp ? value0 : value1; 它与 if-else语句的不同之处是,三元操作符一定会返回一个值
java允许我们把任何基本数据类型转换成别的基本数据类型,但布尔型除外,后者根本不允许进行任何类型的转换处理
-
窄化转化,就是将能容纳更多信息的数据类型转换成无法容纳那么多信息的类型,可能会面临信息丢失的危险,并且我们要显示地进行类型转换。
就是向下转型,比如double转换为int
-
将float和double转型为int时,总是会对该数字执行结尾。如果想得到四舍五入的结果,就需要使用java.lang.Math中的round()方法
如 double a = 0.4; int b = (int)a; b == 0;
通常,表达式中出现的最大的数据类型决定了表达式最终结果的数据类型。(自动类型提升)
-
Java的运算符,分为四类:算数运算符、关系运算符、逻辑运算符、位运算符。
算数运算符(9):+ - * / % ++ -- 关系运算符(6):== != > >= < <= 逻辑运算符(6):&& || ! ^ & | 位运算符(7):& | ~ ^ >> << >>>
本章主要是介绍java中的一些操作符,都是些需要硬记的知识,不过常用的也就算数运算符和关系运算符以及 && ||
四、控制执行流程 【2018.1.21】
就像有知觉的生物一样,程序必须在执行过程中控制它的世界,并做出选择。在Java中,你要使用执行控制语句来做出选择
java中流程控制涉及的关键字:if-else、while、do-while、for、return、break、switch
while和do-while的唯一区别是:do-while中的语句至少会执行一次,即便表达式第一次计算为false
-
java里唯一用到逗号操作符的地方是for循环的控制表达式
for(int i = 1,j = i + 10; i < 5; i++ ,j = i + 2){}
for语句中可以定义多个变量,但是它们必须具有相同的类型
return关键字的两个作用,返回值和退出方法
break用于强行退出循环,不执行循环中剩余的语句。continue则是停止当前的迭代,然后退回循环起始,开始下一次迭代
标签,是后面跟有冒号的标识符,像这样 lable: 用于跳出多层循环
带有标签的break会中断并跳出标签所指的循环;带有标签的continue会停止当前迭代,到达标签的位置,并重新进入紧接在那个标签后面的循环