重读《core JAVA》卷一,这里记录下读书笔记。
Chapter 3 JAVA的基本程序设计结构
一个简单的Java程序
- System.out 对象 还有一个 print 方法,它在输出之后不换行。
数据类型
- Java 是一种强类型语言,意味着 必须为每一个变量声明一种类型。
8种基本类型:
4 种整型、2种浮点类型、char、boolean
-
整型:
- int:4 字节,-2147483648 ~ 2147483647;
- short:2 字节, -32768 ~ 32767;
- long:8 字节, -9223372036854775808 ~ 9223372036854775807;
- byte:1 字节, -128 ~ 127;
- 在 Java 中,整型的范围与运行 Java 代码的机器无关;
浮点类型:
- float:4字节,有效位数为 6 ~ 7 位;
- double: 8字节,有效位数为 15 位;
没有后缀 F 的浮点数值默认为 double 类型;
三个特殊的特殊的浮点数值:
- 正无穷大,例如:一个正整数除以 0;
- 负无穷大;
- NaN,例如:0/0, 或者负数的平方根;
char 类型:
- Unicode 编码单元可以表示为 十六进制值,范围从 \u0000 到 \uffff;
- UTF-16 采用不同长度的编码表示所有 Unicode 代码点;
- code unit 、surrogate are;
- 建议不要在程序中使用 char 类型,除非需要对 UTF-16进行操作;
boolean 类型:
- 整型值和布尔值不能进行相互转换;
- eg :if(x=0) 在 Java 中不能通过编译,因为整数表达式 x = 0 不能转换为布尔值;
-
变量
逐一声明变量可以提高程序 的可读性;
声明一个变量之后,必须用赋值语句对变量进行显示初始化。不要使用未被初始化 的变量;
在 Java 中,如果希望某个常量可以在一个类中的多个方法中使用,通常将其设为 类常量,用 static final 设置,类常量的定义位于 main 方法的外部;
运算符
- “>>>” 用 0 填充高位,”>>” 用符号位填充高位;
数值类型之间的转换:
实心箭头:无信息丢失;
- 虚箭头:可能有信息损失;
强制类型转换:
- 当调用 round 时,仍然需要使用强制类型转换:
doublex = 3.14; int x = (int)Math.round(x);
括号与运算符级别:
枚举类型:
- 包括有限个命名的值;
enum Size {SMALL, MEDUIM, LARGE};
- Size 类型的变量只能存储这个类型声明中给定的某个枚举值,或者 null 值。
字符串
- Java 字符串就是 Unicode 字符序列;
子串:
s.substring(a, b);
- substring 的第二个参数,是不想复制的第一个位置;
- 字符串长度:b - a;
不可变字符串:
- 优点:编译器可以让字符串共享。想象,字符串存放在公共发字符串池中,字符串变量指向池中相应的位置。如果复制一个字符串变量,原始字符串与复制的字符串 共享相同的字符;
检测字符串是否相等:
- 使用 equals 方法:
s,equals(t)
,"Hello".equals(myString)
; - 不能使用 == ,== 只能检测两个字符串是否放置在同一个位置上;
空串与 NULL 串:
- 空串是是一个 Java 对象,有自己的串长度(0)和内容(空),检查:
if (str.length() == 0)
或者if(str.equals(""))
String 变量还可以放置一个特殊的值 NULL。表示目前没有任何对象和变量 与该变量关联。 检查:
if(str == null)
要检查一个字符串既不是 null 也不是空串:
if(str != null && str.length() != 0)
,- 首先要检查不为 null,在 null 值上调用方法会出错;
代码点与代码单元
s.charAt(i)
返回位置 i 的代码单元;
构建字符串
如果需要用许多小段的字符串构建一个字符串:
构建一个空的字符串构建器:
StringBuilder builder = new StringBuilder();
当每次需要添加一部分内容时,就调用 append 方法:
builder.append(str);
在需要构建字符串时,调用 toString 方法,将可以得到一个 String 对象:
String completedString = builder.toString();
- StringBuffer 的效率低些,允许采用多线程方式添加或删除字符串;
- 一般所有字符串都在一个多线程中编辑,采用 StringBuilder;