流程控制
顺序结构(代码顺序执行)
在没有其他结构的干扰下,代码从上到下依次执行
分支结构
在代码中,执行某些代码需要满足一定的条件,那就需要使用分支结构
常用的分支语句:if - else结构
语法1:
if(表达式结果是true,那么执行大括号里面的代码块){
代码块
}
语法2:如果表达式为true,执行代码块1,如果表达式为false,执行代码块2
(这种结构的分支,都可以转化为三元表达式)
if(表达式){
代码块1
}else{
代码块2
}
语法3:哪个表达式为true就执行哪个,否则执行else
if(表达式1){
代码块1
}else if(表达式2){
代码块2
}else if(表达式3){
代码块3
}else{
代码块4
}
if(score1>90){ if (score2>90){ System.out.println("奖励1000元"); }else if(score2>80){ System.out.println("奖励500元"); }else{ System.out.println("没有奖励"); } }else if (score1>80){ if(score2>90){ System.out.println("奖励500元"); }else{ System.out.println("没有奖励"); } }else{ System.out.println("没有奖励"); }
开关语句switch
语法:判断switch后面变量的值,满足值1 执行代码块1,满足值2,执行代码块2,否则执行default
switch(变量){
case 值1:
代码块1;
break;
case 值2:
代码块2;
break;
case 值3:
代码块3;
break;
default:
}
public static void main(String[] args) { //接收用户输入的数(1-5),返回对应的的事情 //1、查询所有用户 2、增加用户 3、删除用户 4、修改用户 5、查询单个用户 Scanner scan =new Scanner(System.in); System.out.println("请输入数字1-5,选择对应的操作"); int num = scan.nextInt(); switch (num){ case 1: System.out.println("查询用户"); break; case 2: System.out.println("增加用户"); break; case 3: System.out.println("删除用户"); break; case 4: System.out.println("修改用户"); break; case 5: System.out.println("查询单个用户"); break; default: System.out.println("输入的数字不正确"); } }
注意:
1、switch后面可以是byte short int char string ,以及对应的包装类,不能使用long或者浮点型
2、case后面的break可以省略,但是会发生穿透现象
3、case 后面的值不能是变量,只能是常量,而且catch后面的值不可重复
4、default可以删除,但是不满足的情况,就无法执行
循环结构
循环,就是将重复性的代码内容整理起来,利用特殊性的语法,完成重复性操作,从而让代码变的更加简单
循环需要的条件:
1、循环需要结束条件
2、循环体代码需要变换
while循环
语法:如果表达式的结果为true,就会执行代码块的内容
while(表达式){
代码块
}
public static void main(String[] args) { Scanner scan =new Scanner(System.in); while(true) { System.out.println("请输入数字1-6,选择对应的操作"); System.out.println("1 查询用户"); System.out.println("2 增加用户"); System.out.println("3 删除用户"); System.out.println("4 修改用户"); System.out.println("5 查询单个用户"); System.out.println("6 退出查询"); int num = scan.nextInt(); switch (num) { case 1: System.out.println("查询用户"); continue; case 2: System.out.println("增加用户"); continue; case 3: System.out.println("删除用户"); continue; case 4: System.out.println("修改用户"); continue; case 5: System.out.println("查询单个用户"); continue; case 6: System.out.println("退出查询"); break; default: System.out.println("输入的内容不对"); continue; } break; } }
do-while循环
语法:跟while循环的用法类似,相比来说,需要先执行一次代码块,然后再去做循环判断
do{
代码块;
}while(循环条件表达式)
public static void main(String[] args) { //使用do-while 输出1-10 int i=1; do{ System.out.println(i); i++; }while(i<=10); // //完成1-100的偶数和 int j=0; int sum=0; do{ if(j%2==0){ sum=sum+j; } j++; }while(j<=100); System.out.println(sum); }
for循环
语法:指定的次数循环
for(初始化语句a;判断条件b;控制条件c){
代码块;
}
执行流程:
1、先执行初始化语句a
2、再执行判断条件b,如果b的结果为true,执行代码块,如果条件为false,循环结束
3、执行控制条件c
4、再执行b,依次循环
//输出所有的水仙花数 //水仙花是一位3位数 //数字=个位数的三次方+十位数的三次方+百位数的三次方 int count=0; for(int k=100;k<1000;k++){ int a=k%10;//个位数 int b=k/10%10;//十位数 int c=k/10/10;//百位数 if (k==a*a*a+b*b*b+c*c*c){ count++; System.out.println(k); } } System.out.println(count); }
// 声明for 循环,从1输出到10 for (int i=1;i<=10;i++){ System.out.println(i); } //使用FOR循环求1-100的和 int sum1=0; for (int i=0;i<=100;i++){ sum1=sum1+i; } System.out.println(sum1); //求1-100的偶数和 int sum2=0; for(int j=0;j<=100;j++){ if(j%2==0){ sum2=sum2+j; } } System.out.println(sum2);for循环的嵌套使用
/*输出一个图形 ****** ****** ****** ****** */ for(int i=0;i<=4;i++){ for(int j =0;j<=6;j++){ System.out.print("*"); } System.out.println( ); } //使用for循环嵌套完成一个乘法口诀表 for(int i=1;i<=9;i++){ for(int j=1;j<=i;j++){ System.out.print(i+"*"+j+"="+(i*j)+"\t"); } System.out.println( ); }
break
break只用在switch和循环语句中
public static void main(String[] args) { lable1: for(int i=0;i<5;i++){ lable2: for(int j=0;j<4;j++){ if(j==2){ //break;//默认状态,跳出内部 循环 //break lable1;跳出外层 break lable2;//跳出内层 } System.out.println("*"); } } System.out.println( ); }
continue
一般用在循环中,表示跳出当次循环
public static void main(String[] args) { //有10个学生,循环录入学生的成绩,录完之后统计80分以上的占比情况 int count =0; Scanner scan =new Scanner(System.in); for(int i=1;i<=10;i++){ System.out.println("请输入第"+i+"个学生的成绩"); int score=scan.nextInt(); if(score<80){ continue; } count++; } System.out.println("大于80分以上的人数为"+ count); System.out.println("80分以上的占比情况为:"+((double)(count)/10)*100+"%"); }
return
用在方法中,一般用来结束方法
public static void main(String[] args) { for(int i=1;i<10;i++){ if(i==5){ System.out.println("退出"); //break;//结果为:1 2 3 4 退出 运行结束 //continue;//结果为:1 2 3 4 退出 6 7 8 9 运行结束 return; //结果为: 1 2 3 4 退出 } System.out.println(i); } System.out.println("运行结束"); }
增强for循环
语法:一般用来遍历数组或者集合中的内容
for(数据类型 变量:数据集合){
}
引用数据类型:string 数组 类
创建方式:
数据类型 变量名=new 数据类型();
比如:Scanner scan =new Scanner(System.in);
为什么叫引用数据类型?
因为,引用类型在创建的时候,都是创建在堆空间中,然后堆空间中的区域的地址指向栈中的变量,
这种地址赋值方式,就是一种引用方式,所有,称为引用类型
首先把Class文件从磁盘里读取进方法区,然后把main方法压入栈区
基本数据类型的变量名在栈区,变量名的值存放在方法区的常量池
string类型
是字符串类型,用双引号引起来的内容就是字符串,它是一个比较特殊的引用类型
可以通过new关键字来创建,也可以类似于基本类型的赋值方式
public static void main(String[] args) { //方式1:类似于基本数据类型 String s1="hello"; System.out.println(s1); //方式2:类似于引用数据类型 String s2=new String("hello"); System.out.println(s2); //==比较的是地址 equals比较的是内容 System.out.println(s1==s2);//false System.out.println(s1.equals(s2));//true String s3="hello"; System.out.println(s1==s3);//true
内存划分初识
Java程序执行的时候,会将内存分为栈空间、堆空间
栈空间特点 :
1,自动分配,不需要程序员申请
2,栈空间存取数据的效率较高
3,栈空间的数据 按照 先进后出的方式管理
4,栈空间存储空间较小,不能存放太多的数据
5,JVM将基本类型的数据存放在栈空间
堆空间特点 :
1,需要程序员申请,通过new关键字申请
2,堆中存取效率相对较低
3,堆空间中存放数据是随机分配位置,所以在申请了空间后,会得到一个地址值,指向变量
4,堆空间存放数据的空间比较大,能存放大量的数据
5,引用类型的数据一般都存放在堆空间中
方法:
Java是面向对象的语言,对象都会有一些方法,方法其实就是这些类可以做的事情,也称为函数
方法中,一般都会写一些执行某些功能的代码,将来可以调用这个方法,从而完成某些想要的内容
语法:
修饰符 返回值类型 方法名(参数列表){
代码块
return 返回值;
}
修饰符:暂时的写法 public static
返回值类型:void表示没有返回,也可以是数据类型(基本类型和引用类型)
方法名:自己取的名字,遵循标识符命名规范
参数列表:将来调用这个方法的时候,是否需要传入值进行运算,如果不需要,可以不行
参数的定义方式 数据类型+变量名;
代码块:方法中的执行功能
return:和返回值类型挂钩,有返回值类型,需要return对应类型的值,如果没有返回值类型,
return可以省略
//写一个方法,调用之后,可以传入两个整数,并完成两个整数的求和 public static int add(int a,int b){ int sum=a+b; return sum ; } public static void main(String[] args) { //调用方法,声明一个变量去接收返回的值 int result= add(10,20); System.out.println(add (10,20)); System.out.println(result); }