Java方法基础
何谓方法?
理解System.out.println()
System.out.println() //调用System类中的out对象(标准输出对象)println()方法
- Java方法是语句的集合,它们一起执行功能
- 解决一类问题的步骤是有序组合
- 该方法包含在类或对象中
- 该方法在程序中创建,并在其他地方引用
- 设计方法原则:方法的初衷是功能块,即实现某一功能的句子块的集合。在设计方法时,最好保持方法的原子性,即一种方法只完成一个功能,这有利于我们以后的扩展
- 回顾:方法的命名规则?
方法的定义
-
Java该方法类似于其他语言的函数,是用来完成特定功能的代码片段。
-
一般来说,定义方法包括以下语法:
修饰符 返回值类型 方法名(参数类型) 参数名){ ... 方法体 ... return 返回值; }
-
方法包括方法头和方法体。
- 修改符:这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型
- 返回值类型:该方法可以返回值,returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值,returnValueType是关键字void。
- 方法名称:方法的实际名称。方法名和参数表共同构成方法签名
- 参数类型:参数就像一个占位符。当该方法被占用时,将值传递给参数,称为实际参数或变量。参数列表是指该方法的参数类型、顺序和参数数。参数是可选的,该方法不能包含任何参数
- 形参:用于接收外部输入的数据(用于定义功能)
- 实际参数:实际传递给参数的数据
- 方法体:方法体包含具体的语句,定义该方法的功能
方法的调用
-
对象名.方法名(实参列表)
-
Java根据该方法是否返回值,支持两种调用方法
-
当方法返回一个值时,方法调用通常被视为一个值,例如
int larger = max(1,2);
-
若方法返回值为void,方法调用必须是一个句子,例如
System.out.println("两个数相等");
-
课后理解:值传递、引用传递
- Java都是值传递
方法的重载
- 重载是指在一个类函数名称相同,但形参不同
- 方法重载规则:
- 方法名称必须相同
- 参数列表必须不同(不同的数量、不同的类型或不同的参数排列顺序)
- 方法的返回类型可以相同或不同
- 不同类型的返回不足以构成方法
- 实现理论:当方法名称相同时,编译器将根据调用方法的参数数和参数类型逐一匹配,选择相应的方法;如果匹配失败,编译器报告错误
命令行传参
- 有时你想在运行程序时传递信息,这取决于传递命令行参数main()函数实现
public static void main(String[] args) { for(int i =0;i< args.length;i ){ System.out.println("args[" i "]:" args[i]); } }
可变参数
- JDK1.5开始,java支持向一种方法传递相同类型的可变参数
- 在方法声明中,在指定参数类型后添加省略号(…)
- 一种方法只能指定一个可变参数,它必须是该方法的最后一个参数。在此之前必须声明任何普通参数
public class Demo04 { public static void main(String[] args) { Demo04 demo04 = new Demo04(); demo04.test(1,2,3); } public void test(int... i){ System.out.println(i[0]); System.out.println(i[1]); System.out.println(i[2]); } }
递归
-
A方法调用B方法,我们很容易理解
-
递归就是A方法调用A方法!就是自己调用自己
-
使用递归可以使用简单的程序来解决一些复杂的问题。它通常将一个大而复杂的问题转化为一个类似于原始问题的小问题。递归策略只需要少量的程序来描述解决问题所需的重复计算,大大降低了程序的代码量。递归的能力是用有限的句子来定义对象的无限集合。
-
递归结构包括两部分
- 递归头:什么时候不调用自己的方法;如果没有头,就会陷入死循环。
- 递归体:什么时候需要调用自己的方法?
-
递归要素:
- 边界条件:边界
- 前期:回到边界值
- 返回阶段:返回结果 n*(n-1)
-
操作:写一个计算器,实现加减乘除,循环接收新数据,通过用户交互实现
package com.kum.shu.method; import java.util.Scanner; public class TestDemo02 { public static void main(String[] args) { /** * 写一个实现加减乘除的计算器,并且循环接收新数据,通过用户交互实现 */ Scanner input=new Scanner(System.in); double first=0; double second=0; System.out.println("请输入第一个操作数:"); if(input.hasNextDouble()){ first=input.nextDouble(); System.out.println("请输入第二个操作数:"); if(input.hasNextDouble()){ second=input.nextDouble(); System.out.println("请输入运算符( - * /):"); String symbol=input.next(); double sum=0; if(symbol.equals(" ")){ sum = add(first,second); System.out.println("计算结果:" first symbol second "=" sum); }else if(symbol.equals("-")){ sum =sub(first,second); System.out.println("计算结果:" first symbol second "=" sum); }else if(symbol.equals("*")){ sum = mul(first,second); System.out.println("计算结果:" first symbol second "=" sum); }else if(symbol.equals("/")){ sum = div(first,second); System.out.println("计算结果:" first symbol second "=" sum); } else
System.out.println("输入无效");
}
}else{
System.out.println("输入无效");
}
}else{
System.out.println("输入无效");
}
input.close();
}
public static double add(double a,double b){
return a+b;
}
public static double sub(double a,double b){
return a-b;
}
public static double mul(double a,double b){
return a*b;
}
public static double div(double a,double b){
return a/b;
}
}