首页 > 代码库 > Java核心技术 卷1 读书笔记 (3 Java基本程序设计结构)

Java核心技术 卷1 读书笔记 (3 Java基本程序设计结构)

3.3 数据类型

Java是强类型语言,必须为每一个变量声明一种类型。


3.3.1 整型

Java 提供四种整型

int 4字节

short 2字节

long 8字节
byte 1字节

长整型(long)数值有一个后缀L(例如40000000000L),十六进制数值有一个前缀0x(例如0xCAFE),八进制数值有一个前缀0(例如010)。


3.3.2 浮点型

Java提供两种浮点类型

float 4字节

double 8字节

float类型的数值有一个后缀F(例如3.42F),没有后缀F的浮点数值(例如3.4)默认为double类型,也可以在浮点数值后面添加后缀D(例如3.4D),表示double类型。

浮点数值不适用于禁止出现舍入误差的金融计算中,例如:

public static void main(String[] args) {

		System.out.println((2.0 - 1.1));

	}

将打印出0.8999999999999999,而不是我们想像的0.9,其主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确的表示分数1/10。如果需要在数值计算中不含有任何舍入误差,就应该使用BigDecimal类。


3.3.3 char类型

char类型表示单个字符,通常用来表示字符常量。


3.3.4 boolean类型

boolean类型有两个值:false和true,在Java中,整型值和布尔值之间不能进行相互转换。


3.4 变量

在Java中,每个变量属于一种类型。

变量必须是一个以字母开头的由字母和数字构成的序列。

我们可以使用Character.isJavaIdentifierPart(ch)方法来判断ch是不是一个合法的Java中的字母。


3.4.1 变量初始化

声明一个变量之后,必须用赋值语句对变量进行显式初始化,千万不要使用未被初始化的变量。


3.4.2 常量

在Java中,利用关键字final声明常量。

关键字final表示这个变量只能被赋值一次,一旦被赋值之后,就不能够再更改了,习惯上,常量名使用大写。


3.5 运算符

整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。示例代码如下,可以放到eclipse中试一下:

public static void main(String[] args) {

		System.out.println(2 / 0);
		System.out.println(2.0 / 0);
		System.out.println(0.0 / 0);

	}

3.5.1 自增运算符和自减运算符


3.5.2 关系运算符与boolean运算符


3.5.3 位运算符


3.5.4 数学函数与常量


3.5.5 数值类型之间的转换


3.5.6 强制类型转换

如果想对浮点数进行舍入运算,以便得到最接近的整数,需要使用Math.round ()方法,例如:

	public static void main(String[] args) {

		double b = 2.68;
		int x = (int) b;
		int y = (int) Math.round(b);
		
		System.out.println("x=" + x + " y=" + y);
	}


3.5.7 括号与运算级别


3.5.8 枚举类型


3.6 字符串


3.6.1 子串

substring()


3.6.2 拼接

+


3.6.3 不可变字符串

String greeting = "Hello";

如何想将greeting的内容修改为“Help!”,不能直接地将greeting的最后两个位置的字符修改为‘p‘和‘!‘,需要使用以下方式:

greeting = greeting.substring(0,3) + "p!";

由于不能修改Java字符串中的字符,所以在Java文档中将String对象称为不可变字符串

不可变字符串有一个优点:编译器可以让字符串共享。

Java设计者认为共享带来的高效率远远胜过于提取、拼接字符串所带来的低效率。


3.6.4 检测字符串是否相等

需要注意的是Java里面只有字符串常量是共享的,而由substring和+所产生的结果并不是共享的。


3.6.5 代码点和代码单元

Java字符串是由char序列组成。字符数据类型是一个采用UTF-16编码表示Unicode代码点的代码单元。


3.6.6 字符串API


3.6.7 阅读联机API文档


3.6.8 构建字符串

当需要频繁的拼接字符串操作时,优先考虑使用StringBuilder。


3.7 输入输出


3.7.1 读取输入

public class InputTest {

	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);

		// get first input
		System.out.println("What is your name?");
		String name = in.nextLine();

		// get second input
		System.out.println("How old are you?");
		int age = in.nextInt();

		// display output on console
		System.out.println("Hello, " + name + ", next year ,you will be "
				+ (age + 1) + ".");
	}
}

3.7.2  格式化输出


3.7.3 文件输入和输出


3.8 控制流程


3.8.1 块作用域


3.8.2 条件语句


3.8.3 循环


3.8.4 确定循环


3.8.5 多重选择:switch语句


3.8.6 中断控制流程语句


3.9 大数值

BigInteger 和 BigDecimal


3.10 数组


3.10.1 for each循环


3.10.2 数组初始化以及匿名数组


3.10.3 数组拷贝


3.10.4 命令行参数


3.10.5 数组排序


3.10.6 多维数组


3.10.7 不规则数组