目录
1、 switch
- 表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的类型,比如输入的是字符,而常量是int
- switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum[枚举].String)
- case子句中的值必须是常量,而不能是变量
- default子句是可选的,当没有匹配的case时,执行default
- break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有写break,程序会顺序执行到switch结尾,除非遇到break;一穿百穿
- 当然,当没写default时,最后一个case可以不用写break
//打印该月份所属的季节。
//3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季
Scanner myScanner = new Scanner(System.in);
System.out.println("输入月份");
int month = myScanner.nextInt();
switch(month) {
case 3:
case 4:
case 5:
System.out.println("这是春季");
break;
case 6:
case 7:
case 8:
System.out.println("这是夏季");
break;
case 9:
case 10:
case 11:
System.out.println("这是秋季");
break;
case 1:
case 2:
case 12:
System.out.println("这是冬季");
break;
default :
System.out.println("你输入的月份不对(1-12)");
2、ifelse和switch使用区别
- 如果判断的具体数值不多,而且符合 byte、 short 、int、 char, enum[枚举], String 这 6 种类型。虽然两个语句都可 以使用,建议使用 swtich 语句。
- 其他情况:对区间判断,对结果为 boolean 类型判断,使用 if,if 的使用范围更广
3、for循环
- for(;循环判断条件;) 中的初始化和变量迭代可以写到其它地方,但是两边的分号不能省略。
//表示一个无限循环 for(::){}
- 循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代 语句,中间用逗号隔开。
4、while
//空心金字塔
Scanner myScanner =new Scanner(System.in);
int n=myScanner.nextInt(); //总层数,同时也是第一层点的位置
int max=2*n-1;//最后一层*的数量
int i=1;//层数
int j=0; //与中心点的距离,逐层递增
while(i<=n){ //前n-1层
int k=1; //某一层的第k个位置
while(k<=max){
if(k == n - j || k == n + j || i == n){ //前n-1层的*的位置||第n层全*
System.out.print("*");
}else{
System.out.print(" ");
}
k++;
}
System.out.println();
i++;
j++;
}
5、break,continue,return
- break,跳出本次循环,往下走(循环不再执行),可以结合标签使用。
- continue,结束本次循环,进行下一次循环,(本次循环continue自后的语句不再执行),可以结合标签使用
- return,结束所在方法(跳出最近的一对{???}),在main中使用结束程序
6、数组
数组创建后,如果没有赋值,有默认值 int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000(\u表示后边是十六进制),boolean false,String null
//以下定义也能编译通过
int[] num =new int[]{1,2,3,4,5,6};
7、值传递和引用传递
基本数据类型用的是值传递(传递一个备份)
数组用的是引用传递(传递地址)
8、冒泡排序
//冒泡排序
//每轮确定一个最大的数,所以比较n-1轮,即确定后n-1个数就排序完毕
//每轮比较次数递减,n-1 -> n-2 -> n-3 ->...->1
int temp;
int[] num={11,22,55,99,33,44,66,77,66};
int length=num.length;
for(int i=0;i<length-1;i++){
System.out.println(i);
for(int j=0;j<length-1-i;j++){
if(num[j]>num[j+1]){
temp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
}
}
}
for(int i=0;i<=num.length-1;i++){
System.out.print(num[i]+" ");
}
9、二维数组
//杨辉三角
Scanner myScanner = new Scanner(System.in);
int n = myScanner.nextInt();
int [][] yang=new int [n][];
for(int i=0;i<yang.length;i++){ //第i层
yang[i]=new int[i+1];
for(int j=0;j<=i;j++){ //第i层有i个
if(j == 0 || j== i){
yang[i][j]=1;
}else{
yang[i][j] =yang[i-1][j-1]+yang[i-1][j];
}
}
}
//输出
for(int i=0;i<yang.length;i++){
for(int j=0;j<yang[i].length;j++){
System.out.print(yang[i][j]+" ");
}
System.out.println();
}
10、类与对象
- 对象的属性如果不赋值,有默认值,规则和数组一致。具体说: int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000, boolean false,String nul
11、类和对象的内存分配机制
Java 内存的结构分析
- 栈: 一般存放基本数据类型(局部变量)
- 堆: 存放对象(Cat cat , 数组等)
- 方法区:常量池(常量,比如字符串), 类加载信息
- 示意图:
- 具体例子分析
//先加载 Person 类信息(属性和方法信息, 只会加载一次) //在堆中分配空间, 进行默认初始化(默认值和数组默认值一样) //把地址赋给 p , p 就指向对象 Person p = new Person(); //进行指定初始化, 比如 p.name =”jack” p.age = 1 p.name = “jack”; p.age = 10