switch语句
1.case穿透:
语句体中没有写break导致的,程序会执行下一个case,直到遇到break或者}结束
使用场景:如果多个case的语句体重复了,可以考虑使用case穿透去简化代码。
switch (number){
case 1:
case 2:
case 3:
System.out.println("hello");
break;
}
或者
switch (number){
case 1,2,3:
System.out.println("hello");
break;
}
注:default可以省略,语法不会有问题,但不建议省略
2.switch新特性(jdk12后支持)
正常写法:
int number = 1;
switch (number){
case 1:
System.out.println("one");
break;
case 2:
System.out.println("two");
break;
case 3:
System.out.println("three");
break;
default:
System.out.println("none");
break;
}
采用switch新特性后-->用->{}代替,可以省略break
int number = 1;
switch (number){
case 1->{
System.out.println("one");
}
case 2->{
System.out.println("two");
}
case 3->{
System.out.println("three");
}
default -> {
System.out.println("none");
}
}
特别的,如果case后语句体只有一行,{}也可以省略,从而进一步简化代码
int number = 1;
switch (number) {
case 1 -> System.out.println("one");
case 2 -> System.out.println("two");
case 3 -> System.out.println("three");
default -> System.out.println("none");
}
2.Random类
1.使用
①导包
import java.util.Random;
②创建对象
Random r=new Random();
③生成随机数
(在小括号中,书写的使随机生成数的范围,这个范围一定是从0开始的,到这个数-1结束)
int number=r.nextInt(随机数的范围);
2.生成任意范围的随机数
如7~15 :
①让头和尾都减去一个值x,使这个范围从0开始--> (7~15)-7 -->0~8
②尾巴+1 -->8+1=9
③最终的结果,再加上第一步减去的值x
Random r=new Random();
int number=r.nextInt(9)+7;
System.out.println(number);
3.数组
1.静态初始化
①完整格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
如:int[] array = new int[]{1,2,3};
②简化格式:
数据类型[] 数组名 = {元素1,元素2,元素3...};
如:int[] array = {1,2,3};
2.扩展:解释地址值的格式含义
int[] array=new int[]{1,2,3};
System.out.println(array);//[I@4eec7777
[ :表示当前是一个数组
I :表示当前数组里面的元素类型都是(I)int类型的
@ :表示一个间隔符号(固定格式)
4eec7777 :数组真正的地址值
注:但平时我们习惯会把这个整体叫做数组的地址值
3.动态初始化和默认初始值
数据类型[] 数组名 = new 数据类型[数组长度];
String[] arr=new String[5];
arr[0]="zhangsan";
arr[1]="lisi";
System.out.println(arr[0]);
System.out.println(arr[1]);
//此时arr[2]没有赋值,打印出来的是默认初始化值null
System.out.println(arr[2]);
数组默认初始化值:
整数类型-->默认初始化0
小数类型-->默认初始化0.0
字符类型-->默认初始化'/u0000' 即空格
布尔类型-->默认初始化false
引用数据类型-->默认初始化null
4.栈空间与堆内存
数组初始化分三步:
①先在栈空间里开辟一个空间,变量名为数组名
②在堆内存中开辟一个空间,存放数组元素(new创建的,会在堆内存中开辟空间并产生地址)
③将堆内存中的地址值赋值给栈空间中的变量
int[] arr1={11,22};
// 这里arr2只在栈空间定义了一个名为arr2的变量,值为arr1所存储的地址值
// 并没有在堆内存中重新开辟一个空间,所以arr2和arr1的值一样,共用堆内存中的同一块区域
int[] arr2=arr1;
//修改前的值
System.out.println(arr1[0]);//11
System.out.println(arr2[0]);//11
arr2[0]=3;
//修改后的值
System.out.println(arr1[0]);//3
System.out.println(arr2[0]);//3
4.二维数组
1.静态初始化
①完整格式
数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2},{元素1,元素2}...};
int[][] arr = new int[][]{{1, 2, 3}, {4, 5, 6, 7, 8}};
注:二维数组中一维数组的长度可以是不一样的
②简化格式
数据类型[][] 数组名 = {{元素1,元素2},{元素1,元素2}...};
如:int[][] arr = {{1, 2, 3}, {4, 5, 6, 7, 8}};
为了方便阅读,我们习惯把每个一维数组单独写成一行
int[][] arr = {
{1, 2, 3},
{4, 5, 6, 7, 8}
};
2.动态初始化
数据类型[][] 数组名 = new 数据类型[m][n];
m表示这个二维数组,可以存放多少个一维数组
n表示每一个一维数组,可以存放多少个元素
注:在n给定情况下-->java会自动创建一维数组,所有一维数组长度均一样,均为n,初始化默认值
int[][] arr = new int[3][4];
arr0][0] = 1;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println("");
}
运行结果:
特别的,如果n不给定,java将不会自动创建一维数组,此时arr[i]的值应为null
但优点在于更加灵活,一维数组长度可以随意构建,可以不一样长(new int[]不能省略)
int[][] arr = new int[2][];
System.out.println(arr[0]);//null
//但优点在于更加灵活,一维数组长度可以随意构建,可以不一样长(new int[]不能省略)
arr[0]=new int[]{11,22};
arr[1]=new int[]{33,44,55};
System.out.println(arr[0]);//[I@4dd8dc3
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println("");
}
运行结果:
3.二维数组的内存图
①int[][] arr = new int[2][3];
②int[][] arr = new int[2][];
③
int[][] arr = new int[2][];
int[] arr1 = {11,22};
int[] arr2 = {44,55,66}
arr[0] = arr1;
arr[1] = arr2;