方法的定义
方法包含一个方法头和一个方法体
1、修饰符,它是可选项,告诉编译器如何调佣方法。定义了方法的访问类型。
2、返回值类型,方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,返回值是关键字void。
3、方法名,它是方法的实际名称。方法名和参数表共同构成方法签名。
4、参数类型,数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
形式参数:再方法被调用时用于接收外界输入的数据。
实参:调用方法时实际传给方法的数据。
5、方法体:方法体包含具体的语句,定义该方法的功能。
public class Demo01 {
public static void main(String[] args) {
int sum= add(2,3);
System.out.println(sum);
}
public static int add(int a,int b){
return a+b;
}
}
调用方法
调用方法:对象名.方法名(实参列表)
java支持两种调用方法的方式,根据方法是否返回值来选择。
当方法返回一个值得时候,方法调用通常被当做一个值例如:int max = max(10,10);
如果方法返回值是void,方法调用一定是一条语句。
public class Demo02{
public static void main(String[] args) {
int max = max(10,10);
System.out.println(max);
}
//比大小
public static int max(int a, int b) {
int i = 0;
if (a==b){
System.out.println("a=b");
return 0;
}
if (a < b) {
i = b;
} else{
i = a;
}
return i;
}
}
方法的重载
方法重载的规则:
1、方法名称必须相同
2、参数列表必须不同
3、方法的返回值可以也可以不同。
4、仅仅返回类型不同不足成为方法的重载。
实现理论:
方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应得方法,如果匹配失败,则编译器报错。
public class Demo03 {
public static void main(String[] args) {
/*Scanner scanner = new Scanner(System.in);
System.out.println("请输入数字:");
double a = scanner.nextDouble();
double b = scanner.nextDouble();*/
System.out.println(add(10,20));
System.out.println(add(10,20.1));
}
public static int add(int i,int j){
int sum = 0;
sum = i + j;
return sum;
}
public static double add(double i,double j){
double sum = 0;
sum = i + j;
return sum;
}
}
可变参数
- jdk 1.5 开始,java支持传递同类型的可变参数给一个方法
- 在方法声明中,在指定参数类型后加一个省略号(…)。
- 一个方法中只能一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。*/
public class Demo04 {
public class Demo04 {
public static void main(String[] args) {
/*正常调用
printMax(23,23,22,15,16,19);
printMax(new double[]{1,3,5,9});
printMax();*/
//引用对象调用
Demo04 demo04 = new Demo04();
demo04.printMax();
}
public static void printMax(double... numbers){
if (numbers.length == 0){
System.out.println("NO argument passed");
return;
}
double result = numbers[0];
//排序!
for (int i = 1;i < numbers.length; i++){
if (numbers[i] > result) {
result = numbers[i];
}
}
System.out.println("最大的数为:" + result);
// System.out.println(numbers); 输出地址
}
}
递归
- 平常我们调用都是A方法调用B方法
- 递归就是:A方法调用A方法!它自己调用自己
- 利用递归我们可以用简单的程序解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可以描述出解题过程所需要的多次重复计算,大大滴减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合
递归结构包括两个部分:
-
递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。
-
递归体:什么时候需要调用自身方法
import java.util.Scanner; public class Demo05 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("输入1到10之间的任意一个数:"); int i = scanner.nextInt(); System.out.println(f(i)); } public static int f(int n){ if (n == 1){ return 1; }else { return n*f(n-1); } } }
应用计算器
import java.util.Objects; import java.util.Scanner; /*写一个计算器要求实现加减乘除功能,并且能够循环就收新的数据,通过用户交互实现 思路: 写四个方法:加减乘除 利用循环+Switch进行用户交互 传递需要操作的两个数 输出结果 */ public class Demo06 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); boolean ny = true; while (ny) { System.out.println("输入第一个数:"); int x = scanner.nextInt(); System.out.println("输入运算符:"); String f = scanner.next(); System.out.println("输入第2个数:"); int y = scanner.nextInt(); switch (f){ case "+" : System.out.println(sum(x,y)); break; case "-" : System.out.println(minus(x,y)); break; case "*" : System.out.println(ride(x,y)); break; case "/" : System.out.println(divide(x,y)); break; default: System.out.println("信息输入错误"); break; } System.out.println("是否继续输入(Y/N)"); String yn = scanner.next(); if (Objects.equals(yn, "N")) { ny = false; } } } public static int sum(int a,int b){ int c = 0; c = a + b; return c; } public static int minus(int a,int b){ int c = 0; c = a - b; return c; } public static int ride(int a,int b){ int c = 0; c = a * b; return c; } public static int divide(int a,int b){ int c = 0; c = a / b; return c; } }