方法
定义
方法就是一个功能模块的集合,将很多的代码放置在一组{}中,形成一个代码块。可以提高代码的复用性。
为什么需要方法
举例
水仙花数:
public class IsFlower{
public static void main(String[] args){
System.out.println("输入数字:");
Scanner sc = new Scanenr(System.in);
int num = sc.NextInt();
int length = 0;
int temp = num;
while(temp>0){
temp / = 10;
length++;
}
temp = num;
int result = 0;
while(temp>0){
int bit = temp%10;
temp/ = 10;
int ret = 1;
for(int i = 0;i<length;i++){
ret* = bit;
}
result += ret;
}
String msg = result==num?"是水仙花数":"不是水仙花数"
System.out.println(msg);
}
}
Tips:在编写过程中,如果出现相同代码一定要注意,切勿重复造轮子
- 方法的好处:
- 可以提高代码的复用性
- 提高代码后期的扩展性、延展性
- 提高代码后期的维护性
如何使用方法
i、方法的声明
- 存放在类中main方法外
- 声明格式
[修饰符][static]{void|数据类型}方法名([参数列表]){
执行语句;
}
public static void method(){
System.out,println("第一个方法");
}
- 使用
- 在main方法中通过方法名进行调用
public class Method01 {
public static void main(String[] args) {
method();
}
public static void method() {
System.out.println("我的第一个方法");
}
}
- 方法命名:
- 遵循标识符命名规则
- 见名知意
参数列表
i、完成两个数相加
public class Method02 {
public static void main(String[] args) { add();
}
public static void add() {
int num1 = 20;
int num2 = 30;
int sum = num1+num2;
System.out.println("累加的和是:"+sum);
}
}
上述代码只能惊醒20和30两个数进行累加,无法计算任意两个数相加,该方法的复用性不强
ii、参数列表的使用
参数列表声明在方法后的小括号中,可以声明0个或者多个
public class Method03 {
public static void main(String[] args) { add(40,20);
}
//声明一个add方法 需要两个int类型的参数
public static void add(int num1,int num2) { System.out.println(num1+num2);
}
}
- 参数列表的注意事项
- 将方法声明的番薯列表是形式参数
- 传入的参数是实际参数
- 形式参数只声明不需要初始化值就可以使用,因为调用的时候用实际参数给他赋值
iii、变量的分类
public class Method04 {
public static void main(String[] args) { int num1 = 20;
int num2 = 30;
add(40,20); System.out.println(num1+"==="+num2);
}
//声明一个add方法 需要两个int类型的参数
public static void add(int num1,int num2) { System.out.println(num1+"==="+num2);
}
}
- 变量的三要素:数据类型、变量名、生命周期(作用范围)
根据声明的位置不同,将变量分为局部变量和成员变量(全局变量)
变量的分类 | 声明位置 | 作用范围 | 注意事项 |
---|---|---|---|
局部变量 | 声明在方法中或者代码块中 | 当前声明的{}中有效 | 生命周期一定要先声明在赋值才能使用 |
成员变量 | 声明在类中方法外 | 在当前类中都有效 | 调用时前加static修饰,或者创建对象访问,无需初始化,每个不同的对象都存在默认值 |
返回值
被调用的方法可以将自己的最后计算结果返回给调用处,方便继续执行后续的业务逻辑。
public class Method06 {
public static void main(String[] args) { int r = 10;//1:
double area = getCircleArea(r);
}
public static double getCircleArea(int r) { double pi = 3.14;
double area = pi*r*r;
System.out.println("半径"+r+"的圆的面积是:"+area);
return area;
}
}
- void:该方法没有返回值
- 一个方法中可以不存在void
- 返回值是什么类型,通过该类型去代替void的位置
方法重载
在同一个类中,同名的两个或者是多个方法,参数列表不同,我们称该多个方法为方法重载。
重载在编码过程中是有意义的,针对于不同的参数做相同的功能。
两同三不同:同类 同名 参数列表不同(个数、类型、顺序) 注意返回类型和重载无关。 附加知识:在jvm中确定一个方法的方式是:返回值类型+方法名称+参数列表。java编程规范和JVM规范。
public class Method08 {
public static void main(String[] args) {
add(1,2);
} //计算10和20的和
public static void add() {
int num1 = 10;
int num2 = 20;
System.out.println(num1+num2);
} //计算传入的两个参数的和
public static void add(int num1,int num2){
System.out.println(num1+num2);
}
public static void add(int num1){
System.out.println(num1+20);
}
public static void add(int num1,byte num2){
System.out.println(num1+num2);
}
public static void add(byte num1,int num2){
System.out.println(num1+num2);
}
}
递归
递归是一种变成技巧,程序自己调用自己
在递归程序中存在一个出口–>递归头
递归的最大优势是编写简单
计算一个数的阶乘
1! = 1;
2! = 1*2 = 1!*2
3! = 1*2*3 = 2!*3
......
f(n) = f(n-1)*n
假设编写一个方法,用来计算一个数的阶乘。
public static int method(int n) {
if(n==1||n==2) {
return 1;
}
return method(n-1)+method(n-2);
}
递归耗时的原因:
递归不光运行慢,而其及其占内存