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];  //引用变量

posted @ 2020-10-12 23:12  Pengc931482  阅读(97)  评论(0)    收藏  举报