Java笔记(第二周)

一.流程控制语句

1.顺序结构语句

最基本的:代码由上而下依次加载

2.选择结构语句

Ⅰ. if语句:

格式一:
      if(条件表达式){
             语句;
            }
    执行流程
            1)当前条件表达式成立,执行语句
            2)否则不成立,不执行语句;
    if的第一种格式:
            比较简单:应用场景,就是针对单个条件进行判断的
格式二:
        if(表达式){
            语句1;
        }else{
            语句2;
        }
    执行流程:
        1)判断表达式是否成立,如果成立,执行语句1,
        2)如果不成立,执行语句2;
    应用场景:
        就是针对两种情况进行判断;
格式三:
        if(表达式1){
            语句1;
        }else if(表达式2){
            语句2;
        }else if(表达式3){
            语句3;
            ...
            ...
        }else{
            语句n ;
        }
        执行流程:
            1)判断表达式1是否成立,如果成立,则执行语句1;
            2)如果不成立,继续判断表达式2是否成立,如果成立,执行语句2;
            3)如果表达式2不成立,继续判断表达式3是否成立,如果成立,执行语句3
            ...
            ...
            4)如果上面的条件表达式都不成立,则执行else中的语句n....

Ⅱ. switch语句:

  格式:
            switch(表达式){
            case 值1:
                语句1;
                break ;
            case 值2:
                语句2;
                break ;
            ...
            ...
            ...
            default:
                语句n;
                break ;
            }
    执行流程:
            1)判断表达式的值和case值1进行匹配,
            如果匹配成功,执行语句1,break结束
            2)如果case值1不匹配,继续和case后面的值2进行比较,如果匹配,语句2执行,break结束;
            ...
            ...
            3)如果上面的case的值都和switch中表达式的结果不匹配的,那么最终
            就执行default中的语句n,然后程序默认执行到末尾结束了,break结束;
            
  注意:
    1)switch中的表达式基本的能够使用的数据类型:
            byte,short,char,int
            JDK5以后,可以跟枚举 (enum)
            JDK7以后,可以是String类型
    2)
        (1)case语句后面的值只能是常量
            (在Java语言中,Java是一个强类型语言:结构和格式是非常严谨的)
            (在JavaScript前端语言中,是一个弱类型语言,case后面的值既可以是常量
            ,也能够是变量;)
        (2)case语句中的break 必须带上,否则会造成一个现象:case 穿透
                    由于某个case已经匹配了,此时如果没有break,那么就继续往下面中
                case的语句进行穿透,依次执行,遇见有case中有break的,那么switch结束!
            
         (3)switch的结束条件是什么?
                a)语句break结束
                b)程序默认执行到末尾!
         (4)default语句可以在语句中的任何位置,不影响程序的执行流程!
            default的执行,当前case中都没有匹配的话,执行default

3.循环结构语句

Ⅰ. for循环

for循环的格式
        for(初始化语句;条件表达式;控制体语句(步长语句)){
            循环体语句;
            例:for(int x = 1 ;x <= 10 ; x ++)
        }
    执行流程:
        1)初始化语句进行赋值,只执行一次
        2)然后判断条件表达式是否成立
            如果成立,执行循环体语句;----然后执行控制体语句(步长语句) (++/--)
        3)继续判断条件表达式是否成立,
            如果成立,执行循环体语句;----然后执行控制体语句(步长语句) (++/--)
        ...
        ...
        4)执行到条件表达式不成立,for循环语句结束!
水仙花数:指的三位数,而且每个位的立方和就是当前数据本身

Ⅱ. while循环

格式:
扩展格式:
            初始化语句;
            while(条件表达式){
                循环体语句;
                控制体语句(步长语句) ;
            }
    流程:
            1)初始化语句进行赋值
            2)判断条件表达式是否成立
                如果成立,执行循环体语句,控制体语句对变量进行自增或者自减
            3)继续判断条件表达式是否成立
                ....
                ....
            4)如果条件表达式不成立,while循环结束

Ⅲ. do-while循环

格式:
    初始化语句;
    do{
        循环体语句;
        控制体语句;
    }while(条件表达式) ;
    执行流程:
        1)初始化语句执行
        2)执行条件表达式,如果条件表达式不成立,循环体至少执行一次!
        如果条件表达式成立...然后控制体语句,依次判断;
        do-while循环和其他两个循环的最大的区别:循环体至少执行一次;

4. if语句格式二的嵌套方式以及与三元运算符的区别

Ⅰ.嵌套方式:

if(表达式){// a >b 
            if(表达式1){ //a>c
                语句1;
            }else{
                语句2;
            }
        }else{ 
            if(表达式2){//b>c
                语句3;
            }else{
                语句4;
            }
        }
        执行流程:
            1)先判断表达式是否成立,如果成立
            2)执行里面的if语句
                2.1)判断表达式1是否成立,如果成立,执行语句1
                2.2)不成立,执行语句2
            3)如果第一次进行比较表达式如果不成立,执行else中的if语句
                3.1)判断表达式2是否成立,如果成立,执行语句3
                3.2)否则不成立,执行语句4

Ⅱ.区别:

 if...else:流程控制语句,范围比较广泛,不仅可以操作具体 数据值还可以操作语句
      而三元运算符--是运算符的一种,它只能操作具体的数据结果值,不能直接里面嵌套使用

Ⅲ.注意:

         三元运算符能够实现的---一定能够使用if...else实现而if...else...实现不一定能够使用三元运算符实现!实际开发中,业务场景逻辑判断---需要使用if格式2居多 

5. while循环和for循环的区别以及for循环的嵌套

Ⅰ.共同点:

都能够描述循环的思想,将重复度高的代码进行优化,解决冗余度问题

Ⅱ.不同点:

1)格式上不同
            for(初始化语句;条件表达式;控制体语句){
                    循环体语句;
            }
            初始化语句;
            while(条件表达式){
                循环体语句; 
                控制体语句;
            }
2)从内角度考虑,for循环使用完毕结束后,那么当前这个变量也就被释放掉了,而while不会,它始终
        可以访问到这个变量,所以相对来说说,for循环比较节省内存空间!
3)释放明确循环次数
        明确循环次数:优先采用for循环,其次再是while
                while循环:不明确循环次数,使用  
                实际开发中,for循环使用最多!
                while循环一般都是这样使用!
                while(true){ 死循环
                    //当达到某种条件,break;中断了 
                        }   

Ⅲ. for循环的嵌套

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

6.死循环的应用

常见的两种格式
        for(;;){
            //业务操作
        }
        
        while(true){//恒成立   (使用居多)
            //业务操作..
            //当达到某种条件的时候,结束掉死循环,---使用 break ;(结束,中断)
        }

二.跳转控制语句

1. break

break;  中断,结束的意思    
应用场景:
        1)不能单独使用,报错
        2)只能在两个场景中使用
                switch语句自带了break关键字
            循环结构语句中
                for/while循环都可以用到        
        break早期的时候,在for循环嵌套中使用,使用"标签语句"
                break 标签名称; 结束指定的循环
                标签名称:外层循环/内层循环
                wc:for(xxx;xx;xx){
                    nc:for(xx;xx;xx){
                        
                    }
                }

2. continue

        属于跳转控制语句中的一种
        一般都在循环语句中使用的;
        表示结束当前循环,立即进入下一次循环了...

3. return

    return :返回结果   (结束方法去使用,但是很少单独使用)
    一般情况:return不会单独使用(很少单独使用)
    结合 Java中的有具体返回值类型的方法去使用
    实际开发中,
        只要看到return 关键字,肯定是当前方法中有具体返回值类型的时候,去使用!

三.方法

1.定义

   方法就是使用{}代码块将一些业务代码包裹起来,并为之起名字,称为"方法名"
    方法名,需要见名知意,满足"标识符的规则",

2.有返回值类型的方法

格式:固定写法
    定义方法
            权限修饰符 static  返回值类型 方法名(参数类型1 变量名1 ,参数类型2 变量名2.....){
                
                完成你的代码的业务逻辑:根据需求来完成操作
                
                return 结果;
            }   
            详细解释:
                    权限修饰符:现在固定使用public  :访问权限足够大的
                    现在写方法:必须带上static  前面的写法:public static
                    
                    返回值类型:就是数据类型----研究的就是基本数据类型
                    方法名: 给{}代码块起名字, 见名知意,遵循"标识符规则",小驼峰命名法
                            add(),求和
                            sum() ,求和
                    参数列表:
                        参数类型 ----:数据类型,现在使用的就是基本数据类型 
                        变量名 ---- :给当前形式参数起名字,见名知意,"小驼峰命名法"          
                     return 结果: 根据你的业务方法,返回值类型时什么类型,给你返回具体的结果
    调用方法:
        1)输出调用:不推荐
        2)赋值调用:推荐(int result = add(a,b) ;)
        3)单独调用:用不了
定义一个求两个数据之和的功能(方法)
        心中必须有两个明确
        1)明确返回值类型---数据类型:现在使用的就是基本数据类型
                int
        2)明确参数类型以及参数个数
            2个参数,分别都是int

3.定义有具体返回值类型的方法注意事项

1)方法和方法是平级关系,不能嵌套,只能在里面去调用
2)定义方法的时候需要两个明确
        a)明确返回值类型
        b)明确参数类型以及参数个数(形式参数类型和几个参数)     
3)在定义方法的时候,形式参数必须携带数据类型,因为Java
            是一个强类型语言!
4)在实际参数 main中,调用方法的时候,实际参数不需要携带数据类型,因为已经键盘录入,已经定义过了
5)实际参数和形参参数,传参时,数据类型需要一一对应!

4.没有返回值类型的方法

像下面这个需求:
            需要将直接输出在控制台的,并没有具体的返回值类型结果,定义方法的时候
            还必须遵循java的格式,这个时候Java语法规定,
            使用void关键字填充这个格式
            权限修饰符 静态修饰符 void 方法名(形式参数列表){
                //里面业务逻辑
                要么输出/类似于数组中(数据进行互换:排序)
            }
    定义格式:
            public static void 方法名(形式参数列表){
                //完成的业务逻辑,输出等等操作,
                但是不能有return (必须和有具体返回值类型的方法一块使用)
            }
没有具体返回值类型的方法调用:
            输出调用 :用不了
            赋值调用 :用不了
            单独调用:推荐
两个明确:
    1)明确返回值类型
            没有具体返回这里类型---使用void (关键字)
    2)明确参数类型以及参数个数
            没有参数,

四.方法重载(Over Load)

1.概念

     当方法的功能都是相同的,我们可以定义同名的方法
      参数列表不同,跟返回值无关,可以提高这个功能的扩展性

2.定义

方法重载: 为了提供某个功能的扩展性
            方法名相同,参数列表不同,与返回值无关     
            参数列表不同:
                1)参数个数不同
                2)参数类型不同
                3)考虑参数类型的顺序

五.数组

1.数组的定义

   数组就是能够存储同一种数据类型的容器!容器,必须满足里面的元素是同一种类型的元素
   举例:
            存储的int类型,那么就不能出现其他数据类型的元素,否则编译报错
定义格式:
        1)数据类型[] 数组名称; (推荐第一种方式)
        2)数据类型 数组名称[] ;
        举例
            int[] arr ; //定义了一个int类型的数组,arr变量
            int arr[] ;//定义了int类型的arr数组
        数组本身就属于引用数据类型,里面存储的元素内容,
        可以方法同一种类型的基本类型元素或者同一类型的引用类型!(后期研究引用类型)

2.数组的初始化

Ⅰ.动态初始化:

我们给定数组的长度,数组的元素内容由系统默认初始化!
            默认初始化:系统给定的
                根据我们数组中存储的数据类型来判定
                    举例:int类型的默认值就是0
                        double的默认值0.0
                            ...
  格式:       
    数据类型[] 数组名称 = new 数据类型[数组长度] ; (推荐)
    数据类型 数组名称[] = new 数据类型[数组长度] ;

Ⅱ.静态初始化:

  我们给定元素的内容,由系统来默认分配长度  
  格式:
        (推荐)数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,元素3....} ;
        数据类型 数组名称[] = new 数据类型[]{元素1,元素2,元素3....} ;     
    简化格式:推荐使用简写格式
        数据类型[] 数组名称 = {元素1,元素2,元素3....} ;
        数据类型 数组名称[] = {元素1,元素2,元素3....} ;

Ⅲ.注意

创建数组的时候,不能既动态初始化了,还静态初始化了(动静结合:不行!)
    数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,元素3....} ;
        int[] arr = new int[3]{1,2,3} ; 错误!

3.数组的应用

Ⅰ.数组的遍历

就是将数组中的元素一一输出
例:
  定义一个数组,静态初始化,将数组中的元素按照下面格式输出
  int[] arr = {11,22,33,44,55} ;
    [元素1, 元素2, 元素3, 元素4 ....元素n] ,使用方法调用完成
    public static void printArray(int[] array){ //形式参数数一个数组
        for(int x = 0 ; x < array.length ; x ++){//最大的角标值= 数组的长度-1 ;
            System.out.println(array[x]) ;
        }
    }

Ⅱ.数组的最值问题

已知一个数组,静态初始化了
        int[] arr = {69,87,52,13,24} ;
        求arr数组中的最大值,使用方法完成!
        最值问题:
            最大值/最小值
            可以参照物方式---假设思想

Ⅲ.数组的逆序

   就是将数组中的一个元素和最后一个元素互换,将数组中的第二个元素和倒数第二个元素进行互换
   分析:
            arr[0]和arr.length-1互换
            arr[1]和arr.length-1-1 换行
            ...
            ...
            保证数组的长度 arr.length/2
            先将原始数组---进行遍历---
        逆序之前:
            输出([元素1, 元素2, 元素3, 元素4...元素n])
            调用逆序的方法(完成逆序)
        逆序之后:
            输出([元素1, 元素2, 元素3, 元素4...元素n])

4.数组中常见的异常:

运行时期异常 
            1)数组角标越界异常---程序运行的时候出现异常    ArrayIndeexOutOfBoundsException 类名  
              出现这个异常原因:我们访问了数组中不存在的索引值报错
              解决方案:
                      改变索引值     
            2)实际开发中,经常会出现 空指针异常 NullPointerException
                 就是当前 我们在访问某个对象的时候,对象已经是null
                  然后还要使用对象中的某个功能---出现空指针了   
            解决方案:
                    对当前这个对象进行非空判断

5.数组的排序

Ⅰ.冒泡排序

思想:两两比较,将较大的值往后放,第一次比较完毕之后,最大值出现在最大索引处,依次这样比较
            规律:
                两两比较,大的往后放
                第一次比较,有0个不比
                第二次比较,有1个不比..
                比较的次数:数组长度-1次

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值