JavaSE 02
1. 异常
1.1 Java中的异常指的是继承于Throwable下的Exception,与其同级的是Error
Exception主要分为两种:
- 编译时异常,Exception下的红色异常类
- 运行时异常,Exception下的蓝色异常类
1.2 关于错误和异常的结构,记住下面一张图即可
1.3 常见错误和异常
常见错误:
- StackOverFlowError
- OutOfMemoryError
常见异常:
- 空指针异常:调用toString方法和equals时容易出现
- 类型转换异常:将“qwe”转为Date时
- 数字转换异常:将“abc”转为数字时
- 数字异常:除数为0时
- 数组下标越界异常:超过数组长度时
2. Java进制相关
2.1 二进制
表示方式,标志位是 0b
int x = 0b11; //正确,最终值是3
int x = 0b2; //错误,2进制中不能出现大于等于2的值
2.2 八进制
表示方式,标志位是 0
int x = 012; //正确,最终值是10
int x = 08; //错误,8进制中不能出现大于等于8的值
2.3 十六进制
表示方式,标志位是 0x
int x = 0xf; //正确,最终值是15
int x = 0x12g; //错误,16进制中不能出现大于等于16的值(g是16)
3. Float相关
1 | 8 | 23 |
---|---|---|
表示该浮点数的正负,1正,0负 | 第一位表式乘或除法,后面7位表示指数值 | 23位有效数字 |
举例说明: 11.9的内存存储格式
(1) 将11.9化为二进制后大约是" 1011. 1110011001100110011001100…"。
(2) 将小数点左移三位到第一个有效位右侧: "1. 011 11100110011001100110 "。 保证有效位数24位,右侧多余的截取(误差在这里产生了 )。
(3) 这已经有了二十四位有效数字,将最左边一位“1”去掉,得到“ 011 11100110011001100110 ”共23bit。将它放入float存储结构的第22到第0位。
(4) 因为11.9是正数,因此在第31位实数符号位放入“0”。
(5) 由于我们把小数点左移,因此在第30位指数符号位放入“1”。
(6) 因为我们是把小数点左移3位,因此将3减去1得2,化为二进制,并补足7位得到0000010,放入第29到第23位。
最后表示11.9为: 0 1 0000010 011 11100110011001100110
4. 整数类型
- 用加号运算整数后的结果,默认是int,即使是两个byte相加,结果也是int
- 常数的默认类型是int,比如 long x = 123456789000 报错
- 加减乘除运算符会先将左右的数据类型统一
5. 运算符相关
5.1 一元运算符(a++ ,++a )> 乘除 > 加减
int a = 1;
int j = a++ + ++a * a++; //结果为10 ,先算 a++ , ++a ,再算乘法,最后加
5.2 操作数栈
int a = 1;
a = a++; //输出a为1,原理复杂,待消化
5.3 位运算符:'>>‘对应有符号移动,’>>>'对应无符号移动
注意:所有的运算符(算数运算符,逻辑运算符)在底层执行的时候都是位运算符
第一点:3>>-1 其实就是 3>>31, 3>>-2 就是3>>30
第二点:负数有符号右移左边补1,其他所有 有无符号的移动都需要补0
重点:首位符号位不参与原码,反码,补码的操作都不用处理,但是需要参与有无符号的左右移动操作
注意:所有的移动都是基于补码移动的,最后通过补码得到源码就是结果
如下示例:
Tips:世界上最遥远的距离,是我在if里你在else里,似乎一直相伴又永远分离