方法是什么:
方法是一种语法结构,它可以把一段代码封装成一个功能,以便重复调用。
举一个简单例子
定义方法的注意点:
1.方法的修饰符:暂时都用public static修饰
2.方法申明了具体的返回值类型,内部必须使用return返回
3.形参列表可以有多个,甚至可以没有;如果有多个形参,必须用逗号隔开且不能给初始化值
使用方法的好处:
提高代码的复用性,提高了开发效率
让程序的逻辑更清晰
方法的其他形式:
设计一个合理的方法的原则:
1.如果方法不需要返回数据,返回值类型必须申明成void(无返回值申明),此时方法内部 不可以使用return返回数据。
2.方法如果不需要接收外部传递进来的数据,则不需要定义形参,且调用方法时也不可以传 数据给方法。
3.没有参数,且没有返回值类型(void)的方法,称为值无参数、无返回值方法。 此时调用 方法时不能传递数据给方法。
需求:写一个方法,打印若干个“HelloWorld”,次数由调用者决定
import java.util.Scanner;
public class Method {
public static void printHelloworld(int n){
for(int i=1;i<=n;i++){
System.out.println("Hello world");
}
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
printHelloworld(n);
}
}
方法的执行原理:
Java 程序的运行,都是在内存中执行的,而内存区域又分为栈、堆和方法区。那Java 的方法是在哪个内存区域中执行呢?答案是栈内存。 每次调用方法,方法都会进栈执行;执行完后,又会弹栈出去。方法进栈和弹栈的过程,就类似于手枪子弹夹,上子弹和击发子弹的过程。最后上的一颗子弹是,第一个打出来的;第一颗上的子弹,是最后一个打出来的。
方法参数的传递机制:值传递!
eg:
输出结果为 10、20、10 (第二个输出20是改变了change方法里的值,而最后一个输出的是main方法里的值,main方法中的一直未改变)
可变长度参数:
也称为可变参数或不定参数,可以在方法声明中使用,用于接受不确定数量的参数。
使用可变长度参数时,需要在参数类型之后加上三个连续的点(
...
),表示这是一个可变长度参数。
可变长度参数会被当作一个数组处理,开发者可以像操作数组一样操作这个参数。
需要注意的是:
每个方法只能有一个可变长度参数,而且必须是最后一个参数。
public class Kbcs {
public static void main(String[] args) {
System.out.println(sum(1, 2, 3, 4, 5));
System.out.println(sum(1, 2, 3, 4, 5, 6, 7, 8, 9));
}
public static int sum(int... nums) {
int result = 0;
for (int num : nums) {
result += num;
}
return result;
}
}
可变长度参数
只能用于方法的最后一个参数位置,并且不能和数组作为参数同时存在,否则会编译错误。在实际开发中,可变长度参数经常用于编写简化代码的API,以及可以接受任意数量参数的方法。
方法重载:
所谓方法重载指的是:一个类中,有多个同名但参数不同的方法;
(参数不同包括:参数的类型、个数、顺序)
eg:
public class Ffcz2 {
public static void main(String[] args){
fire();
fire("岛国");
fire("岛国",999);
}
public static void fire(){
fire("岛国");
}
public static void fire(String country){
fire(country,1);
}
public static void fire(String country,int number){
System.out.println("发射了"+number+"枚武器给"+country);
}
}
(上面这个例子展现了嵌套的方法重载,第一个无参的fire执行方法的时候包含了第二个有country的fire,第二个只有country参数的fire执行的时候又包含了第三个有country和number的fire。)
递归:
在
Java
中,递归是指一个方法或函数在执行过程中调用自身的过程。递归可以用来
解决许多问题,特别是那些需要对某种数据结构进行深度优先搜索或遍历的问题。
递归函数通常包含两部分:基本情况和递归情况。基本情况是指问题可以直接解决的
情况,通常是递归函数的终止条件,避免无限递归。递归情况是指问题需要进一步分
解才能解决的情况,通常是递归函数中调用自身的部分。
在递归函数中,每次递归都会将问题规模减小,直到达到基本情况,然后开始回溯并
合并解决方案,直到最终解决整个问题。递归在某些情况下可以让程序更加简洁和优
雅,但也可能会带来性能问题和堆栈溢出等问题。
Java
中常见的递归实现包括计算阶乘、斐波那契数列等问题。递归虽然是一种强大的
编程技巧,但需要注意递归深度和递归栈的使用情况,以避免出现性能问题和堆栈溢
出等情况。