抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

本节主要复习了java中的顺序结构、循环语句、跳转控制语句以及数组和方法的基本知识

一、顺序结构

1、流程控制

(1)分类

  • 顺序结构;
  • 分支结构(if , switch);
  • 循环结构(for , while , do…while)。

(2)顺序结构

  • 概述:顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行。

(3)分支结构

  • 格式:if(关系表达式){ 语句体;}

  • switch语句:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    switch(表达式){
    case1:
    语句体1;
    break
    case2:
    语句体2;
    break
    ....
    defoult:
    语句体n + 1;
    [break;]
    }
  • 说明:

    • 表达式:取值为byte 、short、int、char。JDK5以后可以是枚举类型,JDK7以后可以时String
    • case:后面跟的时和表达式进行比较的值
    • break:用来中断,结束switch语句
    • defoult:表示所有情况都不匹配的时候就执行该处的内容和if语句的else


二、循环语句

1、循环结构的组成

  • 初始化语句:用于表示循环开启时的起始状态,简单说就是循环开始的时候的语句(①);
  • 条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去(②);
  • 循环体语句:用于表示循环反复执行的内容,简单来说就是反复执行的意思(③);
  • 条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去(④)。


1、for循环语句

(1)格式:

1
2
3
4
for(初始化语句;条件判断语句;条件控制语句){
循环体语句;
}//执行流程:初始化语句 -> 条件判断语句 -> 循环体语句 -> 条件控制语句
//之后回到 条件判断语句 -> 循环体语句 -> 条件控制语句

简单概括为:① -> ② -> ③ -> ④ -> ② -> ③ -> ④ -> …


2、while循环语句

(1)格式:

1
2
3
4
5
6
初始化语句;
while(条件判断语句){
循环体语句;
条件控制语句;
}//执行流程:初始化语句 -> 条件判断语句 -> 循环体语句 -> 条件控制语句
//之后回到 条件判断语句 -> 循环体语句 -> 条件控制语句

简单概括为:① -> ② -> ③ -> ④ -> ② -> ③ -> ④ -> …


3、do…while循环

(1)格式:

1
2
3
4
5
6
7
初始化语句;
do{
循环体语句;
条件控制语句;
}while(条件判断语句);
//执行流程:初始化语句 -> 循环体语句 -> 条件控制语句 -> 条件判断语句
//之后回到 循环体语句 -> 条件控制语句 -> 条件判断语句

简单概括为:① -> ③ -> ② -> ④ -> ③ -> ② -> ④ -> …


4、三种循环的区别:

  • do…while先执行后判断,最少执行一次;
  • for循环的初始化变量仅能在for循环内部使用,不能带到for循环以外使用;
  • while循环的初始化变量不归属在其语句内,因此在while循环结束之后还可以使用其初始化变量。


三、跳转控制语句

  • 跳过某次循环(continue)
  • 终止循环(break)




数组


一、数组

1、概述

  • 一次性声明大量的用于存储数据的变量,要存储的数据通常都是同类型数据。

2、定义

  • 数组(array)是一种用于存储多个相同类型数据的存储模型。


二、数组的动态初始化

1、数组初始化的概述

  • java中的数组必须要先初始化,然后才能使用;
  • 所谓初始化就是为数组中的元素分配内存空间,并未每个数组元素赋值。

2、初始化方式

(1)动态初始化

  • 定义:初始化时只指定数组长度,由系统为数组分配初始化值。
  • 格式:数据类型[] 变量名 = new 数据类型[数组长度]
    • 例:int[] arr = new int[3];

(2)静态初始化

  • 定义:初始化时指定每个数组元素的初始化值,由系统决定数组长度;
  • 格式:数据类型[] 变量名 = new int[] {数据1,数据2,…};
    • 例:int[] arr = new int[] {1,2,3};
  • 简化格式:数据类型[] 变量名 = {数据1,数据2,…};
    • 例:int[] arr = {1,2,3};


三、数组元素访问

  • 数组变量访问:数组名
  • 数组内部保存的数据的访问方式:数组名[索引]


四、内存分配

数组在初始化时,会为存储空间添加默认值

数据类型 初始化值 数据类型 初始化值
整数 0 浮点数 0.0
布尔值 false 字符 ‘’
引用数据类型 null String null

数组内存分配



五、数组报错

1、索引越界:ArrayIndexOutOfBoundsException


2、空指针异常:NullPointerException



方法


一、方法

  • 定义:是将具有独立功能的代码块组织成一个整体,使其具有特殊功能的代码集。
  • 注意事项:
    • 方法必须先创建才可以使用,该过程被称为方法定义;
    • 方法创建后并不是直接运行的,需要手动使用后才执行,该过程称为方法调用。

二、方法的定义和调用

  • 定义格式:public static void 方法名(){ 方法体;}
  • 方法调用:方法名()

三、带参数方法定义

  • 格式:public static void 方法名(数据类型 参数1,数据类型 参数2,…){…}//此时定义的变量为形参
  • 调用格式:方法名(参数1,参数2);此时传入的参数时实参

四、形参和实参

  • 形参:方法定义中的参数,有数据类型域参数名组成
  • 实参:方法调用中的参数

五、带返回值的方法

  • 定义:public static 数据类型 方法名(参数){return 数据;}
  • 注意事项:方法定义时return后面的返回值与方法定义上的数据类型要匹配,否则程序将报错。

六、方法的注意事项

  • 方法不能嵌套定义
  • void表示无返回值,可以省略return,也可以单独书写return,后面不加数据,但加入return后代表方法结束了不能再向下执行了。

七、方法重载

1、定义

方法重载指同一个类中定义的多个方法间的关系,满足以下条件的方法互相构成重载。

  • 多个方法在同一个类中;
  • 多个方法具有相同的方法名;
  • 多个方法的参数不相同,类型不同或数量不同。

2、特点

  • 重载仅对应方法的定义与方法的调用无关;
  • 重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,不能通过返回值来判定两个方法是否相互工程重载
    • 例:public static void fn(int a){} public static int fn(int a){} 非方法重载

八、方法的参数传递(基本类型)

1
2
3
4
5
6
7
8
9
10
11
12
public class ArgsDemo{//对于基本数据类型的参数,形式参数的改变不影响实际参数的值(值传递)
public static void main(String[] ages){
int number = 100;
System.out.println("调用方法之前" + number);//100
change(number);
System.out.println("调用方法之后" + number);//100
}

public static void change(int number){
number = 200;
}
}

在栈内存中的情况如下
步骤 栈内存 步骤 栈内存
main方法进入栈内存,number = 100; change方法调用结束,change与其内容消失
调用change方法,此时main方法中的number依然等于100; 此时main方法中的number的值仍然为100
修改change方法中定义的形参的number的值为200 结束

基本数据类型的变量在传递时传递的并不是变量本身,而是变量的数值。


九、方法的参数传递(引用类型)

1
2
3
4
5
6
7
8
9
10
11
12
public class ArgsDemo{//对于引用数据类型的参数,形式参数的改变影响实际参数的值(非值传递)
public static void main(String[] ages){
int[] arr = {100,200,300};
System.out.println("调用方法之前" + Arrays.toString(arr));//100,200,300
change(number);
System.out.println("调用方法之后" + Arrays.toString(arr));//200,200,300
}

public static void change(int[] arr){
arr[1] = 200;
}
}

在堆内存和栈内存中的情况如下

方法中引用数据类型的传递

引用数据类型在方法调用中传递的就不再是内部存储的值了,而是存储在堆内存中的对象实体。在方法中修改引用数据类型的数值后,方法调用结束堆内存的值也会发生改变。

但值得注意的是String类型的变量也是引用数据类型,但其在方法的参数传递过程中却和基本数据类型的变量一样是值传递的。

评论