JAVA基础--JAVA SE(知识点总结 Ⅱ )

发布于:2022-08-06 ⋅ 阅读:(481) ⋅ 点赞:(0)

少时不懂其中意,长大方知父母恩

前面内容请见:JAVA基础–JAVA SE(知识点总结 Ⅰ )
以下是我们今天的内容

一.流程控制语句

1.Java中的流程控制语句
  • 三类

    • 顺序结构语句:从进入到程序的入口之后,代码从上而下依次加载

      • 如: 从main进来之后,直接去输出,依次输出…
    • 选择结构语句:

      • if语句-----开发中使用比较多的,尤其格式2:if…else…
      • switch语句
    • 循环结构语句:

      • for
      • while
      • do-while
2.选择结构语句之if
  • 格式一:

    • 判断表达式是否成立,如果成立,则执行语句,否则不执行;

    • 注意事项:

      • if()后面不能带分号

      • 有分号的地方就不能{,有{的地方,不能有分号

        	if(表达式){
        		
        		语句;
        	}
        
//导包
import java.util.Scanner ;

public class IfDemo1{
	
	public static void main(String[] args){
			//创建键盘录入对象
			Scanner sc = new Scanner(System.in);
			//提示并录入数据
			System.out.println("请输入一个数据num:");
			int num = sc.nextInt();
			
			//判断
			if(num >=15){
				System.out.println("num大于等于15");
			}
			System.out.println("over");
		
	}
}
  • 格式二:

    • 执行流程:

      • 首先判断表达式是否成立,如果成立,则执行语句1…

      • 如果不成立,执行语句2…

        		if(表达式){		
        			语句1 ...;
        		}else{
        			语句2...;
        		}
        
//导包
import java.util.Scanner;

public class IfDemo2{	

	public static void main(String[] args){
	
	//创建键盘录入对象
	Scanner sc = new Scanner(System.in);
	
	//提示并录入数据
	System.out.println("请输入第一个数据:");
	int a = sc.nextInt();
	
	System.out.println("请输入第二个数据:");
	int b = sc.nextInt();
	
	//if...else... 流程语句

	//方式1:直接使用变量接收 (推荐第一种)
	//定义一个变量
	int max;
	if(a > b){
		//将a的值赋值给max
		max = a; 
		
		//System.out.println(a+"是最大值");
	}else {
		//将b的值赋值给max
		max = b ;
		//System.out.println(b+"是最大值");
	}
	
	System.out.println("max:" + max);
	
	System.out.println("----------------------------------"); 
	
	//方式2:直接输出
	if(a > b){
		System.out.println(a + "是最大值");
	}else {
		System.out.println(b + "是最大值");
		}
	}
}
  • 格式三:

    • 执行流程:

      • 先判断表达式1是否成立,成立,执行语句1

      • 如果不成立,继续判断表达式2是否成立,成立,则执行语句2,

      • 如果上面的表达式都不成立,执行else中的语句n…

        		if(表达式1){
        				语句1 ...;
        		}else if(表达式2){
        			语句2...;
        			...
        		}else{
        			语句n...;
        			
        		}
        
//导包
import java.util.Scanner ;

class IfDemo4{
	
public static void main(String[] args){
	//创建键盘录入对象
	Scanner sc = new Scanner(System.in) ;
	//提示,录入数据
	System.out.println("请输入学生的成绩:") ;
	int  socre = sc.nextInt() ;
    
    /*
		90-100    优秀 
		80-90     较好
		70-80     良好
		60-70     及格
		60以下    不及格
	*/
	//if格式3
	/*
	if(socre>=90 && socre<=100){
		System.out.println("优秀") ;
	}else if(socre>=80 && socre<90){
		System.out.println("较好") ;
		
	}else if(socre>=70 && socre<80){
		System.out.println("良好") ;
	}else if(socre>=60 && socre<70){
		System.out.println("及格") ;
	}else{
		System.out.println("不及格") ;
	}
	*/
    
    //学习任何计算机语言:程序---最终给客户去用的,考虑开发完成之后,自测
	//测试 :正确的数据 ,错误数据,边界数据
	
	//优化:最终版:加入一些非法数据的提示
	if(socre>100 || socre<0){
		System.out.println("您输入的数据不合法") ;
	}else if(socre>=90 && socre<=100){
		System.out.println("优秀") ;
	}else if(socre>=80 && socre<90){
		System.out.println("较好") ;
	}else if(socre>=70 && socre<80){
		System.out.println("良好") ;
	}else if(socre>=60 && socre<70){
		System.out.println("及格") ;
	}else{
		System.out.println("不及格") ;
	}
    
		//jvm:java虚拟机 校验你的语法的时候,需要校验语法的整个结构,考虑如果if的里面都不成立,这个程序没有结束;
		//就会出现问题;
		
	}

}
  • if…else…嵌套

    • 格式

      if(表达式1){
      				if(表达式2){
      					
      					语句1;
      				}else{
      					语句2;
      				}
      			
      		}eles{
      			if(表达式3){
      					
      					语句3...;
      				}else{
      					语句4...;
      				}
      			
      		}
      
      import java.util.Scanner ; 
      class IfTest{
      	
      	public static void main(String[] args){
      		
      		//创建键盘录入对象
      		Scanner sc = new Scanner(System.in) ;
      		
      		//提示并录入数据
      		System.out.println("请输入第一个数据:") ;
      		int num1 = sc.nextInt() ;
      		
      		System.out.println("请输入第二个数据:") ;
      		int num2 = sc.nextInt() ;
      		
      		System.out.println("请输入第三个数据:") ;
      		int num3 = sc.nextInt() ;
      		
      		
      		
      		int max ; 
      		if(num1>num2){
      			//语句----if...else
      			if(num1>num3){
      				max = num1 ; //num1大
      			}else{
      				max = num3 ; //num3大
      			}
      			
      		}else{
      			
      			//num2比num1大
      			if(num2>num3){
      				//将num2赋值max
      				max = num2 ;
      			}else{
      				//将num3赋值给max
      				max = num3 ;
      			}
      			
      		}
      		System.out.println("三个数据的最大值是:"+max) ;
      		
      		
      	}
      }
      
      3.选择结构语句之switch
  • 格式

     switch(表达式或者某个变量值){
               case1:
                          语句1;
                          break ;
               case2:
                          语句2:
                          break ;
               ...
    
               default:
                          语句n;
                          break ;
               }
    
    /*需求:
               键盘录入一个值,判断星期
                      1,星期一
                      2,星期二
                      3,星期三,
                      4,星期四
                      5,星期五
                      6,星期六
                      7,星期日 */
    import java.util.Scanner;
    
    public class SwicthDemo {
    
        public static void main(String[] args) {
            //创建键盘录入对象
            Scanner sc = new Scanner(System.in) ;
            //提示并录入数据
            System.out.println("请输入一个星期(1-7的数据): ") ;
            int week = sc.nextInt() ;
      switch (week){
                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 ;
                case 6:
                    System.out.println("星期六") ;
                    break ;
                case 7:
                    System.out.println("星期日") ;
                    break ;
                default :
                    System.out.println("非法数据") ;
                    break ;
            }
        }
    }
    
  • 执行流程

    •   switch接收结果
        *       接收的结果和case后面的值1进行对比,成立,执行语句1,break 结束语句;
        *       值1和switch接收的结果不匹配,和值2进行比较,成立,执行语句2, break,结束语句;
        *       ...
        *       如果上面case都不匹配,执行default语句,语句n,break ,结束...
      
  • switch后面的跟的值的数据类型可以有哪些类型?

    •       基本数据类型:byte,short,int,char
      
    •       jdk5以后可以是枚举类型 enum:引用类型
      
    •       jdk7以后可以是String字符串 :引用类型
      
  • switch语句中的注意事项也是 (考点)

    • 关于switch中的case语句后面只能常量,不能是变量 (体现Java是一种强类型语言)

      • 前端的javascript(弱类型语言):它里面的swtich的case是可以是变量,可以是个常量
    • 在书写switch语句的标准结构,不忘了break,如果语句中忘了书写break,会出现一个现象:case穿透!

      public class SwitchTest {
          public static void main(String[] args) {
               
              // case穿透   
              int a = 3 ;
              int b = 4 ;
              switch (a){//3
                  default:
                      b++ ;
                      break;
                  case 2:
                      b ++;
                  case 3://匹配成功
                      b++ ; //4 ++ = 5
                  case 4 :
                      b++ ; // 5++ = 6
              }
              //b的值是多少;
              System.out.println("b:"+b);
      
      • 在有的需求里面利用 case穿透 来完成一些需求;

        import java.util.Scanner;
        
        public class SwitchTest2 {
        
            public static void main(String[] args) {
                //创建键盘录入对象
                Scanner sc = new Scanner(System.in) ;
                //提示并录入数据
                System.out.println("请您输入一个月份的值:") ;
                int month = sc.nextInt() ;
                //利用case穿透:灵活运用
                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 12:
                    case 1:
                    case 2:
                        System.out.println("冬季");
                        break ;
                    default:
                        System.out.println("非法数据!!") ;
                        break ;
                }
            }
        }
        
    • 关于switch语句的结束条件

      •          要么遇见break结束
        
      •          程序默认执行到末尾
        
    • 关于default语句可以在switch语句中的任何位置,不影响语句的执行流程;

      • 不管在任何位置,只要case语句都不匹配,执行default;
      • 如果default语句在语句中,break不要省略
      • 如果default语句的末尾,break可以省略(不建议);
/*
使用switch语句,完成模拟单项选择题操作
*/
import java.util.Scanner;

public class Demo9 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("电视剧《仙剑奇侠传》中,李逍遥的扮演者是谁?");
        System.out.println("请选择以下选项:" + "\n" + "[A.胡歌]" + "\t" + "[B.彭于晏]" + "\t" + "[C.袁弘]" + "\t" + "[D.霍建华]");

        String choice = scanner.next();//使用字符串
        switch (choice){
            case "A":
                System.out.println("恭喜你,回答正确!");
                break;
            case "B":
                System.out.println("对不起,回答错误!");
                break;
            case "C":
                System.out.println("对不起,回答错误!");
                break;
            case "D":
                System.out.println("对不起,回答错误!");
                break;
            default:
                System.out.println("没有该选项 ");
                break ;
        }
        System.out.println("-------------------------------------------------------");
        
         int choice = sc.nextInt() ;
        //将int类型---转换成char
        char choiceNum = (char) choice ;
        System.out.println(choiceNum);
        switch (choiceNum){
            case 'A':												//65
                System.out.println("√");
                break ;
            case 'B':												//66
                System.out.println("×");
                break ;
            case 'C':												//67
                System.out.println("×");
                break ;
            case 'D':												//68
                System.out.println("×");
                break ;
            default:
                System.out.println("没有该选项 ");
                break ;
        }
    }
}
4.循环结构语句之for
  • 格式

    for(初始化语句;条件表达式;控制体语句或者步长语句){
    
    		循环体语句;
    
    }       //降低了冗余度
    
  • 执行流程

    • 初始化语句:给变量赋值 (只执行一次)

    • 然后执行条件表达式,看其是否成立,如果成立,执行的是循环体语句------>再次回到控制体语句或者步长语句—>变量自增或者自减

    • 随后再次执行条件表达式,看其是否成立,成立,继续循环体语句---->再次回到控制体语句或者步长语句---->变量自增或者自减

    • 一直执行到条件表达式不成立,for循环结束;

  • 举例

    • 需求:

      • 在控制台输出1-10的每一个数据
      • 循环的求和思想
      • 在控制台输出1-10的之间的所有的数据之和
    • 求和思想:

      • 将上面的这种格式变形一下:

      • 定义一个结果变量: 从0开始 sum这个变量

        • 0 + 1 = 1 ;
          • 1 + 2 = 3 ;
            • 3 + 3 = 6 ;
              • 6 + 4 = 10 ;
                • 10 +5 = 15 ;

      • 两个加数:

      • 前面的这个加数:就是求和结果变量sum,从0开始

      • 后面的这个加数:就是1-10的数据;

    • 使用步骤:

      • 定义一个最终结果变量sum,从0开始记录

      • 使用 for(初始化语句;条件表达式;控制体语句){

        ​ //循环体语句

        ​ //先取出来每一个数据

        ​ 使用结果变量就是上面的数据求和,然后再赋值给最终结果变量;

        ​ }

      • 输出sum即可

public class ForDemo {
    public static void main(String[] args) {
        //定义一个结果变量
        int sum = 0 ;
        for(int x = 1 ; x <=10 ; x ++) {// 1-10之间的数据
             //x的取整:1,2....10;
            sum += x ; //sum = sum + x ;

        }
        System.out.println("1-10的数据之和是:"+sum);
    }
}
  • 经典-水仙花数

    • 需求:在控制台输出所有的水仙花数

      •  水仙花数
         *      水仙花指的是三位数,而且这个三位数的每一个位上的立方相加就是当期数据本身
         *      举例:153 = 1 * 1 * 1 + 5*5*5 + 3*3*3
                *      153  % 10  = 3 ;---确定个位的数据
                *      153 / 10  % 10  = 5 --- 确定十位的数据
                *      153 /10 /10 %10 = 1 --- 确定百位上的数据   或   153 / 100 = 1
        
    • 分析:

    • 三位数,明确了范围 100-999—使用for循环

    • 确定每各位的数据本身的值:

      •  定义三个变量,分别代表个位,十位,百位数据本身
        
      •  int ge = 当前这个数据 % 10 ;
        
         int shi = 当前这个数据 /10 %10 ;
        
         int bai = 当前这个数据 /10/10 % 10 ;
        
    • for循环中加入逻辑判断

    • 如果当前x == (gegege)+(shishishi)+(baibaibai),

    • 满足条件,直接输出x

public class forDemo {
    public static void main(String[] args) {
        System.out.println("水仙花数是:") ;

        // 三位数,明确了范围 100-999---使用for循环       
        for (int x = 100; x < 1000; x++) {
            //x:100-999的数据
            //确定每各位的数据本身的值:
            // 定义三个变量,分别代表个位,十位,百位数据本身
            int ge = x %10 ; //x=153
            int shi = x /10 %10 ;
            int bai = x /10 /10 % 10;
            
            if(x==(ge*ge*ge+shi*shi*shi+bai*bai*bai)){
                System.out.println(x) ;
            }


        }
    }
}
5.循环结构语句之while
  • 格式

     初始化语句;
             while(条件表达式){
                 循环体语句 ;
                 控制体语句或者步长语句;
             }
    
  • 执行流程:

    •      首先,先初始化语句,对变量赋值;
      
    •      执行条件表达式,是否成立;若成立,则执行循环体语句,依据控制体语句进行变量控制--->再次判断条件表达式是否成立,成立,执行循环体语句--->控制体语句进行变量控制
      
    •      ...
      
    •      当条件表达式不成立,while循环结束;
      
    •      注意事项:控制体语句不要忘了,否则死循环;
      
  • 举例

    • while循环统计水仙花有多少个,并输出
public class WhileTest {
    public static void main(String[] args) {
		//定义统计变量
        int count = 0 ;
        //初始化语句
        int m = 100 ;
        while(m<=999){
            //循环体
            //求出ge,shi,bai的数据
            int ge = m % 10 ;
            int shi = m /10 % 10;
            int bai = m /10 /10 % 10 ;
            //满足条件
            if(m ==(ge*ge*ge+shi*shi*shi+bai*bai*bai)){
                //统计变量自增
                count ++;
                System.out.println("第"+count+"次,"+"水仙数是:"+m);
            }
            m++ ;
        }
        System.out.println("水仙花数共有:"+count+"个");
    }
}
  • for循环和while循环的区别

    • 1)共同点:

      • 都能够描述一种循环思想,可以将重复性冗余代码进行优化,提搞程序阅读性
    • 2)不同点:

      • 格式不同

        • for(初始化语句;条件表达式;控制体语句){
          
          		循环体语句;
          
          }
          
        • 初始化语句;

          while(条件表达式){
          
          	循环体语句;
          
          	步长语句;
          
          }
          
      • 场景不同

        • for循环:明确循环次数 (开发中优先都使用for)

        • while循环:不明确循环次数:

        • 举例:

          键盘录入一个数据,玩猜数字游戏,你也不知道到录入多少次才能猜中

      • 是否节省内存资源:从格式上说

        • for循环的好处:循环结束之后,变量被释放了
        • 而while循环,循环结束,依然能够使用这个变量,相对for循环格式来说,比较耗费内存资源
      • 实际开发中:for是使用最常见的

6.循环结构语句之do while
  • 格式

    	初始化语句;
    	do{
    		循环体语句 ;
    		控制体语句 ;
            
    	}while(条件表达式) ;
    

    这个循环语句和while,for循环最大的区别: 当条件不成立的,循环体至少执行一次.

public class DoWhileDemo {
    public static void main(String[] args) {

        int x = 6 ;  //初始化了
        do{
            System.out.println("helloJavaSE"); //执行循环体
            x++;  //7
        }while(x<=5) ;
    }
}
7.循环结构语句之死循环
  • 死循环的两种格式

    • 第一个格式

          for(;;){
               
            循环体语句;
               
           }
      
    • 第二个格式:

      	while(true){  
      
       		//死循环格式中使用比较多
      		 循环体语句;
      
      	}
      
  • 举例

    • 猜数游戏

      • 分析:

        • 需要产生一个随机数:java.lang.Math 里面的功能random()产生一个1-100之间的随机数

          • jdk提供了类:java.lang.Math
          • java.lang包下的类不需要导包,针对数学运算的工具类,提供了很多的方法;
          • 获取伪随机数,取值范围:[0.0,1.0)

          //不断的键盘录入

        • while(true){

          •  创建一个键盘录入对象,录入int类型
            
          •  录入的数据要和Math里面产生的1-100之间数据进行对比,
            
          •  如果大了,提示 "你要猜的数据大了"
            
          •  如果小了,提示"你要猜的数据小了"
            
          •  如果一致,提示"恭喜您,猜对了"
            
          •  结束死循环,break ;
            
               }
            
    public class DieLooperTest {
        public static void main(String[] args) {
    
            //需要产生一个随机数:java.lang.Math 里面的功能random()产生一个
            //1-100之间的随机数
            int number = (int) (Math.random() *100 +1); //[0.0-1.0)*100-->[0.0-100.0)-->[1.0-101.0) 强转取整1-100
            System.out.println(number) ;
            //定义统计变量
            int count = 0 ;
            //不断的键盘录入
            while(true){
                //只要进一次循环就开始计算
                count ++;
                //创建键盘录入对象
                Scanner sc = new Scanner(System.in) ;
    
                //提示并录入数据
                System.out.println("请您输入要猜的数字:") ;
                int guessNumber = sc.nextInt() ;
    
                //使用guessNumber上面的随机数获取到的number进行对比
                if(guessNumber>100 || guessNumber< 0){
                    System.out.println("你要输入数据不合法,它是在0-100之间");
                }else if(guessNumber> number){
                    //如果大了,提示 "你猜的数据大了"
                    System.out.println("你猜的"+guessNumber+"大了") ;
                }else if(guessNumber <number){
                    //如果小了,提示"你猜的数据小了"
                    System.out.println("你猜的"+guessNumber+"小了") ;
                }else{
                    //如果一致,提示"恭喜您,猜对了"
                    System.out.println("恭喜您,第"+count+"次猜对了") ;
    
                    //结束死循环
                    break ;
                }
            }
    
        }
    }
    
8.循环结构语句(补充)
  • for循环嵌套(双重for循环)

    //for循环的嵌套
              for(初始化语句1;条件表达式1;控制体语句1){   //可以看做控制行
                  //循环体就是for循环语句
                  for(初始化语句2;条件表达式2;控制体语句2){  //可以看做控制列
                      循环体语句;,,,
                  }
              }
    
  • 举例

    • 99乘法表

        public class ForForDemo {
          public static void main(String[] args) 
      		for(int x = 1 ; x <= 9 ; x++){ //9行列
                  for(int y = 1 ; y<= x ; y++){//列数随着x的变化而变化
                      System.out.print(x + "×" + y + "=" + (y*x) + "\t");
                      //1*1=1
                      //2*1=2  2*2=4
                      //3*1=3  3*2=6  3*3=9
                      //4*1=4  4*2=8  4*3=12  4*4=16...
                  }
                  System.out.println();//换行
      
              }
          }
      }
      

二.跳转控制语句

1.break
  • break:中断结束(结束循环或者switch语句中)

    public class BreakDemo {
        public static void main(String[] args) {
    
           // break ;
    
            //for循环,10次
            for(int x = 1 ; x <=10 ; x++){
                //加入一个逻辑判断
                if(x == 3){
                    break ; //循环中使用/ switch本身语法就带break
                }
    
                System.out.println(x) ;       // 1   2  (x == 3时跳出循环)
            }
        }
    }
    
2.continue
  • continue:只是结束当前循环,继续立即进入下次循环(循环语句中使用)
public class ContinueDemo {
    public static void main(String[] args) {

        //for循环
        for(int x = 1; x<=10 ; x++){
            if(x == 2){
                continue;//只是结束当前循环,继续立即进入下次循环
            }
            System.out.println(x);      //2不输出
            //1
            //3
            //4
            //5
            //6
            //7
            //8
            //9
            //10
        }
    }
}    
3.return
  • return:结束方法的 (结束有具体返回值的方法)
    • return: 实际开发中,return 需要携带结果,-------引入Java中定义方法
    •      return:  与Java中的方法相关的,很少单独去使用
      
public static void main(String[] args) {

        System.out.println("程序开始了...");
        //for循环
        for(int x =1 ; x <=10 ;x ++){
            //加入逻辑判断
            if(x==3){
                System.out.println("条件成立..");

                return ;  //很少单独用---->结束了方法

            }
            System.out.println(x) ;
        }
        System.out.println("程序结束了,Over...");
    }

在这里插入图片描述
)]