Java核心技术 卷I(第10版)读书笔记
小豆工作以来发现自己基础不扎实,利用空余时间再次阅读该书,目的为了扎实巩固基础,之前读过却未作笔记,对该书毫无记忆,所以决定边读边总结,持续更新。
第3章 Java的基本程序设计结构
1.命名:
类名是以大写字母开头,可以跟字母和数字的任意组合,不能使用java保留字段作为类名,多个单词应该采用骆驼命名法(如:FirstSample)。
变量名是以字母开头,并由字母或数字构成的序列,大小写敏感,如果想要知道哪些Unicode字符属于Java中的“字母”,可以使用Character类的isJavaldentifierStart 和 isJavaldentifierPart 方法来检查。
2.数据类型:java是强语言类型,必须为每个变量声明一种类型,共有8种基本类型:4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型char,和1种用于表示真值的boolean类型,布尔类型结果为false/true,用来判断逻辑条件,不能和整型值相互转换:
java整型.png
浮点类型.png
注意:一个正整数除以0的结果是正无穷大,计算0/0或者负数的平方根结果是NaN(不是一个数字),所有“非数值”的值都认为是不相同的,却可以使用Double.isNaN方法
if(Double.isNaN(x)) // check whether x is "not a number"
浮点数值不适合用于无法接受舍入误差的金融计算,如果在数值计算中不允许有任何的舍入误差,应该使用BigDecimal类
3.变量:
变量初始化:一行中声明一个变量可以提高程序的可读性,变量的声明尽可能靠近变量第一次使用的地方,是一种良好的程序编写风格。
常量:关键字final,只能够被赋值一次,使用全大写,若希望某个常量在一个类中的多个方法使用,可以用关键词static final设置一个类常量。
4.运算符:
注意,整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。
类型转换:实线为无信息丢失转换,虚线可能有精度损失的转换
数值类型之间的合法转换.png
强制类型转换:会导致信息丢失
double x = 9.99;
int nx = (int) x;
int nxx = (int)Math.round(x);//如要得到最接近的值,需要使用Math.round():,该方法返回long类型,强转为int
nx = 9;
nxx = 10;
自增自减运算符:尽量避免使用++运算符,会带来代码的疑惑。
int m =7;
int n = 7;
int a = ++m;// a is 8,m is 8
int b = n++; // b is 7,n is 8
关系运算符和位运算符:
关系运算符,&& || 遵守“短路”规则
位运算符,>>>运算符会用0填充高位,而>>运算符会用符号位填充高位,不存在<<<运算符,移位运算符的右操作数要完成模 32 的运算(除非左操作数是 long 类型, 在这种情况下需要对右操作數模 64 )。例如, 1 <<35 的值等同于 1 <<3 或 8。
括号与运算符级别:
运算符优先级.png
枚举类型:
enum Size{ SMALL,MEDIUM,LARGE};
Size s = Size.SMALL;//声明这种类型的变量示例
5.字符串
拼接:如果需要把多个字符串放在一起,用一个定界符分隔,使用静态join方法:
String all = String.join("/","S","m","l");//all is the string "S/m/l"
想要检测两个字符串是否相等,而不区分大小写,可以使用equalsIgnoreCase方法,“hello”.equalsIgnoreCase("Hello");
注意:不能够使用 == 运算符检测两个字符串是否相等,== 只能够确定他们的存储空间的位置是否相同,字符串值相等不一定位置相等(当虚拟机始终将相同的字符串共享,就可以使用,但不建议使用)。
码点和代码单元:
String greeting = "Hello";
int n = greeting.length。; // i is 5,返回采用 UTF-16 编码表示的给定字符串所需要的代码单元数量
int cpCount = greeting.codePointCount(0, greeting.length());//得到实际的长度,即码点数量
调用 s.charAt(n) 将返回位置 n 的代码单元,n 介于 0 ~ s.length()-1 之间。
例如:
char first = greeting.charAt(0); // first is 'H'
char last = greeting.charAt(4); // last is ’o
要想得到第 i 个码点,应该使用下列语句
int index = greeting.offsetByCodePoints(int startlndex, int cpCount)//返回从 startlndex 代码点开始,位移 cpCount 后的码点索引。
int cp = greeting.codePointAt(index);//返回从给定位置开始的码点。
6.控制流程:
多重选择:switch ..case..break, case标签可以为:
• 类型为 char、byte、 short 或 int 的常量表达式。
• 枚举常量。
• 从 Java SE 7开始, case 标签还可以是字符串字面量。
7.大数值:java.math 包中的两个很有用的类:Biglnteger 和 BigDecimal 这两个类可以处理包含任意长度数字序列的数值。
Biglnteger 类实现了任意精度的整数运算, BigDecimal 实现了任意精度的浮点数运算。
遗憾的是,不能使用人们熟悉的算术运算符(如:+ 和 *) 处理大数值。 而需要使用大数值类中的 add 和 multiply 方法。
Biglnteger c = a.add(b); // c = a + b
Biglnteger d = c.multiply(b.add(Biglnteger.valueOf(2))); // d = c * (b + 2)