Java 复习笔记(一) - 转自 廖雪峰的 Java 教程
命名习惯
之所以说是习惯,是因为并不是编译标准,不遵守不大部分情况下也不会报错,但不可否认的是好的习惯非常重要。
类名:camal 形式,首字母大写,尽量不用数字和下划线
方法名:camal 形式,首字符小写,尽量不用数字和下划线
变量名:camal 形式,首字母小写,可以使用少量数字和下划线
常量名:字母全部大写
数据类型
分为基本类型和引用类型。
基本类型包括整数类型、浮点数类型、字符类型、布尔类型。
引用类型的变量类似于C语言的指针,它内部存储一个“地址”,指向某个对象在内存的位置。
var 关键字
使用 var 定义变量主要在类名比较长,实例化对象时用 var 定义对象,相当于缩写,编译器内部会自动判断识别其真实类型。
所以用 var 替代较长的类型名,仅仅是少写了变量类型而已。
移位运算和位运算
移位运算是计算机内部针对二进制数做的一种运算,左移实际上就是不断地×2,右移实际上就是不断地÷2。
// 左移
int n = 7; // 00000000 00000000 00000000 00000111 = 7
int a = n << 1; // 00000000 00000000 00000000 00001110 = 14
int b = n << 2; // 00000000 00000000 00000000 00011100 = 28
int c = n << 28; // 01110000 00000000 00000000 00000000 = 1879048192
int d = n << 29; // 11100000 00000000 00000000 00000000 = -536870912
// 右移
int n = 7; // 00000000 00000000 00000000 00000111 = 7
int a = n >> 1; // 00000000 00000000 00000000 00000011 = 3
int b = n >> 2; // 00000000 00000000 00000000 00000001 = 1
int c = n >> 3; // 00000000 00000000 00000000 00000000 = 0
// 不带符号的右移运算,使用>>>,它的特点是符号位跟着动
int n = -536870912;
int a = n >>> 1; // 01110000 00000000 00000000 00000000 = 1879048192
int b = n >>> 2; // 00111000 00000000 00000000 00000000 = 939524096
int c = n >>> 29; // 00000000 00000000 00000000 00000111 = 7
int d = n >>> 31; // 00000000 00000000 00000000 00000001 = 1
位运算是按位进行与、或、非和异或的运算。
对两个整数进行位运算,实际上就是按位对齐(二进制),然后依次对每一位进行运算。
int i = 167776589; // 00001010 00000000 00010001 01001101
int n = 167776512; // 00001010 00000000 00010001 00000000
System.out.println(i & n); // 167776512
位运算应用:上述按位与运算实际上可以看作两个整数表示的 IP 地址 10.0.17.77 和 10.0.17.0,通过与运算,可以快速判断一个IP是否在给定的网段内。
整型运算
整数运算的结果永远是精确的;
运算结果会自动提升;
可以强制转型,但超出范围的强制转型会得到错误的结果;
应该选择合适范围的整型(int或long),没有必要为了节省内存而使用byte和short进行整数运算。
浮点数运算
整数运算在除数为 0 时会报错,而浮点数运算在除数为 0 时,不会报错,但会返回几个特殊值:
NaN 表示 Not a Number
Infinity 表示无穷大
-Infinity 表示负无穷大
例如:
double d1 = 0.0 / 0; // NaN
double d2 = 1.0 / 0; // Infinity
double d3 = -1.0 / 0; // -Infinity
浮点数常常无法精确表示,并且浮点数的运算结果可能有误差;
比较两个浮点数通常比较它们的绝对值之差是否小于一个特定值;
整型和浮点型运算时,整型会自动提升为浮点型;
可以将浮点型强制转为整型,但超出范围后将始终返回整型的最大值。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。