**方法:**是一种语法结构,用于完成特定功能的代码片段。
理解:可以把一段代码封装成一个功能,以便重复调用。
方法的知识方法点要涉及到方法声明,方法调用,方法参数和方法的返回值
**代码片段:**由一行或多行代码组成,由{}
括起来
**方法声明:**包括方法头和方法体两部分。
方法头用于确定方法的名称、形式参数的语法解析:名称和类型、返回值的类型和访问限制。
返回值类型 方法名([参数列表]) [throws]
返回值类型: void 表示没有返回值
**方法体:**方法体是一段代码块(完成功能的代码片段),用于执行方法的具体操作。方法的局部变量和语句都定义在方法体内部。
[修饰符] 返回值类型 方法名([参数列表]){
//方法体(需要执行的功能代码)
return 返回值;
}
**方法修饰符:**是一种关键字,用于修饰类、方法、变量等各种程序元素的声明。主要有以下几种类型
**返回值类型:**表示当前方法执行完成后返回的运算结果的数据类型。
方法运行后输出的运行结果,一个方法只能返回一个值,
return 值;
值的类型必须和声明的类型一致
对于有返回值的方法,其方法体中至少有一条 return 语句,形式如下:return 表达式;
当调用该方法时,方法的返回值就是 return 后面的表达式
主调方法接收返回值 主调方法使用 = 运算符接收方法返回值
**方法名:**每个方法都有其名称,称为方法名。
**参数列表:**可以理解为调用方法的前提条件。
目前方法正常执行结束有三种情况:
System.exit(value);
【特例】2.异常执行结束
例如一个方法可以同时使用 public、static、final、synchronized 等多个修饰符来限定它的访问权限、行为和线程安全性。
方法区在JVM启动时创建
目前我们是在 main 方法区调用方法,被调用的方法需要使用 static 修饰
static 方法只能直接调用 static 方法
static方法调用使用 类名.方法名()调用。
调用同一个类中的方法,可以直接写方法名();
方法设计原则: 方法要具有单一职责(性),一个方法只办一件事,如果有多件事要做,就设计多个方法
**主调方法:**发出调用的方法
**被调方法:**被调用的方法
**强调:**被调方法执行过程中,主调方法处于阻塞状态,当被调方法执行结束后,程序执行返回到主调方法,主调方法停止阻塞,继续执行
举例:
public class Demo02 {
public static void main(String[] args) {
evenNumber(); // 直接用 `方法名()`调用
}
// 方法声明--无参无返回
public static void evenNumber(){
for (int i = 1; i < 100; i++) {
if (i % 2 == 0){
System.out.println(i);
}
}
}
}
以static为例 —>类名.方法名()
方法参数传递规则:按照类型、个数、顺序一致原则传递参数
实参与形参:主调方法的实参传递给被调用方法的形参
对参数的理解:被调方法运行前,需要从主调方法得到的数据,是方法运行的前提条件
**方法的重载:**在一个类中有多个方法名相同的方法,这些方法的参数列表不同( 个数、类型、顺序不同).两个方法互为重载(overload)方法
举例:
public static void main(String[] args) {
int sum = sum(1,2);
sum = sum(3,sum); // sum = sum(3,sum(1,2));
System.out.println(sum); // 6
}
public static int sum(int a,int b){
return a + b;
}
public static double sum(double n1,double n2,double n3){
return n1 + n2 + n3;
}
public static void main(String[] args) {
int s = sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
System.out.println(s); // 55
}
public static int sum(int ... n){
System.out.println("int sum(int... n)");
int sum = 0;
for (int i = 0; i < n.length; i++) {
sum += n[i];
}
return sum;
}
数组作为参数必须要传值,可变长度参数则不一定
可变长度参数只能用于参数列表的最后一个,数组则不一定
可变长度参数只能在参数列表出现,数组可以定义局部变量
数组参数和可变长度参数可以同时在同一个方法的参数列表中出现
可变长度参数可以接收数组,但数组不一定
public static void main(String[] args) {
int[] n = new int[]{1, 2, 3, 4};
int sum = sum(n);
System.out.println(sum); // 10
}
public static int sum(int[] nums){
int sum = 0;
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
}
return sum;
}
// public static int sum(int... nums){
// int sum = 0;
// for (int i = 0; i < nums.length; i++) {
// sum += nums[i];
// }
// return sum;
// }
**递归:**方法自己调用自己,要在方法体内存在结束调用的条件