参考书籍:《Java核心技术》(第9版,卷1)
电子书见:http://download.csdn.net/detail/octopusflying/9617055
Java中有8种基本数据类型:4种整型(byte、short、int、long),2种浮点类型(float、double)、1种表示Unicode编码的字符单元的字符类型(char),1种表示是非的布尔类型(boolean)。
整数类型
1、Java中有8种基本数据类型:4种整型、2种浮点类型、1种表示Unicode编码的字符单元的字符类型,1种表示是非的布尔类型。
2、4种整型类型:
类型 | 存储需求 | 取值范围 |
int | 4字节 | -2147483648 ~ 2147483647 |
short | 2字节 | -32768 ~ 32767 |
long | 8字节 | -9223372036854775808 ~ 9223372036854775807 |
byte | 1字节 | -128 ~ 127 |
在Java中,整型的范围与运行Java代码的机器无关,保证在所有机器上都能得到相同的运行结果。
3、长整型数值有一个后缀L,十六进制数值有一个前缀0x,八进制有一个前缀0。八进制表示法比较容易混淆,最好不要使用。
4、Java7开始,加上前缀0b即可以写二进制数。
5、Java7开始,可以在数字中加下划线(1_000_000)。加下划线只是为了然人更易读,Java编译器会去除这些下划线。
浮点类型
1、两种浮点类型:
类型 | 存储需求 | 取值范围 |
float | 4字节 | 大约±3.40282347E+38F(有效位数为6-7位) |
double | 2字节 | 大约±1.79769313486231570E+308(有效位数为15位) |
2、float类型有一个后缀F,没有后缀F的浮点数值默认为double类型,也可以在浮点数值后加后缀D。
3、Java中所有浮点数值都遵循IEEE 754规范。
4、用于表示溢出和出错情况的三个特殊浮点数值:
a) 正无穷大:Double.POSITIVE_INFINITY。
b) 负无穷大:Double.NEGTIVE_INFINITY。
c) NaN:不是一个数字。Double.NaN。
5、一个正整数除以0结果为正无穷大。计算0/0或者负数的平方根结果为NaN。
字符类型
1、char类型用于表示单个字符。
2、\u表示Unicode编码单元。
public static void main(String\u0058\u005D args)
3、特殊字符和转义序列符
转义序列 | 名称 | Unicode值 | 转义序列 | 名称 | Unicode值 |
\b | 退格 | \u0008 | \” | 双引号 | \u0022 |
\t | 制表 | \u0009 | \’ | 单引号 | \u0027 |
\n | 换行 | \u000a | \\ | 反斜杠 | \u005c |
\r | 回车 | \u000d |
|
|
|
布尔类型
1、boolean类型有两个值:false和true,用于判定逻辑条件。整型值和布尔值之间不能相互转换。
变量
1、每一个变量属于一种类型。在声明变量时,变量所属的类型位于变量名之前。
2、变量名必须是一个以字母开头的由字母或数字构成的序列。字母包括:’A’ ~ ‘Z’、’a’ ~‘z’、’_’、’$’ 或在某种语言中代表字母的任何unicode字符。数字包括’0’ ~ ‘9’ 和在某种语言中代表数字的任何Unicode字符。
3、变量中不能出现’+’、不能出现空格。
4、变量名大小写敏感,长度没有限制。
5、尽管 ’$’ 是一个合法的字符,但不要在自己的代码中使用这个字符。它只用在Java编译器或其他工具生成的名字中。
6、声明一个变量后,必须使用赋值语句对变量进行显示初始化,Java编译器认为使用未初始化的变量的做法是错误的。
7、变量的声明尽量靠近变量第一次使用的地方,这是一种良好的程序编写风格。
常量
1、在Java中,利用关键字final指示常量。
2、关键字final表示的变量只能被赋值1次,一旦被赋值之后,就不能再改变。
3、习惯上,变量名使用全大写。
运算符
1、在Java中,使用 ‘+’、’-’、’*’、’/’ 表示加、减、乘、除运算。
2、当参与除法运算的两个操作数都是整数时,表示整数除法(结果仅保留整数部分);否则表示浮点除法。
3、整数的求余操作用 ‘%’ 表示
4、整数被0除将会产生一个异常,浮点数被0除将会得到无穷大或NaN结果。
5、可以在赋值语句中采用一种简化格式书写二元算术运算符:
x += 4; 等价于 x = x + 4;
66、 在Java中,借鉴了C和C++的实现方式,也使用了自增、自减运算符: n++、n-- 。
7、自增、自减运算符的操作数不能是数值。(4++是非法的)。
8、Java包含各种关系运算符。==(相等)、>=(大于等于)、<=(小于等于)。
9、Java沿用了C++的习惯,用&&表示逻辑“与”, 用 || 表示逻辑“或”、用 ! 表示“非”。
10、&& 和 || 按照短路方式求值。
11、Java支持三元操作符 ? :
12、在处理整型数值是,可以直接对组成整型数值的各个位进行操作。可以使用屏蔽技术获得证书中的各个位。
13、位运算符包括:&(与)、|(或)、^(异或)、~(非)。
14、使用 >> 和 << 运算符将二进制位进行右移或左移操作(算术移位)。>>> 用0填充最高位(逻辑移位),没有 <<< 运算符。
数学函数与常量
1、在Math类中,包含了各种各样的数学函数。
//平方根:
Math.sqrt(x)
//幂运算:
Math.pow(x, a)
//三角函数:
Math.sin(x)
Math.cos(x)
Math.tan(x)
Math.atan(x)
Math.atan2(x)
//指数、对数函数:
Math.exp(x)
Math.log(x)
Math.log10(x)
//常数:
Math.PI
Math.E
2、不必在所有数学方法名和常量名前加前缀Math,只要在源文件的顶部加上下面这行代码就可以了:
import static java.lang.Math.*;
数值类型之间的转换
1、数值类型之间的合法转换:
图中实线箭头表示无损转换,虚线箭头表示有损转换,转换过程肯能会丢失精度。
2、当进行二元操作运算时,需要先将连个操作数转化为同一种类型,然后再进行计算:
·如果两个操作数中有一个是double类型,另一个操作数就会转化为double类型。
·否则,如果其中一个操作数是float类型,另一个操作数将会转化为float类型。
·否则,如果其中一个操作数是long类型,另一个操作数将会转化为long类型。
·否则,两个操作数都转化为int类型。
3、Java中允许强制类型转换。
4、&&运算符的优先级比||运算符高、+= 和 -= 是右结合运算符。
枚举类型
1、Java可以自定义枚举类型,枚举类型包括有限个命名的值。
enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE };
Size s = Size.MEDIUM;
字符串
1、Java字符串就是Unicode字符序列。
2、用substring方法可以获得一个字符串的子串。(substring(a, b):a:子串开始位置,b:子串结束的位置,不包括下标b,即b为第一个不想复制的位置)。
3、可以使用 + 号对字符串进行拼接。
4、当将一个字符串和一个非字符串的值进行拼接时,后者将会转换成字符串。
5、Java中的字符串是不可变的。
6、使用equals方法检测两个字符串是否相等,不可以使用 ==。
7、注意空字符串和null串的区别。
8、常用的字符串方法:
char charAt(int index) //返回指定的代码单元
int codePointAt(int index) //返回从指定位置开始或结束的代码点。
int offsetByCodePoints(int startIndex, int cpCount)
//返回从startIndex开始,位移cpCount后的代码点索引。
int compareTo(String other)
//按照字典顺序,如果字符串为与other之前,返回一个负数,如果字符串位于other之后,返回一个整数,如果
//字符串相等,返回0。
boolean endsWith(String suffix) //如果字符串以suffix结尾,返回true
boolean equals(Object other) //如果字符串与other相等,返回true。
boolean equalsIgnoreCase(String other) //如果字符串与other相等(忽略大小写),返回true。
int indexOf(String str)
int indexOf(String str, int fromIndex)
int indexOf(int cp)
int indexOf(int cp, int fromIndex)
//返回与字符串str或代码点cp匹配的第一个子串的开始位置。这个位置从索引0或fromIndex开始计算,如果在原
//始串中不存在str, 返回-1。
int lastIndexOf(String str)
int lastIndexOf(String str, int fromIndex)
int lastIndexOf(int cp)
int lastIndexOf(int cp, int fromIndex)
//返回与字符串str或代码点cp匹配的最后一个子串的开始位置。这个位置从索引0或fromIndex开始计算,如果在
//原始串中不存在str, 返回-1。
int length() //返回字符串长度。
int codePointCount(int startIndex, int endIndex)
//返回startIndex 和 lastIndex -1 之间的代码点数量。没有配成对的代用字符将计入代码点。
String replace(CharSequence oldString, CharSequence newString)
//返回一个新字符串。这个字符串用newString代替原始字符串中所有的oldString。可以用String
//或StringBuilder对象作为CharSequence参数。
boolean startsWith(String prefix)//如果字符串以prefix字符串开始,返回true。
String substring(int beginIndex)
String substring(int beginIndex, int endIndex)
//返回一个新字符串。这个字符串包含原始字符串中从beginIndex到串尾或endIndex-1的所有代码单元。
String toLowerCase()//返回一个新字符串。这个字符串将原始字符串中所有大写字母改成了小写字母
String toUpperCase()//返回一个新字符串。这个字符串将原始字符串中所有的小写字母改成了大写字母。
String trim() //返回一个新字符串。这个字符串删除了原始字符串头部和尾部的空格。
9、可以使用StringBuilder类构建字符串:
String BuilderBuilder= newStringBuilder(); builder.append(ch); // append a single character. builder.append(str); // append a string.
数组
1、数组是一种数据结构,用来存储同一类型值的集合。
2、通过一个整型达标可以访问数组中的每一个值。
3、使用new运算符创建数组:
int[] a = new int[100];
4、创建一个数字数组时,所有元素都初始化为0。boolean数组的元素会初始化为false。对象数组的元素则初始化为一个特殊值null,表示这些元素还为存放任何对象。
5、foreach 循环:Java有一种功能很强的循环结构,可以用来一次处理数组中的每个元素,而不必为指定下标而分心,格式如下:
for(variable : collection) { statements; }
6、可以使用Arrays类的toString方法来打印数组。打印结果将元素放置在括号内,并用逗号分隔,例如:[2, 3, 5, 7, 11, 13]。
7、Java提供了一种创建数组对象并同时赋予初始值的简化书写形式:
int[] smallPrimes = {2, 3, 5, 7, 11, 13};
new int[] {17, 19, 23, 29, 31, 37};
8、Java中,允许数组长度为0。在编写一个结果为数组的方法时,如果碰巧结果为空,则郑重语法形式就显得非常有用。
9、Java中,允许将一个数组变量拷贝给另一个数组变量。这是两个变量引用同一个数组:
int[] luckyNumbers = smallPrimes;
luckyNumbers[5] = 12 // now smallPrimes[5] is also 12.
10、如果希望将一个数组的所有值拷贝到一个新的数组中去,就要使用Arrays类的copyOf方法:
int[] copiedLuckyNumbers =
Arrays.copyOf(luckyNumbers, luckyNumbers.length);
第2个参数是新数组的长度。这个方法通常用来增加数组大小。
11、Java没有指针运算,不能通过a + 1 得到数组的下一个元素。
12、main方法接收一个字符串的数组作为参数,这个参数是命令行参数。
13、可以采用Arrays类中的sort方法对数组进行排序。
14、Java支持多维数组。但实际上并没有多维数组,只有一维数组,事实上,多维数组可以被解释为“数组的数组”。因此,Java中可以定义“不规则的数组(每一行具有不同的长度)”。