6 方法
6.1 概念
方法:封装了一些为了解决某个问题而编写的代码片段称之为一个方法。可以反复使用
PS:方法:其实就是一段功能代码封装,只要利用方法中提供名字,就可以在任意位置执行一段功能代码
将一段功能代码写入到一个代码块中【大括号括起来就是代码块】,这个代码块有一个名字,每次要执行这段功能代码的时候只需要写入这个名字,就可以完成代码的执行,这个就是方法
6.2 方法的组成部分
public static void main(String[] args) {
}
- public 公共的 方法的访问修饰符
- static 静态的 方法的修饰符
- void 空白的 方法的返回值类型
- main 主要的 方法的名称
- () 方法的参数列表
- {} 方法体
方法的组成部分:
- 方法的定义
- 方法体
/*通用语法: 访问权限修饰符 [其他修饰符] 返回值类型 方法名(参数列表){ 方法体【方法可以执行的操作】 return } */
package JavaseDemo; public class Demo { public static void main(String[] args) { System.out.println("----------调用方法1---------"); //调用方法 printSign(10,'='); System.out.println("----------调用方法2---------"); printSign(15,'*'); System.out.println("----------调用方法3---------"); printSign(6,'8'); System.out.println("----------调用方法4---------"); printSign(3,'y'); } //定义多个参数的方法,多个形参直接用逗号隔开 public static void printSign(int count,char sign){ for (int i = 0; i < count; i++) { System.out.print(sign); } System.out.println(); } } //----------调用方法1--------- //========== //----------调用方法2--------- //*************** //----------调用方法3--------- //888888 //----------调用方法4--------- //yyy
6.3 方法的定义
DRY原则:don’t repeat youself
方法详细说明:
- 访问权限修饰符:作用当前这个方法谁可以调用,在Java中权限修饰符一共有4个,这4个修
饰符都可以用于修饰方法,“这里我们先固定使用一个修饰 public【公有的】” - 其他修饰符:可以在通用语法中可以看到,使用中括号将其他修饰符括起来,代表意思是可
以省略不写,从Java8开始其他修饰符一共有4个【其中包含接口中1个】,“这里我们先固定
使用一个修饰符 static【静态的】”
3.返回值类型:作用外界调用【触发】这个方法之后可以得到一个什么样的结果
返回值类型在方法中一共有三种:“基本数据类型、引用类型和void【无返回值类型(方法专
用)】”
这三种类型将决定可以得到一个什么样的结果
PS:这个返回值类型与方法内部中return关键字有很大的关联
4.方法名: 就是方法名字,方便记忆与调用,但是需要遵守某些规则**【基础规则:满足标识符**
命名规则,进阶规则:不要使用拼音、拼音缩写、不要写中文,英文单词(有意义),单词
组成要遵守小驼峰的规则(首个单词首字母小写,后续每个单词首字母大写 —getStudentAge)】
5.参数列表: 作用提供方法从外界获取到数据在方法内部使用(参数列表写法就是在定义变
量,每个变量之间都使用【,】逗号分隔)
在定义方法时,方法的参数列表一共有两种定义形态:
5.1 如果方法中没有使用外界传递数据在方法内部使用,此时可以不定义参数列表,直接使
用空的小括号()
5.2 如果方法中使用外界传递数据在方法内适用,必须定义与传递数据类型一致的变量进行
接收,有多少个数据传递进来就可以定义多少个变量,但是变量与变量之间必须使用逗号分隔
6.{ }大括号:方法的主体,提供方法内部实现代码就写在这个大括号中
7.在方法体中机大括号中,可以使用到一个关键字return这个关键具备两个意义
return关键字的作用是:结束一个方法或结束一个方法并带回一个返回值
return关键字的使用跟返回值类型有关:
如果方法的返回值类型使用void,此时方法中可以使用return关键字也可以不使用,但是如果使
用绝对不允许带有返回值
如果方法返回值类型使用基本数据类型或引用数据类中的一种,方法必须使用return关键字,
return关键字带回的返回值需要和返回值类型一致并且有一个值
方法在类文件中书写的位置
Java中最小的程序单元是类不是方法
Java中所有方法都是平级关系,不允许出现方法嵌套方法的定义
Java中定义方法不存在先后顺序,影响方法的顺序是方法调用的
6.3.1 无参无返回值
public static void 方法名(){}
无返回值的方法多用与打印语句操作【在方法内部使用打印语句输出效果】
6.3.2 有参无返回值
public static void 方法名(数据类型 参数名,数据类型 参数名,…){}
//案例1:定义一个方法,打印三角形,(三角形行数有调用者来确定) import java.util.Scanner; public class Demo { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入一个整数"); int n =input.nextInt(); printSJ(n); } public static void printSJ(int rows) { for (int i = 1; i <= rows; i++) { for (int j = 1; j <= i ; j++) { System.out.print("*"); } System.out.println(); } } }
6.3.3 无参有返回值
public static 数据类型 方法名(){}
package JavaseDemo; public class Demo { public static void main(String[] args) { //定义变量接收返回值 int r = add(10,40); System.out.println("结果是"+r); } public static int add(int x,int y){ int z=x+y; return z; } } //50
6.3.4 有参有返回值
public static 数据类型 方法名(数据类型 参数名,…){}
6.4 方法的调用
6.4.1 调用无参无返回值
方法名();
//调用方法 printGuShi(); closeDoor();
6.4.2 调用有参无返回值
方法名(实参);
//调用方法 printSJ(10); showLevel(90);
6.4.3 调用无参有返回值
返回值类型 变量名 = 方法名();
System.out.println(方法名());
//调用方法 int sum = sum(); System.out.println(sum); //调用方法 System.out.println(count());
6.4.4 调用有参有返回值
返回值类型 变量名 = 方法名(实参);
System.out.println(方法名(实参));
//方法调用 long jc = jc(10); System.out.println(jc); //方法调用 System.out.println(max(10,20));
public class Demo { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入两个整数"); int n =input.nextInt(); int m =input.nextInt(); System.out.println(jc(n)); System.out.println(max(n,m)); } //案例1:定义一个方法,求1-n的阶乘 public static long jc(int n) { long jc = 1; for (int i = 1; i <= n; i++) { jc = jc * i; } return jc; } //案例2:方法包含 2 个参数 num1 和 num2,它返回这两个参数的最大值。 public static int max(int num1,int num2) { if(num1 > num2) { return num1; }else { return num2; } } }
6.5 return关键字
return关键字的作用:表示结束当前方法
- return可以用在有返回值的方法中:
- 表示方法返回值(必须) return 值; 一个方法只能有一个返回值
- return也可以用在没有返回值的方法中:
- 表示结束方法。 return;
- 在return的后面不能直接写任何代码,因为不可能执行的到
- 没有返回值的方法可以写return,有返回值的方法必须要写return 返回值
6.6 方法使用注意细节
- 方法的定义位置:方法需要定义在类的里面其他的方法的外面,方法之间不能互相嵌套
- 方法的实参要与形参保持一致(个数、类型、顺序)
- 方法的返回值,并不一定要接收,但是一般方法定义了返回值没有去接受那么就没有意义
6.7 方法的好处
- 方法的定义位置:方法需要定义在类的里面其他的方法的外面,方法之间不能互相嵌套
- 方法的实参要与形参保持一致(个数、类型、顺序)
- 方法的返回值,并不一定要接收,但是一般方法定义了返回值没有去接受那么就没有意义
6.8 方法递归(了解)
6.8.1 递归
什么是递归?
- 解决具有既定规律的问题时,在方法内部再次调用自身方法的一种编程方式。
何时使用递归?
- 当需要解决的问题可以拆分成若干个小问题,大小问题的解决方式相同,方法中自己调用自己。
- 使用循环解决的常规问题,都可以替换为递归解决。
如何正确使用递归?
- 设置有效的出口条件,可以让调用链上的每个方法都可以正确返回,避免无穷递归
6.8.2 递归应用
案例1:求某个数的阶乘
案例2:求斐波那契数列第n项
案例3:输出一个数的每一位上的值
6.9 方法的重载(Overload)
6.10 练习
后面再补上
案例1:求某个数的阶乘
案例2:求斐波那契数列第n项
案例3:输出一个数的每一位上的值
练习1:输入一个数字使用方法计算1-这个数字的和,并返回结果。
练习2:使用方法输出100~200之间能被3整除的数。
练习3:使用方法判断一个数是否为素数。
练习4:使用方法求1-100之间可以被7整除的数的个数。
6.11练习(加强)
6.12 方法的内存调用(补充)
需求:使用方法完成两个数的交换,并在调用之后打印交换过后的值
import java.util.Scanner; public class Demo { public static void main(String[] args) { int a = 1; int b = 2; System.out.println("交换之前a的值是:"+a); System.out.println("交换之前b的值是:"+b); //在不使用方法的前提下交换两个数据的值 /* //提供第三方变量进行数据存交换 int tmp = a; //tmp中存储是a变量值 a = b; //将b变量的值存储在a中 a就具有b的值 b = tmp; //将tmp的值赋值b,间接的等于将a的值赋值给b,所以b中存储这个a值*/ //使用方法交换两个数据的值 swap(a,b); System.out.println("交换之后a的值是:"+a); System.out.println("交换之后b的值是:"+b); } public static void swap(int a, int b){ int tmp = a; //tmp中存储是a变量值 a = b; //将b变量的值存储在a中 a就具有b的值 b = tmp; //将tmp的值赋值b,间接的等于将a的值赋值给b,所以b中存储这个a值 } } // 交换之前a的值是:1 // 交换之前b的值是:2 // 交换之后a的值是:1 // 交换之后b的值是:2