Java2核心技术第七版的学习笔记(三) Fundamental Programming Structures in Java(Java语言的基础)(二)

三、Data Types(数据类型)
1、数据类型分为整型、浮点型、字符型和bool类型。
2、整型分为int(4个字节),short(2个字节),long(8个字节),byte(1个字节)。这些长度都是固定的。
3、长整型:加L的后缀,十六进制:加0x前缀,八进制加0前缀。不提倡使用八进制的常数。
4、Java中没有无符号整数。
5、一般使用int。
6、浮点型分为float(4个字节),double(8个字节)
7、一般使用double。
8、float:加F的后缀。如果不写则默认为double。
9、也可以加上后缀D。
10、在JDK5.0中可以使用十六进制表示浮点数。0.125表示为0x1.0p-3。用p代替e,表示指数。(p表示2为底,e表示10为底)
11、有几个特殊值:正无穷大(Double.POSITIVE_INFINITY),负无穷大(Double.NEGATIVE_ INFINITY),错误值(Double.NaN),在Float类中也有相同的值。在判断错误值的时候不能用if (x == Double.NaN)的语句,必须使用if (Double.isNaN(x))。
12、浮点数总是有误差的,比如2.0 - 1.1不是0.9,而是0.8999999999999999。如果不想有误差,就用BigDecimal类吧。
13、Java中的字符型是char(2个字节)。采用了UTF-16的编码。没看懂。即使用也是使用象'A'这样的常量。文中提倡使用string类型,而不是单个char。还介绍了一些转义字符。
14、Boolean类型只有false和true两个值。整型和逻辑型不能互换使用。

下面主要介绍Code Unit、Code Point、Code Plane。
由于Java中的char是两个字节的,但是现在的字符是从0x000000~0x10FFFF,其中0x0000~0xFFFF是可以表示的,但是0x10000~0x10FFFF就没有办法用两个字节表示了。于是Java中就提出了Code Unit和Code Point的概念。
Code Point:代码点,表示从0x000000~0x10FFFF
Code Unit:代码单元,如果在0x0000-0xFFFF中间就是一个代码单元,而0x10000-0x10FFFF就是用两个代码单元进行表示,用一个值介于0xD800-0xDBFF(高8位)和介于0xDC00-0xDFFF(低8位)的数组成。
Code Plane:把所有的代码点总共分成17个Code Plane,第一个Code Plane是表示从0x0000~0xFFFF的字符,另外16个表示增补字符,表示从0x10000~0x10FFFF的字符。

UTF-16
0x0000-0xFFFF :用原来的值表示
0x10000-0x10FFFF:用一个值介于0xD800-0xDBFF(高8位)和介于0xDC00-0xDFFF(低8位)的数组成。
大于0x10FFFF的数不能编码
注意在0xD800-0xDFFF之间不应该定义任何数字。

从ISO10646到UTF-16
1、如果U<0x10000,则值和其本身一样。处理结束。
2、如果U>=0x10000,则设U'=U-0x10000,分别初始化两个整数w1=0xD800,w2=0xDC00
将U'的高10位分配给W1的底10位,U'的低10位分配给w2的低10位。
就比如 u' = yyyyyyyyyyxxxxxxxxxx
w1 = 110110yyyyyyyyyy
w2 = 110111xxxxxxxxxx

从UTF-16到ISO10646
1、如果W1<0xD800或者W1>0xDFFFF,字符的值就是W1的值,结束。
2、如果w1不介于0xD800-0xDBFF之间,值有问题,结束。
3、如果没有w2,或者不介于0xDC00-0xDFFF之间,则顺序有问题,结束。
4、建立一个无符号整数U',将w1的低10位做为U'的高10位,而w2的低10位做为U'的低10位。再加上0x10000得到字符U的值。

UTF-8

以下是网站上找的
UNICODE UTF-8
00000000 - 0000007F 0xxxxxxx
00000080 - 000007FF 110xxxxx 10xxxxxx
00000800 - 0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
00010000 - 001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
00200000 - 03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
04000000 - 7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

由上分析可以看到,UNCODE到UTF-8的转换就是先确定编码所需要的字节数,然后用UNICODE编码位从低位到高位依次填入上面表示为x的位上,不足的高位以0补充。以上是个人经验,如有错误,请不惜指教,谢过先:)

uCA -> C3 8A
1100 1010
110xxxxx 10xxxxxx
11000011 10001010
C3 8A

u F03F -> EF 80 BF
1111 0000 0011 1111 -> 1110xxxx 10xxxxxx 10xxxxxx
-> 11101111 10000000 10111111
-> EF 80 BF

在《无废话Xml》中发现UTF-8的定义是这样的:

UTF-8

0000~007F 0xxxxxxx
0080~07FF 110xxxxx 10xxxxxx
0800~FFFF 1110xxxx 10xxxxxx 10xxxxxx


四、Variables (变量)
1、定义格式:
double salary;
int vacationDays;
long earthPopulation;
boolean done;
2、注意:
(1) 必须以分号结尾
(2) 必须以字母开头,后面跟字母或数字,不能是保留字。字母和数字是Java中规定的任何的有效的可以用于标识符的字符,可以使用Character.isJavaIdentifierStart 和isJavaIdentifierPart来测试。
(3) 标识符是大小写敏感的。
3、初始化
(1) 不能使用没有初始化的变量
(2) 可以使用下面两种初始化方法,如
 int vacationDays;
 vacationDays = 12;
或 
 int vacationDays = 12;
(3) 变量可以在任何地方定义,紧靠在使用之前定义是很好的习惯。
4、常量
(1)、在Java中使用final表示常量。
 final double CM_PER_INCH = 2.54;   //方法中的常量
 public static final double CM_PER_INCH = 2.54;  //类中的常量
(2)、常量通常用大写字母表示。 

你可能感兴趣的:(java,String,语言,float,Types,variables)