JavaSE学习【Day 7】
今天主要学习了方法的参数、方法的重载、方法的递归、数组,欢迎浏览观看
1 方法
1 方法的参数
形参
形式参数,定义方法时()中的参数
相当于局部变量的声明
作用域:在当前方法中有效
形参不存在默认值,赋值根据实参决定
实参
实际参数,调用方法时()中的参数
相当于局部变量的赋值
注意:
形参要与实参一一对应
类型对应
个数对应
顺序对应
2 return 返回值
在有返回值的方法中:必须存在,必须带出返回值!!!
作用 :
1、提前结束方法
2、带出返回值
在没有返回值的方法中:
提前结束方法
不可达语句:
1、return后面出现其他语句
2、break后面直接出现的语句
3、continue后面直接出现的语句
4、while(true)|死循环后的语句
5、while(false){}中的语句
兼容类型
形参与实参之间 :
实参类型<=形参类型
返回值类型
接收方法返回值变量的类型>=方法的返回值类型>=return后面数据的类型
break与continue与return之间的区别:
break用于循环中和switch语句中,结束整个循环
continue只用于循环中,跳过本次循环,进入下一次循环
return在定义方法中使用,在有返回值类型的方法中结束方法和带出返回值,没有返回值类型
的方法中只有结束方法的作用
3 方法的重载
类里面有两个或者多个重名的方法,但是方法的参数个数、类型、顺序至少有一个不一样
前提:
如果一个类中的功能的实现,不同的实现方式,需要不同的方法体,可以让这些方法构成方法的重载,就允许方法名字相同,方法使用
一个类中,方法是封装的一种体现,方法的重载就是多态的一种体现
满足的三个条件:
1.同一个类中的多个方法
2.方法名相同
3.参数列表不同 | 方法签名不同
参数的个数不同
参数的类型不同
不同类型的参数顺序不同
方法签名 : 方法名+参数列表,是方法的唯一标识
调用多个重载方法中的某一个:
可以用不同的实参匹配,由实参决定
注意:
方法的重载与方法的修饰符无关
方法的重载与方法的返回值类型无关
方法的重载与方法的参数名字无关
方法的重载只与方法名+参数列表有关
例如:
//求数据的和
public static void getSum(int x,int y){
System.out.println("两个int整数"+(x+y));
}
public static void getSum(int x,int y,int z){
System.out.println("三个int整数"+(x+y+z));
}
public static void getSum(double x,double y){
System.out.println("两个double小数"+(x+y));
}
public static void getSum(double x,double y,double z){
System.out.println("三个double小数"+(x+y+z));
}
public static void getSum(int x,double y){
System.out.println("int,double整数、小数"+(x+y));
}
public static void getSum(double x,int y){
System.out.println("double,int小数、整数"+(x+y));
}
4 方法的递归
A方法调用A方法,也就是自己调用自己
递归头:
停止自己调用自己的条件
递归体:
自己调用自己
临界条件 :
递归头 : 停止自己调用自己的条件
递归前进段 :
不停的自己调用自己的过程
递归后退段 :
当满足临界条件之后,把结果返回给上一层的过程
注意:
递归可以简化结构,合理的地方使用可以让程序变得更简单,但是用不好容易造成内存的溢出,使用要慎重
例:
//求某一个数的阶乘 5!=5*4*3*2*1 ==> 5*4! ==> 5*4*3!
public static int factorial(int i){
if(i==1){
return 1;
}
return i*factorial(i-1);
}
//通过递归实现某行乘法表的打印
public static void print(int n){
//临界条件
if(n==1){
System.out.println("1*1=1");
return;
}
//打印n-1之前的所有行乘法表
print(n-1);
//当前行n的乘法表
//i就是每一列
for(int i=1;i<=n;i++){
System.out.print(i+"*"+n+"="+i*n+"\t");
}
//换行
System.out.println();
}
2 数组
数组是一种存储数据的数据结构。
变量:存储单个数据
数组:存储多个数据
相同类型数据的有序集合
在内存中是一段连续的内存空间
特点:
数组是一种引用数据类型
数组是定长,长度一旦确定不可改变
一个数组中存储相同类型的数据
数组中数据是有序的,通过索引|下标进行管理
数组的长度:
数组名.length;
连续内存空间的个数
索引|下标:
从0开始,每次加1
数组中数据是有序的,通过索引|下标进行管理
第一个索引—>0
最后一个索引—>数组名.length-1
操作数组中的数据:
数组名[索引];
数组的定义
声明
数据类型[] 数组名; -->>推荐
数据类型 数组名[];
数据类型 []数组名; -->>不建议使用
数据类型:
规定当前数组中存储数据的类型
可以是任意数据类型(基本|引用)
初始化
1 动态初始化
先创建数组后赋值数据
数据类型[] 数组名 = new 数据类型[长度n];
数组先创建没赋值存储默认值:
整数—> 0
小数—> 0.0
boolean—> false
字符 —> ’ ’ (空字符)
引用数据类型 —> null
2 静态初始化
创建数组的同时赋值
数据类型[] 数组名 = new 数据类型[]{值1,值2,值3,...值n};
数据类型[] 数组名 = {值1,值2,值3,...值n}; --->简略写法
今天就学习了方法的一部分和数组,有什么建议可以评论区留言