Java方法
方法举例:
System.out.println();
System是类、out是对象、println()是方法
- Java方法是语句的集合,它们在一起执行一个功能,在程序中被创建,在其他地方被调用
- 设计方法原则:一个方法只执行一个功能,有利于后期的拓展
方法的定义和调用
方法定义
方法:
修饰符 返回值类型 方法名 (参数类型 参数名){
方法体
return 返回值
}
-
参数类型:形式参数与实参
形式参数:用来定义的作用的
实参:实际调用传递给方法的参数
package com.yushuo.method; import java.util.Scanner; public class Demo01 { //main方法 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int i = 0,j = 0,sum; System.out.println("请输入第一个整数:"); if (scanner.hasNextInt()){ i = scanner.nextInt(); } System.out.println("请输入第二个整数:"); if (scanner.hasNextInt()){ j = scanner.nextInt(); } //实参:实际调用传递给方法的参数 sum = add(i,j);//这两个参数都必须要初始化,否则会报错 System.out.println("两个数的和为:" + sum); scanner.close(); } //加法 //形式参数:用来定义的作用的 public static int add(int a,int b){ return a + b;//return既可以返回值,也用以终结方法 } }
方法调用
调用方法:对象名.方法名(实参列表)
两种调用方式:
-
当方法返回一个值时,方法调用通常被当作一个值
int max = max(3,4);
-
方法返回值是void时,用语句调用
System.out.println("Hello World!");
方法的重载
重载就是在一个类中,有相同的函数名称,但是形参不同
方法重载规则:
- 方法名称必须相同
- 形参列表必须不同(个数不同、类型不同或参数排列顺序不同)
- 方法的返回类型可以相同也可以不同
- 仅仅返回类型不同不足以成为方法的重载
package com.yushuo.method;
import java.util.Scanner;
public class Demo02 {
//main方法
public static void main(String[] args) {
int sum1;
double sum2;
sum1 = add(3,4);
System.out.println("整数相加为:" + sum1);
sum2 = add(3.0,4.0);
System.out.println("小数相加为:" + sum2);
}
//两个方法,方法名相同,参数类型不同
//整数加法
public static int add(int a,int b){
return a + b;
}
//小数加法
public static double add(double a,double b){
return a + b;
}
}
实现理论:
- 方法名称相同时,编译器会根据调用方法的参数个数、类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。
命令行传递参数(不常用)
有时候希望程序运行的时候再传递给它消息,这时靠命令行传递参数给main()方法实现
package com.yushuo.method;
public class Demo03 {
public static void main(String[] args) {
//args.length数组长度
for (int i = 0; i < args.length; i++) {
System.out.println("args["+ i + "]:" + args[i]);
}
}
}
进行编译的时候需要命令行再Demo03所在目录下编译,运行的时候需要再src文件夹进行
可变参数
- JDK1.5开始,Java支持传递同类型的可变参数给一个方法
- 在方法声明中,在指定参数类型后加一个省略号(…)
- 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
- 可变参数本质上就是数组
package com.yushuo.method;
public class Demo04 {
public static void main(String[] args) {
//调用可变参数的方法
//传递一些参数
printMax(56,48,3,546,2,548,18.6,55.3);
//传递一个数组
printMax(new double[]{1,2,3});
}
//numbers的个数可变
//可变参数本质上就是数组
public static void printMax(double... numbers){
if (numbers.length == 0){
System.out.println("No argement passed");
return;
}
double result = numbers[0];
//排序,便利numbers找到其中最大的
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] > result){
result = numbers[i];
}
}
System.out.println("The max value is " + result);
}
}
递归
- 递归:A方法调用A方法,自己调用自己
- 利用递归可以用简单的程序来解决一些复杂的问题,它通常把大型复杂问题层层转化为一个与原问题相似的小规模问题来求解,大大地减少了程序的代码量。
- 递归的能力在于用有限的语句来定义对象的无线集合
package com.yushuo.method;
import java.util.Scanner;
public class Demo05 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数:");
long n = 0L,s;
if (scanner.hasNextLong()){
n = scanner.nextLong();
}
s = f(n);
System.out.println(n + "的阶乘为" + s);
scanner.close();
}
//求阶乘
public static long f(Long n){
if (n == 1l){
return 1L;
}else {
return n * f(n-1);
}
}
}