前言
大家好,今天给大家带来Java的方法,这篇文章会让大家了解什么是方法,怎么定义方法,怎么使用方法,以及递归等知识,希望能够帮到大家!!!废话少说,我们直接开始!!!
一、方法的出现
在编程中,某段功能的代码可能频繁使用到,如果在每个位置都重新实现一遍,会:
(1)使程序变得繁琐. 开发效率低下,做了大量重复性的工作。
(2)不利于维护,需要改动时,所有用到该段代码的位置都需要修改不利于复用。
因此,在编程中,我们也可以将频繁使用的代码封装成方法,需要时直接拿来使用即可,避免了一遍一遍的累赘。
二、方法的定义
格式:
修饰符 返回值类型 方法名称([参数类型 形参 …]){
方法体代码;
return 返回值;
}
如:
判断是否为闰年:
public static boolean isLeapYear(int year){
if((0 == year % 4 && 0 != year % 100) || 0 == year % 400){
return true;
}else{
return false;
}
注意:
(1)修饰符:现阶段直接使用public static 固定搭配
(2)返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成void
(3) 方法名字:采用小驼峰命名(除了第一个单词的首字母小写,剩下的单词首字母均大写。)
(4)参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开
(5)方法体:方法内部要执行的语句(即**{}内的语句**)
(6)在java当中,方法必须写在类当中
(7)在java当中,方法不能嵌套定义(即不能再一个方法中再定义一个方法。)
(8)在java当中,没有方法声明一说 (即方法可以在main方法的前面定义也可以在main方法的后面定义。)
(9)在调用方法时候要注意用相同类型的变量来接受这个方法的返回值,如果没有返回值(void)则不用接受,直接调用。
三、 实参和形参
(1)Java中的形参是在定义方法时候定义的变量,而实参为在main方法中调用方法时传入的变量。
(2)在Java中,实参的值永远都是拷贝到形参中,形参和实参本质是两个实体 。
(3)如果将实参传入形参时,在方法内部进行改变形参的值,由于形参和实参是两个不同的实体,所以形参的改变不会改变实参。如:
public class TestMethod {
public static void main(String[] args) {
int a = 10;
int b = 20;
swap(a, b);
System.out.println("main: a = " + a + " b = " + b);
}
public static void swap(int x, int y) {
int tmp = x;
x = y;
y = tmp;
System.out.println("swap: x = " + x + " y = " + y);
}
}
// 运行结果
swap: x = 20 y = 10
main: a = 10 b = 20
(4)如何改变实参:
可以使用数组来解决:数组可以传入地址。如:
public class TestMethod {
public static void main(String[] args) {
int[] arr = {10, 20};
swap(arr);
System.out.println("arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
}
public static void swap(int[] arr) {
int tmp = arr[0];
arr[0] = arr[1];
arr[1] = tmp;
}
}
// 运行结果
arr[0] = 20 arr[1] = 10
四、 方法重载
(1)为什么需要方法重载:
当我们方法的形参类型和实参类型不同时我们可能会再定义一个功能相同的方法。如:
public class TestMethod {
public static void main(String[] args) {
int a = 10;
int b = 20;
int ret = addInt(a, b);
System.out.println("ret = " + ret);
double a2 = 10.5;
double b2 = 20.5;
double ret2 = addDouble(a2, b2);
System.out.println("ret2 = " + ret2);
}
public static int addInt(int x, int y) {
return x + y;
}
public static double addDouble(double x, double y) {
return x + y;
}
}
但是这样的话我们要起两个名字,起名字本身就是一件很烦的事情。所以我们的Java便提供了方法重载。
(2)什么是方法重载:
通俗来说就是“一词多义”。
在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了 。如:
public class TestMethod {
public static void main(String[] args) {
add(1, 2); // 调用add(int, int)
add(1.5, 2.5); // 调用add(double, double)
add(1.5, 2.5, 3.5); // 调用add(double, double, double)
}
public static int add(int x, int y) {
return x + y;
}
public static double add(double x, double y) {
return x + y;
}
public static double add(double x, double y, double z) {
return x + y + z;
}
}
此时add这个名字被三个方法所用,我们调用时程序会根据你的参数来选择合适的方法。add方法就被重构了。
注意:
1.方法名必须相同
2.参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)
3.与返回值类型是否相同无关
五、 递归
当我们解决一个问题的时遇到的问题直接并不好解决,但是发现将原问题拆分成其子问题之后,子问题与原问题有相同的解法,等子问题解决之后,原问题就迎刃而解了。
概念:一个方法在执行过程中调用自身, 就称为 “递归”.
“我们如何使用递归呢???”
递归有一个起始条件, 然后有一个递推公式,我们按照公式去写代码,并且当满足一个条件时就会跳出递归(注意:当我们使用递归方法去解决子问题的时候,要相信他可以帮助我们解决问题!!!不要去深究他!!!)。
举个例子:
递归求N的阶乘(N!):
N! = N * (N - 1)… 2 * 1
找递归公式我们发现直接求N!不好求,那我们求N * (N - 1)!
而(N - 1)!= (N - 1)* (N - 2)!所以我们原问题N!变成了求(N - 1)!,求(N - 1)!变成了求(N - 2)!…求到1! = 1。
递归公式如下:
所以代码如下:
public static int factor(int n){
if (n == 1){
return 1;
}else{
return n * factor(n - 1);
}
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入N的值:");
int n = input.nextInt();
int ret = factor(n);
System.out.println("N的阶乘为:" + ret);
}
总结
本章就到此结束了,希望能帮到大家,我这里有一些递归的题,有需要话可以找我要,大家多多批评,评论,点赞,我真的非常需要 !!!