java · 2023-11-21 0

《Java核心技术·卷I》读书笔记01

常量

关键字 final

类常量 static final

类常量的定义位于main方向的外部

Math类

不必在数学方法名和常量名前添加前缀”Math”,只要在源文件的顶部加上下面这行代码:

强制类型转换

可能损失信息

如double –> int

字符串

子串 substring

可用 String类 的 substring方法 提取一个子串

拼接

可直接用+号拼接字符串

当将一个字符串与一个非字符串的值进行拼接时,后者会转换成字符串

如果要把多个字符串放在一起,用一个界定符分隔,可以使用静态join方法

不可变字符串

String类没有提供修改字符串中某个字符的方法,所以 String类对象称为是不可变的

如果要将”Hello”字符串变为”Help!”,可采用取字串+拼接:

检测字符串是否相等 equals

要想检测两个字符串是否相等,而不区分大小写,可以使用 equalsIgnoreCase 方法

不要使用 == 运算符来检测两个字符串是否相等,这样只能确定两个字符串是否存放在同一个位置上

检测字符串长度 length

空串与Null串

空串””,是长度为0的字符串,是一个Java对象

Null串,是string变量存放着一个特殊的值,名为null,表示目前没有任何对象与该变量关联

String API

http://docs.oracle.com/javase/9/docs/api

查询标准类库里的所有的类与方法

构建字符串 StringBuilder类

常用方法:

  • StringBuilder 构造一个空的字符串构建器
  • int length 返回构建器或缓冲器中的代码单元数量
  • StringBuilder append(String str) 追加一个字符串并返回 this
  • StringBuilder append(char C) 追加一个代码单元并返回 this
  • StringBuilder appendCodePoint(int cp) 追加一个码点,并将其转换为一个或两个代码单元并返回this
  • void setCharAt(int i, char c) 将第i个代码单元设置为c
  • StringBuilder insert(int offset, String str) 在offset位置插入一个字符串并返回this
  • StringBuilder insert(int offset, char C) 在offset位置插入一个代码单元并返回this
  • StringBuilder delete(int startIndex, int endIndex) 删除偏移量从startIndex到endIndex – 1 的代码单元并返回this
  • String toString() 返回一个与构建器或缓冲器内容相同的字符串

输入与输出

读取输入 Scanner

由于输入可见,所以Scanner不适用于在控制台上读取密码,要想读取密码,可以使用Console类

格式化输出 printf

以下句会以一个字符宽度打印x: 包含八个字符,精度为小数点后2个字符

使用标志,常用的有:

标志目的示例
+打印正负数的符号+3333.33
空格在正数之前添加空格_3333.3 (_表示空格)
0数字前面补0003333.33
左对齐3333.33_
(将负数括在括号内(3333.33)
,添加分组分隔符3,333.33
# (对于f格式)包含小数点3333.
# (对于x或0格式)添加前缀0x或00xcafe

可以使用多个标志,例如

会使用分组分隔符且将负数括在括号内

可以使用静态的 String.format 方法创建一个格式化的字符串,而不打印输出

文件输入与输出

输入文件:Scanner

输出文件:PrintWrite 如果文件不存在,创建该文件。

如果用一个不存在的文件构造一个scanner,或用一个无法创建的文件名构造一个PrintWriter,就会产生异常,用 throws IOException 告诉编译器可能会产生输入输出异常

控制流程

条件控制

循环控制

中断控制流程

普通的break:用于跳出当前循环

continue:

带标签的break语句:可用于跳出多重嵌套循环

注意:标签必须放在希望跳出的最外层循环之前,并且必须紧跟一个冒号

事实上可以将标签应用到任何语句,包括if语句或者块语句,如:

只能跳出语句块,不能跳入语句块

大数 BigInteger BigDecimal

这两个类可以处理包含任意长度数字序列的数值

不能使用算术运算符 + – * / 来处理大数,需要使用大数类 add subtract multiply divide方法

数组

声明、初始化数组

还可以声明匿名数组, 这会分配一个新数组并填入大括号中提供的值。会统计初始值个数并相应地设置数组大小。 可以使用这种语法重新初始化一个数组而无需创建新变量

允许有长度为0的数组:

访问数组元素

创建数组时会进行默认初始化

数字数组 — 0 boolean数组 — false 对象数组 — null

想要获得数组中的元素个数,可以使用 <array>.length

for each 循环

可以用来依次处理数组中的每一个元素,不考虑下标值,如:

数组拷贝

允许将一个数组变量拷贝到另一个数组变量,这时两个变量将引用同一个数组

如果希望将一个数组的所有值拷贝到一个新的数组中去,需要使用 Arrays类的copyOf 方法

第二个参数是新数组的长度,常用来增加数组的大小

如果长度小于原始数组的长度,则只拷贝前面的值

数组排序

要想对数值型数组进行排序,可以使用Arrays类中的sort方法

java.util.Arrays:

多维数组

for each循环语句不能自动处理二维数组的每一个元素。它会循环处理行。而这些行本身是一维数组。

还可以快速地打印一个二维数组的数据元素列表

不规则数组

Java实际上没有多维数组,只有一维数组。多维数组被解释为“数组的数组”。

可单独访问数组的每一行,也可让两行交换

可创建每行元素个数不同的不规则数组,示例: