MyDay5
静态方法
含义:具有特定功能的代码块
好处:解决了代码的冗余(减少重复性的代码)
语法规范:
访问修饰符 static 返回值类型 方法名(参数列表){
…代码块…
}
注意:
1、访问修饰符:给方法定义访问权限(public-公有的)
2、理解参数 - 调用方法时传入的数据
3、参数列表 - 可以传入多个数据
4、理解返回值 - 方法执行完毕后返回的数据
方法的分类:
1、无参数无返回值的方法
语法规范:
public static void 方法名(){
…代 码块…
}
1、void - 表示无返回值(关键字)
2、方法写在类中,其他的方法外面(方法与方法之间是平级关系)
3、方法没有调用就是个摆设
4、静态方法使用类名调用(Test01.run())
5、调用方法所在的方法和调用的方法在同一个类中,可以省略类名(run())
2.带参数的方法
语法结构:
public static void 方法名(参数列表){
…代码块…
} 注意:
1.形式参数:称之为形参,声明方法时规定的变量
2.形参必须规定类型
3.实际参数:称之为实参,调用方法时传入的数据
4.形参必须和实参兼容
5.局部变量:方法里的变量(作用域:该方法内)
6.形参相当于该方法的局部变量
7.形参和实参都可以有多个,用逗号分隔
3.带返回值的方法
语法规则:
public static 返回值类型 方法名([参数列表]){
…代码块…
return 数据;
} 注意:
1.方法声明是规范返回值类型
2.return返回具体的数据
3.方法功能的单一性:方法里的功能不要过于复杂
4.方法声明时的返回值类型必须和return后面的数据类
方法的重载
含义:方法与方法之间的关系
条件:
1.在同一个类中
2.方法名一致
3.参数列表的个数或者是类型不一致
4.与返回值无关(一个方法有没有返回值,不影响他们之间的重载关系)
好处:系统会根据实参类型自动匹配到对应的方法中需求:
编写一个方法,传入两个int值,返回最大值 ----- getMax
编写一个方法,传入三个int值,返回最大值 ----- getMax
编写一个方法,传入两个double值,返回最大值 – getMax
编写一个方法,传入三个double值,返回最大值 – getMaxspublic static void main(String[] args){ System.out.println(getMax(10.1,20.1,30)); } public static int getMax(int a,int b){ return (a>b)?a:b; } public static int getMax(int a,int b,int c){ int max = (a>b)?a:b; max = (max>c)?max:c; return max; } public static double getMax(double a,double b){ return (a>b)?a:b; } public static double getMax(double a,double b,double c){ double max = (a>b)?a:b; max = (max>c)?max:c; return max; } //编译时只看方法类型,不看方法名 //以下两个方法是重载关系(参数和参数一一对应) public static void method(String str,int i){} public static void method(int i,String str){} }
方法的递归
含义:方法调用方法自身
public static void main(String[] args){ //递归的错误示范 //StackOverflowError -- 栈内存溢出错误 //前言:调用方法,就会在栈内存中开辟空间,用于存放该方法的局部变量 //错误出现原因:死循环的调用方法,栈内存装满并溢出 method(); } public static void method(){ method(); } }
注意事项:
1.找规律:什么情况下方法应该调用方法自身
2.找出口:什么情况下应该返回具体的值需求:不死神兔(斐波那契数列/黄金分割数列) 有一对兔子,从出生第三个月起每个月都生一对兔子,小兔子长到第三个月后,每个月又生一只兔子,假如兔子都不死,问第n个月的兔子对数为多少。 分析: 找规律:当月的兔子对数 = 上个月 + 上上个月 找出口:1月和2月兔子对数都是1 */ public static void main(String[] args){ int num = getRabbit(8); System.out.println(num); } public static int getRabbit(int n){ if(n == 1 || n == 2){ return 1; }else{ return getRabbit(n-1) + getRabbit(n-2); } } }
引用数据类型的分类
分类:数组、类、接口、枚举
知识点:一维数组
含义:一组数据的容器
作用:存储多个数据
数组的声明:数据类型[] 数组名/变量名;
注意: 1.数组是引用数据类型 2.数组中的数据,称之为元素 3.每个元素都有编号,称之为下标/索引 4.下标从0开始 5.下标的作用:通过下标可以定位到数组中的某个位置 6.数组一旦初始化成功,长度将不可改变 7.操作数组: 改 - 通过下标设置元素 查 - 通过下标获取元素 查 - 获取元素个数 查 - 遍历数组 数组的初始化: 静态初始化:数据由程序员给定,长度由系统分配 动态初始化:一开始只知道长度
import java.util.Scanner;
public class Test10{
/**
知识点:一维数组的应用
需求:创建一个int数组,长度让用户指定,数据有用户输入,获取数组中的最大值
小结:
数组中的元素可以是基本数据类型
不管数组中存储的元素是基本数据类型还是引用数据类型,数组都是引用数据类型
*/
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入数组的长度:");
int len = scan.nextInt();
if(len <= 0){
System.out.println("长度有误~~");
return;
}
//动态初始化数组
int[] is = new int[len];
//循环输入
for(int i = 0;i<is.length;i++){
System.out.println("请输入第" + (i+1) + "个数字:");
int num = scan.nextInt();
is[i] = num;
}
//获取数组中的最大值
int max = is[0];//假设数组第一个元素为最大值
for(int i = 1;i<is.length;i++){
if(max < is[i]){
max = is[i];
}
}
System.out.println("最大值为:" + max);
}
}