JAVA核心技术卷一~三章读书笔记
JAVA核心技术卷一~三章读书笔记
第一章
1.Java 程序平台
是一种功能齐全的出色语言,是一个高质量的执行环境, 还提供了一个庞大的库
2. Java“ 白皮书” 的术语
-
简洁性 :
无头文件、 指针运算(甚至指 针语法)、结构、 联合、操作符重载、 虚基类…
支持在小型机上独立运行。 -
面向对象
-
分布式
-
健壮性:
采用的指针模型可以消除重写内存 和损坏数据的可能性。 -
安全性:
不可信代码在一个沙箱环境中执行,在 这里它不会影响主系统 -
体系构中立:
编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码, 只要有 Java 运行时系统, 这些编译后的代码可以在许多处理器上运行。 -
可移植性
Java中的 int 永远为 32 位的整数,而在 C/C++ 中, int 可能是 16 位整数、 32 位整 数, 也可能是编译器提供商指定的其他大小: -
解释型
-
高性能
-
多线程
-
动态性
库中可以*地添加新方法和实例变量, 而对客户端却没有任何影响
第二章
- JAVA术语
- Linux:64位,tar.gz
- 如何使用开发环境:
.从命令行编译并运行 Java 程序。
1 ) 打开终端窗口。(ctr+alt+T)
2 ) 进入源代码目录
3 ) 输入下面的命令: javac Weicome.java java Welcome
编译
启动虚拟机
执行
注意:区分大小写
第三章:基本程序设计结构
· 简单的命名语法规则:
- 源代码的文件名必须与公共类的名字相同,并用.java 作为扩展名。
- Java 区分大小写。
- 关键字 class 后面紧跟类名。
- 名字必须以字母开头,后 面可以跟字母和数字的任意组合。
长度基本上没有限制,但是不能使用 Java 保留字(例如, public 或 class) 作为类名 。 - 标准的命名规范:类名是以大写字母开头的名 词。如果名字由多个单词组成,每个单词的第一个字母都应该大写。
·三种注释
- //开始—本行末尾
- /* 开始— */结束 【此方法不能嵌套】
- /** 开始— */结束
· 数据类型
整型:
int
short
long:长整型数值有一个后缀 L 或 1 (如 4000000000L)
十六进制数值有一个前缀 Ox 或 0X (如 OxCAFEL )
八进制有一个前缀 0
加上前缀 0b 或 0B 就可以写二进制数。例如,0b1001就是 9
可以为数字字面量加下划线,如用 1_000_000 【100万】byte
浮点类型:
double
float:有后缀F或f,D或d
【无后缀默认为double】
· 在二进制系统中无法精确地表示分数 1/10
· Double_POSITIVE_INFINITY正无穷
· Double.NEGATIVEJNFINITY 负无穷
· Double.NaN (以及相应的 Float 类型的常量)不能这样检测一个特定值是否等于 Double.NaN:
if (x = Double.NaN) // is never true
所有“ 非数值” 的值都认为是不相同的。
然而,可以使用 Double.isNaN 方法:
if (Double.isNaN(x)) // check whether x is “not a number”
字符类型
char:
- 可以表示为十六进制值,其 范围从 \u0000 到 \Uffff。
- 用 ‘ ’引用。
boolean 类:
true
false
在 C++ 中, 数值甚至指针可以代替 boolean 值。值 0 相当于布尔值 false, 非 0 值相当于布尔值 true, 在 Java 中则不是: if (x = 0) // oops… meant x = 0 在 C++ 中这个测试可以编译运行, 其结果总是 false: 而在 Java 中, 这个测试将不 能通过编译, 其原因是整数表达式 x = 0 不能转换为布尔值
变量:
· 以分号结束
· 变量名必须是一个以字母开头并由字母或数字构成的序列
· 不能使用 Java 保留字作为变量名
· 大小写敏感
变量初始化:
声明一个变量之后,用赋值语句对变量进行显式初始化, 不要使用未初始化的 变量。
常量:
关键字 final 表示这个变量只能被赋值一次,一旦赋值,不能更改.
某个常量可以在一个类中的多个方法中使用,通常将这些常量称为 类常量。可以使用关键字 static final设置一个类常量。
类常量的定义位于 main方法的外部。在同一个类的其他方法中也可 以使用这个常量。如果一个常量被声明为 public,那么其他类的方法也可以使用这个 常量.
运算符:
- +,-,*,/
[数/0=NAN或无穷大] - ++,–
[前缀形式会先完成加 1; 而后缀形式会使用变量原来的值] - 关系运算符:==,!=&&,||,三元操作符?:
[如果条件为 true, 下面的表达式
condition ? expression1 : expression2
就为第一个表达式的值,否则计算为第二个表达式的值] - 位运算符:
& (“and”)
| (“or”)
^ (“XOr”)
~(“not”)
‘>>’ 和’<<’ 运算符将位模式左移或右移
‘>>>’ 运算符会用 0 填充高位,这与》 不同,它会用符号位填充高位。不存在<<< 运算符。 - 括号与运算符级别:
&&优先于||
从左到右
- 枚举类型:
Size类型的变量只能存储这个类型声明中给定的某个枚举值,或者 null 值,null 表示这 个变量没有设置任何值。 - 数学函数:
floormod:求余数
pow:幂运算
-
数值类型的转换:
-
强制类型转换:
在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名
字符串
-
" "引用
-
子串:
String类的 substring方法可以从一个较大的字符串提取出一个子串。
例如: String greeting = “Hello”; String s = greeting.substring(0, 3) -
拼接:
-使用 + 号连接(拼接)两个字符串
-如果需要把多个字符串放在一起,用一个定界符分隔,可以使用静 态join方法:
String all = String.join(" / ", “S”, “M”, “L”, “XL”);
// all is the string “S / H / L / XL” -
不可变字符串:
String类对象称为不可变字符串 -
使用 equals方法检测两个字符串是否相等
返回值为true/false
[一定不要使用= 运算符检测两个字符串是否相等! 这个运算符只能够确定两个字串 是否放置在同一个位置上。当然, 如果字符串放置在同一个位置上, 它们必然相等] -
空串与 Null 串:
-空串 “” 是长度为 0 的字符串
-null是一个存放在字符串中的值:表示目前没有任何对象与该变量关联
-检查一个字符串既不是 null 也不为空串:
if (str != null && str.lengthO != 0) -
码点与代码单元
-
StringAPI
-
构建字符串:
~控制流程
- 块作用域:
块(即复合语句)是指由一对大括号括起来的若干条简单的 Java语句
[不能在嵌套的两个块中声明同名的变量] - 条件语句:if (condition) statement
- 循环:
-while {condition) statement ;
-do statement while {condition);
-for:[如果在 for 语句内部定义一个变量, 这个变量就不能在循环体之外使用]
-swich - 中断控制流程语句
大数值:
aVa.math 包中的两个类:
Biglnteger和 BigDecimaL 这两个类可以处理包含任意长度数字序列的数值。
Biglnteger类实现了任意精度的整数运算。
BigDecimal 实现了任意精度的浮点数运算。
【只能使用大数 值类中的 add 和 multiply 方法运算】
数组
-
new 运算 符创建数组
int[ ] a = new int[100]; -
数组长度不要求是常量: newint[n] 会创建 一个长度为 n 的数组。
-
声明:
int[] a;
或
int a[]; -
for each 循环
- for (variable : collection) statement
- 数组初始化以及匿名数组
new int[] { } - 数组拷贝
使用 Arrays 类的 copyOf方法:
int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers, luckyNumbers.length);
【 第 2 个参数是新数组的长度】
增加数组的大小:
luckyNumbers = Arrays.copyOf(luckyNumbers, 2 * luckyNumbers.length);
如果数组元素是数值型,那么多余的元素将被赋值为 0 ;
如果数组元素是布尔型,则将赋值 为 false。
如果长度小于原始数组的长度,则只拷贝最前面的数据元素。
【Java 中的 [ ]运算符被预定义为检查数组边界,而且没有指针运算, 即不能通过 a 加 1 得到数组的下一个元素。】 - 命令行参数
- 数组排序
使用 Arrays类中的 sort 方法:
int[] a = new int[10000];
Arrays.sort(a) - 多维数组
声明:
eg:double[][] balances
【在调用 new 对多维数组进行初始化之前不能使用】
初始化:
eg:balances = new double[NYEARS][NRATES]:
之后可以利用两个方括号访问每个元素
- for each 循环语句不能自动处理二维数组的每一个元素。
它是按照行, 也就是一维数组处理的
要想访问二维教组 a 的所有元素, 需要使用两个嵌套的循环- 要想快速地打印一个二维数组的数据元素列表, 可以调用: System.out.println(Arrays.deepToString(a));
- 不规则数组:
每一行有不同的长度
Java 实际上没有多维数组,只有一维 数组。多维数组被解释为“ 数组的数