命名习惯

之所以说是习惯,是因为并不是编译标准,不遵守不大部分情况下也不会报错,但不可否认的是好的习惯非常重要。

类名: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

浮点数常常无法精确表示,并且浮点数的运算结果可能有误差;

比较两个浮点数通常比较它们的绝对值之差是否小于一个特定值;

整型和浮点型运算时,整型会自动提升为浮点型;

可以将浮点型强制转为整型,但超出范围后将始终返回整型的最大值。

摘自:Java 教程 - 廖雪峰