要争气,因为心里憋着太多的不服气
——24.1.18
数组重点回顾
1.概述:容器,本身属于引用数据类型
2.特点:
①定长
②既可以存储基本数据类型的数据,还可以存储引用数据类型的数据
3.定义:
动态初始化:数据类型[ ] 数组名 = new 数据类型{数组长度}
静态初始化:数据类型[ ] 数组名 = new 数据类型{数据1,数据2,……}
4.数组操作:
①获取数组长度:数组名.length
②存储数据:数组名[索引值] = 元素 -> 将元素存储到数组指定的索引上
③获取元素:数组名[索引值]
④遍历:数组名.fori
⑤索引:指的是元素在数组中存储的位置
从0开始,最大索引是数组.length - 1,唯一,不能重复
5.操作数组时容易出现的异常:
①数组索引越界异常:ArrayIndexOutOfBoundsException
原因:操作的索引超出了数组索引异常
②空指针异常:NullPointerException
原因:对象为null,然后再去操作此对象
6.内存:
①栈:方法的运行在栈
②堆:数组、对象都在堆,而且每new一次都会在堆中开辟一个空间,堆内存会为此空间分配一个地址值
③方法区:代码运行之前的预备区,存储class文件
④本地方法栈
⑤寄存器
7.二维数组概述:数组中有多个一维数组/二维数组是元素为一维数组的一维数组
①动态初始化定义:数据类型[ ][ ] 数组名 = new 数据类型[m][n]
m:代表的是二维数组的长度
n:代表的是每一个一维数组的长度
②静态初始化定义(简化形式):
数据类型[ ] 数组名 = {{元素1,元素2,…},{元素1,元素2,…},{元素1,元素2,…}…}
8.二维数组操作:
①获取长度:数组名.length
②存元素:数组名[i][j] = 值
i:代表的是一维数组在二维数组中的索引位置
j:代表的是元素在一维数组中的索引位置
③获取元素:数组名[i][j]
④遍历:嵌套for 先将一维数组从二维数组中遍历出来,再遍历每一个一维数组
一、方法的使用
1.方法介绍
若所有的代码都在main方法中,会显得main方法代码太多,太乱,太臃肿 -> 不好维护
将代码块分为三个区域,每个区域存该区域模块相应的代码
分好模块后,直接调用功能名称就好了
将不同功能的方法放到不同的方法中,想执行某个功能,直接调用方法名就好,对应的代码被自动执行起来,将来维护的时候,直接找到对应的方法,就可以对其直接进行修改维护
方法:
拥有功能性代码的代码块
将不同的功能放在不同的方法中,给每个方法取个名字,直接调用方法名,对应的方法就被执行起来了,便于维护。
通用定义格式:
修饰符 返回值类型 方法名(参数){
方法体
return 结果
}
①无参无返回值方法
②有参无返回值方法
③无参有返回值方法
④有参有返回值方法
2.简单方法定义(无参无返回值)
1.无参无返回值方法的定义:
public static void 方法名(){
方法体 -> 实现此方法的具体代码
}
2.调用:
在其它方法中:方法名()
3.注意事项:
①void关键字代表无返回值,写了void,就不要在方法中写return了
②方法不调用,不执行,main方法是jvm自动调用的
③方法之间是平级关系,不能嵌套调用
④方法的执行顺序和定义顺序无关,只和调用的顺序有关
public static void main(String[] args) {farmer();cooker();personal();}//农民伯伯public static void farmer(){System.out.println("播种");System.out.println("施肥");System.out.println("拔草");System.out.println("浇水");System.out.println("除虫");System.out.println("收割");}//厨师public static void cooker(){System.out.println("洗菜");System.out.println("切菜");System.out.println("炒菜");System.out.println("装盘");}//自己个人public static void personal(){System.out.println("洗手");System.out.println("吃菜");}
案例
定义一个方法,实现两个整数相加
public static void main(String[] args) {Add();System.out.println("调用了Add方法");}public static void Add(){int a = 20;int b = 55;int sum = a+b;System.out.println("sum = " + sum);}
settings勾选,使得每个方法之间被隔开
3.方法定义各部分解释
①修饰符:public static
②返回值类型:
该方法最终返回结果的数据类型
比如:return 1 -> 方法上的返回值类型写int
return 2.5 -> 方法上的返回值类型写double
return "" -> 方法上的返回值类型写String
如果没有返回值,不要写具体的返回值类型,要写void
③方法名:见名知意(小驼峰原则)
④参数:进入到方法内部参与执行的数据(数据类型 变量名,数据类型 变量名)
⑤方法体:实现该方法的具体代码
4.有参数无返回值方法
1.格式:
public static void 方法名(数据类型 变量名){
方法体
}
定义一个方法,实现两个整数相加
public static void main(String[] args) {sum(10,20);}public static void sum(int a,int b){int sum = a+b;System.out.println("sum = " + sum);}
5.无参数有返回值方法
1.格式:
public static void 方法名(数据类型 变量名){
方法体
}
定义一个方法,实现两个整数相加,将结果返回
public static void main(String[] args) {int sum=sum();System.out.println("sum = " + sum);}public static int sum(){int a = 10;int b = 20;return a+b;}
6.有参数有返回值方法
1.格式:
public static void 方法名(数据类型 变量名){
方法体
}
2.调用:
①打印调用:
sout(方法名(具体的值))
②赋值调用:(推荐)
数据类型 变量名 = 方法名(具体的值)
定义一个方法,实现两个整数相加,将结果返回
public static void main(String[] args) {int sum=sum();System.out.println("sum = " + sum);}public static int sum(){int a = 10;int b = 20;return a+b;}
二、方法的参数和返回值
1.形参和实参
1.形式参数(形参):在定义方法的时候形式上定义的参数,此参数还没有值
2.实际参数(实参):在调用方法的时候给形参赋予具体的值
2.参数和返回值使用的时机
1.参数:
当想将方法A的数据传递到方法B时,那么定义方法B时就需要带两个参数,在方法A中调用方法B时,可以将方法A中的数据通过参数传递到方法B中
2.返回值:
调用方法A时,想要方法A的结果,去参与其他的操作,那么方法A就需要将自己的结果返回
public static void main(String[] args) {int a = 10;int b = 20;method(a,b);int result = sum(a,b);System.out.println("result = " + result);}public static void method(int a,int b){System.out.println(a+" "+b);}public static int sum(int a,int b){int result =a + b;return result;}
框架、返回值的三体架构思想
1.Controller(表现层)接受的请求参数需要一层一层传递到service(业务层),service层需要将请求参数再传递到dao(持久层),此时service以及dao的方法都需要参数接收
2.dao层的结果需要传递给service,service再传递给controller层,此时dao层和service方法需要返回值
3.变量作为实参使用
案例
定义一个方法,比较两个整数的大小,如果第一个大于第二个,返回true,否则返回false
public static void main(String[] args) {Scanner sc = new Scanner(System.in);int a = sc.nextInt();int b = sc.nextInt();boolean Pare = Compare(a,b);//传递的是a和b代表的数据,不是变量本身System.out.println("Pare = " + Pare);}public static boolean Compare(int a,int b){if(a>b){return true;}else{return false;}}
二、方法的注意事项
1.方法不调用不执行
2.方法的执行顺序只和调用顺序有关
3.方法之间不能互相嵌套
4.void不能和return结果共存,但是 void能和return共存
①void:代表没有返回值
②return 结果:就代表有返回值,先将结果返回,然后结束方法
③return:仅仅代表结束方法,不代表有返回值
5.一个方法中不能连续写多个return,也就是说,一个方法不能有多个返回值
6.调用方法时,先看一下方法有没有被定义,如果没有被定义将会直接报错
初学者如何使用方法:
1.先定义在调用
2.如果是没有返回值的方法,直接再被调用的方法内部输出结果
3.如果是带返回值的方法,在调用完毕后,用一个变量去接受结果,输出这个变量
4.调用方法:
直接调用:方法名()或 方法名(实参) -> 只针对于无返回值的方法
打印调用:sout(方法名())或者 sout(方法名(实参)) -> 针对有返回值的方法,不推荐使用
赋值调用:数据类型 变量名 = 方法名() 或者 数据类型 变量名 = 方法名(实参) -> 针对于有返回值的方法,推荐使用
5.练习:
①如果定义的方法没有返回值,写个void,不要写renturn结果
②如果定义的方法有返回值,将void改为具体的返回值类型,在方法体中最后写一个return结果,将结果返回
③如果方法有返回值,调用的时候推荐使用赋值调用,如果没有返回值,使用直接调用
④练习的时候,完成一个简单的需求,针对这个需求,定义四种方法,并成功调用
三、方法练习
1.方法练习1(判断奇偶性)
键盘录入一个整数,将整数传递到另外一个方法中,在此方法中判断这个整数的奇偶性
如果是偶数,方法返回“偶数”,否则返回“奇数”
public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请您输入一个整数");int num = sc.nextInt();String result = Judge(num);System.out.println("result = " + result);}public static String Judge(int a){if(a%2==0){return "偶数";}else{return "奇数";}}
2.方法练习2(1-100的和)
求出1-100的和,并将结果返回
public static void main(String[] args) {int num = Sum();System.out.println("num = " + num);}public static int Sum(){int sum = 0;for (int i = 0; i <= 100; i++) {sum += i;}return sum;}
3.方法练习3(不定次数打印)
定义一个方法,给这个方法传几,就让这个方法循环打印几次“一切都会好的”
public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请您输入一个数,选择打印次数");int num = sc.nextInt();Print(num);}public static void Print(int a){for (int i = 0; i < a; i++) {System.out.println("一切都会好的");}}
4.方法练习4(遍历数组)
在main方法中定义一个数组,将数组传递到方法中去,在此方法中遍历数组
public static void main(String[] args) {int[] arr = new int[9];Scanner sc = new Scanner(System.in);System.out.println("请您给数组赋值");int i = 0;for (i = 0; i < 9; i++) {arr[i] = sc.nextInt();}Print(arr);}public static void Print(int arr[]){for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}return;}
5.方法练习5
数组作为返回值返回
数组本身是引用数据类型,引用数据类型做方法参数传递,传递的是地址值
public static void main(String[] args) {int[] arr=method();//用和方法类型相同类型的变量接收for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}public static int[] method(){int a = 10;int b = 20;int sum = a+b;int sub = a-b;int[] arr1 = {sum,sub};return arr1;//返回的是一个int[],那么返回值类型也应该是int[]}
四、方法的重载
1.定义
方法名相同 参数列表不同的方法
参数列表不同:
①参数个数不同
②参数类型不同
③参数类型顺序不同
2.引例
定义一个方法,分别求2个整数相加,3个整数相加,4个整数相加
public static void main(String[] args) {int a = 1;int b = 2;int c = 3;int d = 4;sum(a,b);sum(a,b,c);sum(a,b,c,d);}//两个整数相加public static void sum(int a,int b){System.out.println("(a+b) = " + (a + b));}//三个整数相加public static void sum(int a,int b,int c){System.out.println("(a+b+c) = " + (a + b + c));}//四个整数相加public static void sum(int a,int b,int c,int d){System.out.println("(a+b+c+d) = " + (a + b + c + d));}
3.方法重载的注意事项
1.判断两个方法是否为重载方法,与什么无关?
①和方法的参数名无关
②和方法的返回值无关
方法名严格区分大小写
2.什么时候用到方法的重载?
如果定义方法的功能一样,只不过实现细节不一样,就可以考虑定义成重载的方法