一、方法
1、定义:把一个功能进行封装起来,方便重复调用,实现一个特定功能的代码块。
2、格式:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2 ....){
方法体;
return 返回值;
}
(1)、修饰符:目前使用 public static
(2)、返回值类型:用于限定返回值的数据类型
(3)、方法名:就是一个名称,它的存在是为了方便我们调用方法
(4)、参数类型 : 限定调用方法时传入参数的数据类型
(5)、参数名 :是一个变量,接收调用方法时传入的参数,这个参数其实有一个专业的名词,被称之为形式参数,它的作用是用来接收实际参数的.
(6)、方法体 :完成功能的代码
(7)、return :结束方法以及返回方法指定类型的值
(8)、返回值 :就是功能的结果,由return带回,带回给调用者
注意:
①方法不调用不执行
②方法与方法是平级关系,不能嵌套定义
③方法定义的时候参数之间用逗号隔开
④方法调用的时候不用在传递数据类型
⑤如果方法有明确的返回值,一定要由return带回一个值
例如:定义一个方法求数组中的最大值
public class ForDemo {
public static void main(String[] args) {
int[] arr={1,2,4,5,36,9,6};
System.out.println(show(arr));
}
public static int show(int[] arr){
int max=arr[0];
for(int i=1;i<arr.length;i++){
if(max<arr[i]){
max=arr[i];
}
}
return (max);
}
}
3、方法的重载
在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同(即参数个数不同、参数类型不同),与返回值无关。
例如:
public static void main(String[] args) {
}
public static int add(int a,int b){
return 0;
}
public static int add(int a, float b) {
return 0;
}
public static int add(int a,int b, float c) {
return 0;
}
二、数组
数组是存储同一种数据类型多个元素的集合。相当于一个容器。数组既可存储基本数据类型,也可存储引用数据类型。
1、一维数组
格式1: 数据类型[] 数组名;
格式2: 数据类型 数组名[];
数组初始化:数组必须先初始化,然后才能使用。就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
初始化分类:静态初始化和动态初始化;
①、动态初始化:
格式: 数据类型[] 数组名 = new 数据类型[数组长度];
例如:int[] arr=new int[5];
②、动态初始化:
格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
例如: int[] arr = new int[]{12,52,21};
2、二维数组
格式:①数据类型[ ][ ] 变量名 = new 数据类型[i][j];
② 数据类型[][] 变量名 = new 数据类型[i][];
③数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
常出现的问题:
a:ArrayIndexOutOfBoundsException:数组索引越界异常
原因:访问的索引超出了数组的长度。
b:NullPointerException:空指针异常
原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。
三、递归
在方法中调用方法本身称为递归
注意:1.递归要有出口,否则就是死递归 死递归会造成栈溢出
2.递归的次数不宜过多,否则也会有栈溢出的风险
举例:①、求5的阶乘
public static void main(String[] args) {
long num=jieCheng(5);
System.out.println(num);
}
private static long jieCheng(int i) {
if(i==1){
return 1;
}else{
return i*jieCheng(--i);
}
}
②、兔子问题(斐波那契数列)
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
分析:
月份 对数
1 1
2 1
3 2
4 3
5 5
6 8
7 13
6 21
... ...
由上可知:1 1 2 3 5 8 13 21 斐波那契数列 从第三个数开始,每个数等于他前两个数之和
代码:
public static void main(String[] args){
int num= rabbitSum(20);
System.out.println(num);
}
private static int rabbitSum(int i) {
if(i==1||i==2){
return 1;
}else{
return rabbitSum(i-1)+rabbitSum(i-2);
}
}
}