《Java核心技术 卷Ⅰ 》第三章笔记——Java的基本程序设计结构

目录

整体结构

基本数据类型

变量

字符串

输入与输出

控制流程

数组

本章出现的常用API汇总


整体结构

一个完整的Java应用程序

public class test {
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}

1.Java应用程序的所有内容必须放置在类中。

2.Java的类名必须以字母开头,遵循CamelCase的命名方法,即名字的每个单词首字母大写。

基本数据类型

1.System.out.println(2.0-1.1)的输出结果为0.8999999999999而非0.9,因为浮点数用二进制表示,其结果无法用二进制精确表示,就像1/3无法用十进制精确表示一样。

2.当心注释中的\u,它很可能因为后面没有跟随一个十六进制数而报错。

3.建议减少对char类型的使用,并以抽象数据类型String类代替。

4.Java中,char描述了UTF-16编码中的一个代码单元。

有关代码单元和Unicode与char之间的关系,详见书本。另请参阅:char 码点和代码单元

不要在代码中使用 $ 这个字符

5.Java的boolean中true与false不可以用0和1代替。

变量

1.Java中默认的整数与小数的类型为int与double,故当定义一个short变量s后,不可出现s = s + 1;的代码,正确写法如下:

s = (short) (s + 1);

因为数字1是int类型,s+1会因自动类型转换而变成int型,不可以直接赋给short类型的变量s,需要进行强制类型转换。

注意:

  • 上述代码可以写作 s += 1; 该运算符自带强制类型转换。
  • 转换时要注意精度上限问题。

而下述代码仍是错误的:

byte a1 = 1;
byte a2 = 2;
byte a3 = a1 + a2;

因为a1, a2是变量,编译时编译器不能确定其结果,会将a1 + a2以int型数据处理,在赋给a3时,需要强制类型转换,即:

byte a3 = (byte) (a1 + a2);

2.C/C++区分变量的定义与声明,Java则不然。

3.在Java中使用final关键字来指示常量,例如:

final double PAI 3.1415926

若某个常量在一个类的多个方法中使用,则称其为类常量,并用下述语句表示:

public static final double PAI = 3.14

与其说它类似C/C++中的#define,不如说类似于const,Java中同样有const关键字,但是必须使用final指示常量。

4.int转换为float,long转换double时有可能会发生截断,比如int所包含的位数比float所能表示的位数多时。

5.不要在boolean类型与任何一种类型间使用强制类型转换。

6.若想要进行舍入整数而非取整运算,则可使用Math.round方法。

7.整数除以0会产生异常,浮点数除以0会得到无穷大NaN结果。

字符串

1.substring方法接受两个参数a, b,a为子串在主串的起始位置,b为不想复制的第一个位置,返回子串的长度为b - a。

2.String类的字符串不可修改,但可以修改字符串变量,让它引用另外一个字符串。

(如str = "Hello"中,"Hello"是字符串,不可变;str是字符串变量,可以改变引用的对象)

  • 如果复制一个字符串变量,原始字符串和复制字符串共享相同的字符。
  • Java的字符串类相似于C/C++中的char *指针。
  • 使用equals()方法而非“==”来判断两字符串是否相等。其中,若不区分大小写,使用equalsIgnoreCase方法。
  • “==”运算符只能够确定两个字符串是否放到了同一个位置上。对于两个相同的字符串,是否相等这取决于虚拟机是否始终将两字符串共享。但事实上,只有字符串字面量是共享的,通过+,substring获得的字符串是不共享的。
  • 在进行相等性测试时,字符串表现的更像是“指针”。

3.空串是指长度为0,内容为空的字符串,与不和任意对象关联的null串不同。

4.使用length方法检测字符串长度。更准确的是,length方法返回采用UTF-16编码表示的给定字符串所需要的代码单元的数量。这就有可能出现一个字符对应两个长度的现象,为得到真正的长度(即码点数量),可使用codePointCount(a, b)获得,其中a, b含义同substring的两个参数。

输入与输出

1.System.out.println()输出换行,而print方法则不换行。

2.读取标准输入需要的操作:

Scanner in = new Scanner(System.in);

该Scanner对象将关联标准输入流,使用nextLine等方法即可读取不同方式和格式的输入。

3.读取文件需要的操作:

Scanner in = new Scanner(Path.of(file_dir), StandardCharsets.UTF_8);

注意:文件名中包含反斜杠' \ '时,需添加额外的反斜杠,也即' \\ '。

4.使用printf进行与C/C++一样的格式化输出。若创建格式化的字符串,则使用String类的format方法。 

控制流程

1.Java不允许在块内重定义变量。

2.使用带标签的break跳出块语句,例如:

label:
{
    ...
    if(condition)
        break label;
    ...
}

3.范围for循环for each 基本格式为for ( variable : collection ) statement,可以对数组或实现Iterable接口的对象进行处理。

这种方式的优点是不必考虑collection的起始值和终止值。

以数组为例,variable处应为数组元素element而非下标index,也即输出数组arr的元素应按如下格式:

for (int element : arr)
    System.out.println(element);

 注意:指出数组元素的类型并标在variable之前。

数组

1.使用下列语句定义(1.2行)与声明(3.4行)数组:

int[] arr1 = new int[5];
int[] arr2 = new int[] {1,2,3,4,5};
int[] arr3;
int arr4[];

2.获取数组长度可以使用length方法,转化为字符串可以使用toString方法,之后可以直接输出。

3.多维数组的创建与一维数组类似,以二维数组为例,步骤如下,两种方法均可:

// Method 1
int[][] arr1 = new int[5][6];
// Method 2
int[][] arr2 = new int[5][];
for(int i = 0; i < 5 ; i++)
    arr2[i] = new int[6];

利用第二种方法可以创建“不规则数组”,即每行数组元素个数不同。 

本章出现的常用API汇总

1.String API

2.Scanner API

3.StringBuilder API

4.Arrays API

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值