第三章:Java语言基础
3.1标识符与数据类型
3.1.1标识符定义规则
- 标识符包括 变量名,类名,方法名
- 以字母,下划线,或$开头,后面可以跟字母、下划线、美元符、数字
- 数字不能作为标识符的第一个字符
- 标识符不能是Java语言的关键字
- 大小写敏感,且长度没有限定
3.1.2基本数据类型
- boolean取值true false
- char型采用Unicode编码方案,每个Unicode码占用2字节(16位)内存空间,包括英文字符与中文字符
类型 | 长度 | 取值范围 |
---|---|---|
byte | 8位 | -2^7 ~2^7-1(-128-127) |
short | 16位 | -2^15 ~2^15-1 |
int (缺省) | 32位 | -2^31 ~2^31-1 |
long | 64位 | -2^63 ~2^63-1 |
float | 32位 | -2^31 ~2^31-1 |
double | 64位 | -2^63 ~2^63-1 |
3.2表达式与语句
-
位操作符:>>, <<, >>>, & , |, ^(逐位异或),~ (按位取反)
- 右移运算符:>>(等价于除2^n,往数值小取整)
- 左移运算符:<<(等价于乘2^n)
- 无符号右移:>>>(左边空位以0 填充)(32位)
- 按位异或运算符:^
- (0^0=0, 1^0=1, 0^1=1, 1^1=0)
- 任何数a,都有aa=0,a0=a
-
逻辑操作符:& , | (不短路与、或),!,^(异或),&&, ||(短路与、或)
int a = 1; int b = 2; boolean result = ((a = 9 + 3) < 10) && ((b = 8 - 3) > 4);//短路与 //boolean result = ((a = 9 + 3) < 10) || ((b = 8 - 3) > 4);//短路或 System.out.println("result=" + result);//false System.out.println("a=" + a);//12 System.out.println("b=" + b);//2 (短路或b=5)
-
自动类型转换:
1.两种类型彼此兼容
2.目标类型的取值范围大于源类型(a=b;a取值范围大于b) -
强制类型转换:
1.两种类型彼此不兼容
2.目标类型的取值范围小于源类型- 自动进行强制类型转换:+=,-=,*=,/=,%=
- 整型与浮点型可以相互转换,基本类型和数组、引用类型(String)、对象等复合类型之间不能互相转换
byte, short, char, int, long, float, double
byte a;
int b=256;
a = (byte)b;//超出数据范围
System.out.println(a);//0
//取模运算%操作对象可为浮点数
9.5 % 3 = 0.5;
- 连接字符串
System.out.println('a'); //a
System.out.println('a'+1); //98
System.out.println("hello"+'a'+1); //helloa1
System.out.println('a'+1+"hello"); //98hello
System.out.println("5+5="+5+5); //5+5=55
System.out.println(5+5+"=5+5"); //10=5+5
- 码值:
- 正数:原码 = 反码 = 补码
- 负数:反码在原码基础上除符号位外,其他按位取反,补码是其反码加1
3.3序流控制
- if关键字后的逻辑表达式必须得到一个逻辑值
if(x)//错
if(x!=0)//对
- do-while循环不管任何情况都至少执行一次
- 将一个集合作为一个整体放入for循环中,在for循环中可将集合中的元素进行逐个处理
String[] names = {”Wang”,”Zhang”,”Li”,”Wu”};
for(String option: names) {
System.out.println(option);
}
- switch语句:表达式: 必须是int类型,如byte,short,char ,int ,不能是float,double,long
常量表达式: 整型常量
3.4数组
- 数组可以声明为任何数据类型
- 声明数组时不分配内存,创建数组时分配内存
int a[];
int[] a;//声明数组无需指定长度
int[] a = new int[10];//创建数组,分配内存
int[] arr = new int[]{10,20,30};
//数组有length属性,没有length()方法
for(int i=0;i<a.length;i++)
float f[] = {2.3,4.5,5.6};//错
char[] c = new char[];//错
- 数组的复制
int[] a = {1,2,3};
int[] b;
b = a;//复制了地址
b[0] = 4;
//a[0] = b[0] = 4;
//其他数组复制方法
int[] a = {10,20,30,40,50};
int[] b = Arrays.copyOf(a,3);//[10, 20, 30]
int[] c = Arrays.copyOfRange(a,1,5);//[20, 30, 40, 50]
int[] d = new int[3];
System.arraycopy(a, 1, d, 0, 3);//[20, 30, 40]
- 多维数组
int a[][];
a = new int [3][4];
//不规则多维数组
int a[][] = new int[2][];
a[0] = new int[10];
a[1] = new int[5];