何谓方法
- Java方法是语句的集合,它们在一起执行一个功能
- 方法是解决一类问题的步骤的有序的集合
- 方法包含于类或者对象中
- 方法在程序中被创造,在其他地方被引用
设计方法的原则
- 方法的本意是功能块,就是实现某个功能的语句块的集合。
- 设计方法的时候,最好保持方法的原子性,就是尽量一个方法只完成一个功能
方法的命名规则
- 首字母小写+驼峰规则
public class Demo01 {
//main方法
public static void main(String[] args) {
//实际参数:实际调用传递给他的参数
int sum = add(40,60);
System.out.println(sum); //结果:100
}
//加法
//形式参数:用来定义作用
public static int add(int i, int j){
return i + j ;
}
}
方法的定义及调用
- Java的方法类似于其他的语言的函数、子程序,是用一段用来完成特定功能的代码片段。
- 语法:
修饰符 返回值类型 方法名( 参数类型 参数名 ){
...
方法体
...
return 返回值; //如果是 void, 就不需要 return
}
-
必要说明
-
**修饰符:**这是可选的,告诉编译器如何调用该方法,定义了该方法的访问类型(如:public、static、final…)
-
**返回值类型:**方法可能会返回返回值,也可能没有。 returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值,此时这种情况下,returnValueType 的关键字就是 void
-
**方法名:**是方法的实际名称。方法名和参数表共同构成方法签名
-
**方法体:**方法体包括具体的语句,定义该方法的功能。
-
参数类型:参数像一个占位符。当方法被调用时,传递值给参数,这个值可以是实参或者是变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包括任何参数。
a.**实参:**调用方法时实际传给方法的数据
b.**形式参数(变量):**在方法被调用时用于接收外界输入的数据
-
public class Demo02 {
public static void main(String[] args) {
int min = min(10, 20);
System.out.println(min);
}
public static int min(int a, int b){
int result = 0;
if(a==b){
System.out.println("参数相等="+a);
return 0; //终止方法:
}
if(a<b){
result = a;
}else{
result = b;
}
return result;
}
方法调用
- 调用的方法:对象名.方法名(实参列表)
- Java支持两种调用方法的方式,根据方法是否返回值来选择
- 当方法返回一个值的时候,方法调用通常被当做一个值
int larger = max(30,40);
- 如果方法返回值是 void ,方法调用一定是一条语句
System.out.println("Hello, World");
- 拓展知识:
- **值传递:**只要是基本类型传递都是值传递,Java属于值传递
- **引用传递 (类传递):**针对于基本类型进行封装,对封装进行传递,是引用传递
方法重载
-
重载就是在一个类中,有相同的函数名称,但是形参不同的函数
-
方法的重载规则:
- 方法名称必须相同
- 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)
- 方法的返回类型可以相同,也可以不同
- 仅仅返回类型不同不足以成为方法的重载
-
**实现理论:**方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器会报错
package method;
public class Demo03 {
public static void main(String[] args) {
double min = min(10.0, 20.0);
System.out.println(min);
}
public static int min(int a, int b){...}
public static double min(double a, double b){...}
}
可变参数
- 在方法声明中,在指定参数类型后家啊一个省略号(…)
- 一个方法只能指定一个可变参数,它必须是方法的最后一个参数。任何参数必须在它之前声明
public class Demo05 {
public static void main(String[] args) {
//调用可变参数的方法
printMax(34,515,26,613,54.5 ); //The max value is 613.0
printMax(new double[]{1,2,3}); //The max value is 3.0
}
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("The max value is "+ result);
}
}
递归
- 递归就是:A方法调用A方法! 就是自己调用自己
- 利用递归可以用简单的程序来解决一些复杂问题。它通常把一个大型复杂的问题层层转化为一个原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可描述出解题过程所需要的多次重复计算问题,可以大程度减少程序的代码量。递归的能力转载于用有限的语句来定义对象的无限集合。
- 递归结构:
- **递归头:**也就是边界条件,不然会陷入死循环
- **递归体:**调用自身方法的程序部分
public class Demo06 {
//阶乘:5! = 5*4*3*2*1
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入需要计算的阶次:");
int i = scanner.nextInt();
System.out.println( i + "! = " + f(i));
}
public static int f(int n){
if(n==1){ //边界条件
return 1;
}else {
return n*f(n-1);
}
}
}