Java基础概念
一、注释
- 单行注释 //注释信息
- 多行注释 /*注释信息*/
- 文档注释 /**注释信息*/
二、关键字
关键字:被Java赋予了特定含义的英文单词
- 关键字的字母全部小写
- 关键字有特殊的颜色标记
三、字面量
字面量:数据在程序中的书写格式
字面量类型 | 整数类型int | 小数类型double | 字符串类型String | 字符类型char | 布尔类型boolean | 空类型null |
变量:表示内存中的一个存储区域(不同的变量,类型不同,占用空间大小不同)。变量必须先声明,后使用
- byte - 1字节
- short - 2字节
- int - 4字节
- double - 8字节
四、数据类型
每一种数据都定义了明确的数据类型,在内存中指定了
- 基本数据类型
- 整数型:整数类型(byte[1], short[2], int[4], long[8])、浮点类型(float[4], double[8])
- 字符型(char[2]):存放单个字符
- 布尔型(boolean[1]):存放true,flase
- 引用数据类型
- 类(class)
- 接口(interface)
- 数组([])
五、细节
- 声明double:
double num = 1.1;
- 声明float:
float num = 1.1f;
或float num = 1.1F;
double num1 = 2.7; double num2 = 8.1/3;
num2<num1- 小数的比较大小,应当以两个数的差值的绝对值在某个精度范围内判断
- 字符(ASCII码)
六、数据类型转换
1.自动类型转换
自动类型转换:精度小的类型自动转换为精度大的数据类型。
- 精度大小排序:
- char -> int -> long -> double
- byte -> short -> int -> long -> float -> double
- 例如:int a = ‘c’; 或 double d = 80; // 这俩是对的定义
- 例如:int b = 18.0; //错误定义
- String字符串不是基本类型
- 当有多种数据类型的数据混合运算时,系统首先会将所有数据转换成运算数据里精度最大的数据类型,然后再进行计算
public class AutoConvertDetail {
public static void main(String[] args) {
int i = 10;
float f1 = i + 1.1; // 错误定义,f1应是double型
double d1 = i + 1.1; // 正确定义
float f2 = i + 1.1F; // 正确定义,f2是float型
// byte\short即使是单独进行运算时,系统都会将其转换为int型
byte b1 = 10; // 正确定义,byte范围为-128~127,而定义byte类型的数据时,系统会先判断该数是否在byte范围内
byte b2 = i; // 错误定义,因为i是int型,而int是无法转换为byte型
short s1 = 1;
short s2 = b1 + s1; // 错误定义,此时的s2应是int型
byte b3 = 1;
byte b4 = b1 + b3; // 错误定义,b4应是int型
}
}
2.强制类型转换
强制类型转换:自动类型转换的逆过程。将精度大的数据类型转换为精度小的数据类型,但此操作可能造成精度降低或溢出。
public class ForceConvert {
public static void main(String[] args) {
int i = (int)1.9; // i = 1 造成精度损失
byte b = (byte)2000; // b = -48 造成精度溢出
}
}
3.String
// String类型转换成double类型
String str1 = "0423";
double d = Double.parseDouble(str);
// char类型转换成String类型
char c = '绪';
String str2 = c + "";
七、进制
- 二进制:0, 1,以0b或0B开头表示
- 十进制:0-9
- 八进制:0-7,以0开头表示
- 十六进制:0-9及A(10)-F(15),以0x或0X开头表示
int n1 = 0b1010;
int n2 = 1010;
int n3 = 01010;
int n4 = 0x10101;
八、位移
- >>:算术右移 - 低位溢出,符号位不变,并用符号位补溢出的高位
- <<:算术左移 - 符号位不变,低位补0
- >>>:逻辑右移(无符号右移) - 低位溢出,高位补0
- <<<:没有这个符号
- ~:按位 取反
- &:按位 与
- |:按位 或
- ^:按位 异或
* 九、原码/反码/补码
二进制的最高位是符号位:0-正数,1-负数
- 正数的原码/反码/补码均一样
- 负数的反码 = 其原码符号位不变,其余位取反 = 其补码 - 1
- 负数的补码 = 其反码 + 1
- 0的反码/补码都是0
- java没有无符号数,即java中的数都是有符号的
在计算机运算时,都是以【补码】的方式来运算的,看运算结果时,都是看【原码】。
2的原码:00000000 00000000 00000000 00000010
2的补码:00000000 00000000 00000000 00000010
-2的原码:10000000 00000000 00000000 00000010
-2的原码:11111111 11111111 11111111 11111101
-2的补码:11111111 11111111 11111111 11111110
3的原码:00000000 00000000 00000000 00000011
3的补码:00000000 00000000 00000000 00000011
-3的原码:10000000 00000000 00000000 00000011
-3的反码:11111111 11111111 11111111 11111100
-3的补码:11111111 11111111 11111111 11111101
【计算机运算时以“补码”方式来运算】
(1)~-2:-2按位 取反
运算后的补码:00000000 00000000 00000000 00000001
转为反码:00000000 00000000 00000000 00000001
原码结果:00000000 00000000 00000000 00000001
结果:1
(2)2&3:2和3按位 与
运算后的补码:00000000 00000000 00000000 00000010
原码结果:00000000 00000000 00000000 00000010
结果:2
(3)2|3:2和3按位 或
运算后的补码:00000000 00000000 00000000 00000011
原码结果:00000000 00000000 00000000 00000011
结果:3
(4)-3^3:-3和3按位 异或
运算后的补码:11111111 11111111 11111111 11111110
转为反码:11111111 11111111 11111111 11111101
原码结果:10000000 00000000 00000000 00000010
结果:-2
(5)int a = 1 >> 2:1算术右移2位
1的原码/反码/补码:00000000 00000000 00000000 00000001
【算术右移:符号位为0,符号位不变,高位补符号位0】
补码/原码:00000000 00000000 00000000 00000000
结果:0(1/2/2=0)
(6)int b = -1 << 2:1算术左移2位
-1的原码:10000000 00000000 00000000 00000001
-1的反码:11111111 11111111 11111111 11111110
-1的补码:11111111 11111111 11111111 11111111
【算术左移:符号位不变,低位补0】
补码:11111111 11111111 11111111 11111100
反码:11111111 11111111 11111111 11111011
原码:10000000 00000000 00000000 00000100
结果:-4(-1*2*2=-4)
(7)int c = 3 >>> 2:3无符号右移2位
3的原码/反码/补码:00000000 00000000 00000000 00000011
【逻辑右移:低位溢出,高位补0】
补码/原码:00000000 00000000 00000000 00000000
结果:0
以上可以通过System.out.println(3>>>2);
进行检查结果。