1 什么是方法?
为了实现某些功能,我们语句集合在一起,在我们需要使用时,方便我们直接调用该集合。
- 程序开始执行的时候是先执行main方法。因为main方法是一个入口。
- 在java语言中所有的方法体中的代码都必须遵循自上而下的顺序依次逐行执行。
- main方法不需要程序员手动调用,是由JVM调用的。但是除了main方法之外其他的方法,都需要程序员手动调用。
- 方法只有调用的时候才会执行,方法不调用是不会执行的。
- 方法定义在类体当中。方法定义的先后顺序没有关系。
- 方法中的变量都属于局部变量。方法结束之后,局部变量占用的内存会自动释放。
引用自一个快乐的野指针博客《java方法》
public class Demo01 {
public static void main(String[] args) {
int num = 1;
int t=test(num);
System.out.println(t);
}
public static int test(int a){
a++;
return a;
}
}
这里,我们定义了一个test方法,它独立于main方法外,我们不需要它时,它不会运行,但我们可以在需要使用它时,直接在main方法中调用它。
2 方法的定义
- 方法包含一个方法头和方法体。
- 修饰符:定义方法的访问类型,public、static等修饰符,告诉编译器如何调用方法。
- 返回值类型:方法可能会返回值,returnValueType是方法返回值的数据类型。当返回值为空时,通过viod关键字结束。
- 方法名:是方法的实际名称,和参数表共同构成方法签名。
- 参数类型:定义形参的类型。
- 形参:用于接收被调用时值,它类似于一个占位符;方法也可以不包含参数。
- 实参:实际传输给方法的值,在java中,实参会被复制一份,传输给形参再进行方法的运行,因此,方法对值的修改不影响实参本身。
- 方法体:方法包含的语句集合,是功能实现的途径。
3 方法的重载
我们可以定义方法名相同的两个方法,通过调用这个方法名,实现不同的功能;这是编译器通过逐个匹配方法的参数个数,参数类型,选择对应的方法。
public class Demo02 {
public static void main(String[] args) {
double t=test(1);
System.out.println(t);
}
public static int test(int a){
a++;
return a;
}
public static double test(double a){
a++;
return a;
}
}
- 方法名相同,参数列表不同。
- 返回值类型可以相同。
- 仅仅返回值类型不同,不能成为重载。
4 命名行传递参数
我们有时希望一个程序运行的时候再传递给它信息,我们可以通过传递命名行参数给main()方法来实现。
5 可变参数
- 在一个参数类型后加一
...
如double...
表明这是一个可变参数,可变参数是不定向的,它可以自适应值的个数。
public class Demo04 {
public static void main(String[] args) {
Demo04 demo04 = new Demo04();
demo04.test(1,2,3,4,5,6,7,8,9);
}
public void test(int... num){
for (int i = 0; i < 9; i++) {
System.out.println(num[i]);
}
}
}
- 可变参数一个方法中只能有一个,并且必须是最后一个参数。
6 递归方法
- 方法A可以调用方法B,同样方法A也可以调用方法A自身,被称为递归。
- 利用递归,我们可以用少量的代码实现复杂计算。
- 递归包含递归体和递归头;递归体:递归开始的条件;递归头:递归终止的条件。
利用递归实现阶乘的计算
public class Demo05 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
System.out.println(test(a));
}
public static int test(int n){
if (n==1){
return 1;
}else {
return n*test(n-1);
}
}
}
7例子
- 制作一个简易的计算器
import java.util.Scanner;
public class Demo06jsq {
public static void main(String[] args) {
System.out.println("------------------开始-------------------");
Scanner scanner = new Scanner(System.in);
while(true){
System.out.println("请输入0退出或继续数字:");
double num1 = scanner.nextDouble();
if (num1==0){
break;
}else {
System.out.println("请选择加减乘除:");
String a = scanner.next();
System.out.println("输入数字:");
double num2 = scanner.nextDouble();
switch (a){
case "+":
add(num1,num2);
break;
case "-":
sub(num1,num2);
break;
case "*":
mul(num1,num2);
break;
case "/":
div(num1,num2);
break;
default:
System.out.println("请输入正确的加减乘除(+-*/)");
}
}
}
scanner.close();
System.out.println("------------------结束-------------------");
}
public static void add(double n1, double n2) {
double sum = n1 + n2;
System.out.println("计算结果为:" + sum);
}
public static void sub(double n1, double n2) {
double df = n1 - n2;
System.out.println("计算结果为:" + df);
}
public static void mul(double n1, double n2) {
double pro = n1 * n2;
System.out.println("计算结果为:" + pro);
}
public static void div(double n1, double n2) {
double quo = n1/n2;
System.out.println("计算结果为:" + quo);
}
}