暑假过了一大半,刚结束实训回来休息了一个多星期才开始看书学习,争取在开学前把三本砖头书能啃多一点是一点。
由于没把编程思想带回来,于是买了本Java核心技术看看,刚开始看确实有不少收获,虽然说做过项目,但是对于一些基础只是或者细节还是不知道的,借此假期也好好研究一下。
1.Java语言的发展状况
首先看看Java的发展
版本 | 年份 | 语言新特性 | 类与接口的数量 |
---|---|---|---|
1.0 | 1996 | 语言本身 | 211 |
1.1 | 1997 | 内部类 | 477 |
1.2 | 1998 | strictfp修饰符 | 1524 |
1.3 | 2000 | 无 | 1840 |
1.4 | 2002 | 断言 | 2723 |
5.0 | 2004 | 泛型类、“for each”循环、可变元参数、自动装箱、元数据、枚举、静态导入 | 3279 |
6 | 2006 | 无 | 3793 |
7 | 2011 | 基于字符串的switch、钻石操作符、二进制字面量、异常处理改进 | 4024 |
8 | 2014 | lambda表达式、包含默认方法的接口、流和日期/时间库 | 4240 |
有些同学面试时被问到jdk7.0和8.0的区别,看一下这个发展的状况还是蛮有用的,我认为区别应该就是语言新增加的特性了。
2.数据类型
Java有8种数据类型,其中4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。
需要注意的是Java为了保证在所有机器上都能得到相同的结果,规定了各种数据类型的取值范围必须固定。
如整型的取值范围:
类型 | 存储需求 | 取值范围 |
---|---|---|
int | 4字节 | -2147483648~2147483647 |
short | 2字节 | -32768~32767 |
long | 8字节 | -9223372036854775808~9223372036854775807 |
byte | 1字节 | -128~127 |
浮点类型的取值范围:
类型 | 存储需求 | 取值范围 |
---|---|---|
float | 4字节 | 大约正负3.40282347E+38F(有效位数为6-7位) |
short | 2字节 | 大约正负1.79769313486231570E+308(有效位数为15位) |
float类型的数值有一个后缀F或者f,如1.23f,没有后缀的话就默认为double。
有三种特殊的浮点数值:
- 正无穷大
- 负无穷大
- NaN(不是一个数字,Not a Number)
这三种数值是用于表示溢出和出错情况的,例如一个正浮点数除以0的结果为正无穷大(Infinity),而负浮点数除以0的结果为负无穷大(-Infinity)。计算0.0/0或者负数的平方根结果为NaN。
正无穷大通过Double或FLoat的POSITIVE_INFINITY表示;正无穷大通过Double或FLoat的NEGATIVE_INFINITY表示;正无穷大通过Double或FLoat的NaN表示。需要注意的是所有正无穷大数值都是一样的,所有负无穷大数值都是一样的,但是NaN不与任何数值相等,即便是自身也不相等,要判断一个特定值是否是NaN只能用Double.isNaN方法。下面是代码示例:
正无穷大:
double x=1.0/0;
double y=3.0/0;
System.out.println(x);
System.out.println(x==y);
结果:
负无穷大:
double x=-1.0/0;
double y=-3.0/0;
System.out.println(x);
System.out.println(x==y);
结果:
NaN:
double x=0.0/0;
double y=0.0/0;
System.out.println(x);
System.out.println(x==y);
System.out.println(x==x);
System.out.println(Double.isNaN(x));
结果:
可以看出最后一段代码的x是NaN但是x==x也是false。
boolean类型有两个值:false和true,用来判定逻辑条件的,整型值和布尔值之间不能进行相互转换。所以对于if(x=0)在Java中是不能通过编译的,但是在C++中是可以的并且这个判断结果总是为false。
3.关键字final
在Java中,利用关键字final指示常量,例如:
final double PI = 3.1415926;
关键字final表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。习惯上常量名使用全大写。我尝试过对PI再次赋值,发现会提示语法错误并建议我把final去掉,即把PI不设置为final。
4.运算符
算数运算符+、-、*、/,即加、减、乘、除,用来进行算数运算,当参加/运算的两个操作数都是整数时,表示整数除法,否则,表示浮点除法,这也解释了为什么浮点数除以0没有报错,而整数除0会报错,因为浮点数除以0会被处理成除以0.0,所以会得到正无穷或者负无穷,所以整数除以0.0也会得到无穷大,查了资料,大家都说因为0.0是浮点数,并不精确,所以只是一个非常接近0的数。
今天就先写到这里了,晚安!