一、方法
1.1 概念
方法(method)又称之为函数,在不同的语言中拥有不同的名字例如过程、语句
将一行或多行代码进行封装,提供统一的方法名,通过方法名以及参数进行使用
1.2 书写
方法由五部分组成
修饰符 返回值类型 方法名 参数列表 方法体
//main方法
//是一个类的入口方法=>当执行一个类的时候默认调用这个类的main方法
//main方法修饰符 返回值 方法名参数固定
public static void main(String[] args) {
}
**修饰符 public static :**用于修饰当前方法定义当前方法使用权限 之后在封装会讲相应的关键字
**返回值类型 void 😗*用于定义方法执行结束后返回数据的类型,如果方法无需返回数据则使用void
方法名 main: 用于定义方法的名称 ,符合标识符命名规范
参数列表 String[] args: 用于声明方法执行时需要使用的数据,可以有零到无穷个
**方法体:**用于定义方法执行时实际执行的代码
如果方法没有返回值使用void 那么可以省略return,但是如果设置了任意返回类型,那么必须书写return并在return后返回与返回值类型匹配的数据
参数列表,书写的语法为数据类型 变量名多个参数以,分割
1.3 分类
1.3.1 无参数无返回值方法
//无参无返回值
public static void add1(){
int a=1;
int b=2;
System.out.println(a+b);
}
1.3.2 有参数无返回值方法
//有参无返回值
public static void add2(int a,int b){
System.out.println(a+b);
}
1.3.3 无参数有返回值方法
public static int add3(){
int a=5;
int b=6;
return a+b;
}
1.3.4 有参数有返回值方法
//有参有返回值
public static int add4(int a,int b){
return a+b;
}
总结:有参可以使方法更加灵活,可以是方法执行时根据不同的参数进行不同的执行,返回值可以获取方法执行后返回的数据,如果之后的代码还想使用这个数据可以直接使用,无返回值方法通常就是输出,只能看到对应数据不能获取
1.4 调用
在当前类中调用方式
1.4.1 有无参数
调用无参方法时只需要使用 方法名();即可调用
有参方法需要根据方法声明参数列表指定的类型与个数进行参数的传递
注意:方法声明时,声明的变量名只是在当前方法中使用
1.4.2 有无返回值
无返回值方法直接调用,一般在方法中书写输出语句进行输出结果
有返回值方法调用前会根据返回值类型创建变量保存返回的类型
1.4.3 方法执行流程
在main方法执行过程中,调用其他方法,根据方法名获取对应方法,将调用方法时书写的参数传递给声明方法时声明的变量
形参:声明方法时参数列表声明的变量
实参:调用方法时实际传入的数据变量
输入方法名将实参传递给形参执行对应方法体的过程 称之为方法的执行
1.5 特点
1、方法书写在类中,方法中不能定义方法
2、方法不调用不执行
3、多个方法执行互不影响
4、一次编写多次运行(减少代码冗余,提高代码复用性,增强程序维护性与可扩展性)
二、方法扩展
2.1 引用类型作为方法的参数
与基本数据类型一样,引用类型作为参数类表书写方式不变
//将指定数组排序
public static void sortArr1(int[] arr){
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
}
//根据名称查找是否存在
public static boolean find(String name){//name被查找人的名字
//创建包含所有名字的数组
String []names={"张三","李四","二狗子"};
//遍历数组判断是否存在
for(int i=0;i<names.length;i++){
if(names[i].equals(name)){
return true;
}
}
return false;
}
方法执行参数类型无论是基本数据类型还是引用数据类型,其实都是将对应数据的地址传递过来,在方法执行过程中进行操作,所以如果参数是数组,并且在方法执行过程中没有创建数组,那么作为参数传递的变量可以获取方法执行后最新数组的数据(参数与方法都对同一地址数据进行了操作)
练习
书写方法传入数组遍历数组
// 书写方法传入数组遍历数组
public static void printArr(int arr[]){
for(int i = 0;i<arr.length;i++){
System.out.print(arr[i] + " ");
}
}
书写方法根据传入数据打印对应行数三角形
// 书写方法根据传入数据打印对应行数三角形
public static void triangle (int n){
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
System.out.print("*");
}
System.out.println(" ");
}
}
书写方法根据传入数据打印对应个数斐波那契数列
public static void Fibonacci() {
//斐波那契数列
//1 1 2 3 5 8 13 21
//使用数组创建指定长度的菲波那切数列书写并存储至数组
//根据输入的长度创建
Scanner sc=new Scanner(System.in);
System.out.println("请输入创建数组的长度");
int length = sc.nextInt();
//创建指定长度数组
int [] fibonacci=new int[length];
//为数组生成数据
//为每一位都生成数据
for(int i=0;i<fibonacci.length;i++){
if(i==0||i==1){
fibonacci[i]=1;
}else{
//斐波那契数据为前两项数据之后
fibonacci[i]=fibonacci[i-1]+fibonacci[i-2];
}
}
for(int i=0;i<fibonacci.length;i++){
System.out.print(fibonacci[i]+" ");
}
}
作业
猜数字游戏方法化
public static void game() {
// 猜拳游戏
// 规则玩家输入0 1 2 代表剪刀石头布
// 电脑随机生成选择
// 获取双方输入 判断结果
// 输出结果 你出是剪刀 电脑出的是石头 你输了
// 玩家输入=>scanner
Scanner sc = new Scanner(System.in);
// 电脑随机选择=>random
Random r = new Random();
// 输出欢迎语句
System.out.println("====猜拳游戏====");
// 输出规则
System.out.println("请输入 0-剪刀 1-石头 2-布");
// 声明变量保存对局次数
int count = 0;
// 声明变量保存获胜次数
int youWin = 0;
// 声明变量保存失败次数
int pcWin = 0;
while (true) {
// 获取玩家输入选择
int you = sc.nextInt();
// 获取电脑随机选择
int pc = r.nextInt(3);
// 声明一个字符串变量保存对局结果
String end = "";
// 判断结果
if (you == 0) {
if (pc == 0) {
end = "平局";
} else if (pc == 1) {
end = "输了";
pcWin++;
} else if (pc == 2) {
end = "赢了";
youWin++;
}
} else if (you == 1) {
if (pc == 0) {
end = "赢了";
youWin++;
} else if (pc == 1) {
end = "平局";
} else if (pc == 2) {
end = "输了";
pcWin++;
}
} else if (you == 2) {
if (pc == 0) {
end = "输了";
pcWin++;
} else if (pc == 1) {
end = "赢了";
youWin++;
} else if (pc == 2) {
end = "平局";
}
} // 声明数组保存对应字符串
String[] names = { "剪刀", "石头", "布" };
System.out.println("你出的是" + names[you] + ",电脑出的是" + names[pc]);
System.out.println(end);
System.out.println("对局次数/总局数" + count + "/5,玩家-电脑:" + youWin + "-" + pcWin);
if (youWin == 3) {
System.out.println("对局结束,你先赢了三局");
break;
} else if (pcWin == 3) {
System.out.println("对局结束,电脑先赢了三局");
break;
} else if (count == 5) {
System.out.println(pcWin > youWin ? "你输了" : "你赢了");
break;
}
}
}