Java基本的程序设计结构
目录
注释
注释有两种。
一种是行注释:
//这是注释
另一种是块注释
/**
* 这是块注释
*/
数据类型
java中一共有8种基本数据类型:整型、浮点型、布尔型、字符类型。
整型
| 类型 | 大小(字节) | 取值 |
|---|---|---|
| byte | 1 | -27~27-1 |
| short | 2 | -215~215-1 |
| int | 4 | -231~231-1 |
| long | 8 | -263~263-1 |
- 长整数类型后面跟有一个后缀L,如:1234424242L。
- 十六进制数值有一个前缀0x,如:0x123。
- java没有任何无符号类型。
- 不加后缀的数字(即便有0x前缀)默认为int类型。
浮点类型
| 类型 | 大小(字节) | 取值 |
|---|---|---|
| float | 4 | 有效数字6-7位 |
| double | 8 | 有效数字15位 |
- double类型后缀为D。
- float类型后缀为F。
- 浮点值默认为double。
- 可以用“尾数e指数”或“尾数p指数”形式表达浮点数。
- 尾数e指数:指数基数是10;用于十进制尾数。
- 尾数p指数:指数基数是2;用于十六进制尾数。
- 浮点运算遵循IEEE 754规范,用正无穷、负无穷、NaN来表示溢出和出错。
- 在Float和Double类型中用常量POSITIVE_INFINITY、NEGATIVE_INFINITY、NaN表示上述三个值。
- 对NaN值的判定不应用“==”,而要用isNaN等静态方法;但是对无穷的判定可以用“==”;如下。
//验证java中浮点值NaN和无穷值
public static void verifyNaN() {
//NaN
System.out.println(Double.NaN == Double.NaN);
System.out.println(Double.isNaN(Double.NaN));
//POSITIVE_INFINITY
System.out.println(Double.POSITIVE_INFINITY == Double.POSITIVE_INFINITY);
System.out.println(Double.POSITIVE_INFINITY + 1 == Double.POSITIVE_INFINITY);
}
调用结果:
false
true
true
true
字符类型
java中的字符类型和C中的字符类型不同。
-
C中字符大小为单字节,而java中字符大小为双字节。
-
C的字符类型表示Ascii字符。java的字符类型表示Unicode字符类型(可以表示中文)。
-
java中字符的三种形式:字符本身、转义字符、Unicode编码;如下。
//java字符的三种表示
public static void charFormat() {
//字符本身
System.out.println("字符本身:");
System.out.println(\'哈\');
System.out.println(\'A\');
//转义字符
System.out.println("转义字符:");
System.out.print(\'A\');
System.out.print(\'\t\');
System.out.println(\'B\');
//Unicode编码
System.out.println("Unicode编码:");
System.out.println(\'\u03C0\');//pai
}
调用结果:
字符本身:
哈
A
转义字符:
A B
Unicode编码:
π
- Unicode编码的目的是统一各种编码格式,由于最初的Unicode字符集并不大,因此java采用了双字节字符类型。然而后来Unicode字符集急剧扩充,双字节已经不够用了,下面解释java解决这个问题的办法。
- Unicode将所有字符编码,将这个编码值称为代码点(codePoint)。
- 对于0x0000-0xffff直接的字符,可以用双字节的char表示,因此对应字符集合称为基本多语言平面(BMP),而0xffff以上的成为增补字符集,增补字符集无法用char表示,需要用String类、char[]等表示。
- 代码点是指一个Unicode字符,而代码单元是指一个内存中的双字节char,对于bmp字符,一个代码点对应一个代码单元,而对于增补字符,一个代码点对应两个代码单元。
- String.length(),返回的是代码单元的数量,而不是代码点的数量。
//java中的代码点、代码单元
public static void codePoint() {
char ch = \'\u0041\';//bmp字符
//ch = \'\u1d56b\';//增补字符,这样写会报错,因为增补字符超出了char的表示范围
String str = new String(Character.toChars(0x1d56b));//增补字符
//length()方法返回的是代码单元(char)数量,一个增补字符占据两个代码单元;
System.out.println(str + ":" + str.length());
}
调用结果: