Java语言基础
JAVASE
-1. Java语言基础
1.1 变量和数据类型
整数类型笔试考点:
标识符命名数字不能开头,避免混淆直接量和标识符,如
25025021321L
代码是否有错,若有请说出原因
int i2 = 25;
byte be = i2;
错误:不兼容的类型,从int转换到byte可能会有损失
1.2 运算符
1.2.1 赋值运算符考点:
byte b1 = 10;
b1 = b1 + 2;
错误:不兼容的类型,从int转换到byte可能会有损失
byte + int 结果是 byte
byte b1 = 10;
b1 = b1 + (byte)2;
错误:不兼容的类型,从int转换到byte可能会有损失
byte + byte 结果还是 int
编译器优化(类型提升)将byte转为int, 避免运算超过byte最大范围造成高位溢出
byte b1 = 10;
b1 = (byte)(b1 + 2);
得到b1=12
byte b1 = 10;
b1 += 2;
等价于
b1 = (byte)(b1 + 2);
对于小类型运算,运算符+=不光结果上相等还包括了类型强制转换
1.2.2 移位运算符
byte b1 = 13;
13的二进制是:0000 1101
byte b2 = b1 << 1;
错误:不兼容的类型,从int转换到byte可能会有损失 (编译器优化)
byte b2 = (byte) (b1 << 1)
0000 1101 -> 0001 1010
规则
左移运算符 <<
byte b1 = 13;
b1 << 1
b1 = 26, 左移1位相当于当前整数的数值*2
b1 << 2
b1 = 52,左移2位相当于当前整数的数值*4
右移运算符 >>
b1 >> 1
b1 = 6,右移1位相当于当前整数的数值/2
b1 >> 2
b1 = 3,右移2位相当于当前整数的数值/4
*逻辑右移对于非负数来说和右移的效果一致
1.2.3 位运算符
byte b1 = 11;
byte b2 = 13;
b1的二进制位:0000 1011
b2的二进制位:0000 1101
b1 & b2
按位与:同一为一,一0为0
按位与后二进制为:0000 1001 => 十进制为9
b1 | b2
按位或:一1为1,同0为0
按位或后二进制位:0000 1111=>十进制为15
b1 ^ b2
按位异或:相同为0,不同为1
按位异或后二进制:0000 0110=>十进制为6
~ b1
按位取反:1为0,0为1
按位取反后二进制:1111 0100=>十进制为-12
1.2.4 自增减运算符考点
int ia = 10;
System.out.println(ia++) //10
System.out.println("ia =" + ia) //11
System.out.println(++ia) //12
System.out.println("ia =" + ia) //12
ia++ 这个整体叫做表达式,其中ia叫做操作数/变量,也就是ia++和ia表示不同的含义,因此所占的内存空间也不同
System.out.println(ia++) 是在打印表达式的结果
后++表示先让变量的值作为整个表达式的最终结果,然后再让ia变量自身的数值加1
前++表示先让变量自身的数值加1,然后再让变量的数值作为整个表达式的结果
int ia = 10;
int ib = ia++;
System.out.println("ib =" + ib) //10
System.out.println("ia =" + ia) //11
int ic = ++ia;
System.out.println("ic =" + ic) //12
System.out.println("ia =" + ia) //12
int ia = 10;
System.out.println(ia++ + ++ia) //10+12=22
System.out.println("ia =" + ia) //12
1.3 流程控制语句
do-while后有; while 和 for循环后都没有分号
int i = 1;
while(i <= 1000){
System.out,println(i);
i++;
}
代码循环执行1000次
int i = 1;
while(i <= 1000);{
System.out,println(i);
i++;
}
延时,啥也不干,此时代码相当于
int i = 1;
while(i <= 1000){
;
}
{
System.out,println(i);
i++;
}
; 表示空语句
Case 穿透
int i=3;
switch (i) {
default: System.out.println("default");
case 0: System.out.println("zero"); break;
case 1: System.out.println("one"); break;
case 2: System.out.println("two"); break;
}
输出结果为 default zero,因为default语句后没有break关键字因此进行了case穿透,执行了case0后的语句直至break跳出该结构
1.4 数组以及应用
1.4.1 内存结构分析
int num = 2; //声明一个初始值为2的基本变量
int[] arr1 = new int[2]; //引用变量


浙公网安备 33010602011771号