前言
本人的技术笔记会优先发布在个人站点longyxblg.cn
方法的概念和使用
在编程中,某段功能的代码可能频繁使用到,如果在每个位置都重新实现一遍,会:
-
使程序变得繁琐
-
开发效率低下,做了大量重复性的工作
-
不利于维护,需要改动时,所有用到该段代码的位置都需要修改
-
不利于复用
因此,在 Java 编程中,我可以将频繁使用的代码封装成方法,类似于 C 语言中的函数,需要时直接拿来链接(即方法名–方法的入口地址)使用即可,避免了一遍一遍的累赘。
使用方法有以下好处:
-
模块化的组织代码
-
一份代码可以在多个位置使用
-
让代码更好理解更简单
-
直接调用现有方法开发, 不必重复造轮子
方法的定义
语法格式
修饰符 返回值类型 方法名称([参数类型 形参 ...]){
方法体代码;
[return 返回值];
}
比如此时,要定义一个方法来判断一个整数的奇偶性
public static boolean IsOdd(int num){
// 判断 num 是不是奇数
if(num % 2 != 0)
{
return true;
}
else
{
return false;
}
}
int a = 10;
if(IsOdd(a))
{
System.out.println("变量 a 是奇数");
}
else
{
System.out.println("变量 a 是偶数");
}

-
修饰符:现在直接使用public static 固定搭配,更多的修饰符会在后面介绍
-
返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成void
-
方法名字:采用小驼峰命名
-
参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开
-
方法体:方法内部要执行的语句
-
在java当中,方法必须写在类当中
-
在java当中,方法不能嵌套定义
-
在java当中,没有方法声明一说
方法调用的执行过程
调用方法—>传递参数—>找到方法地址—>执行被调方法的方法体—>被调方法结束返回—>回到主调方法继续往下执行
-
定义方法的时候, 不会执行方法的代码. 只有调用的时候才会执行
-
一个方法可以被多次调用
实参和形参的关系
类似于 C 语言中的传值调用,形参只是实参的一份临时拷贝,形参的改变不会影响实参的值。
public static void Swap(int x , int y){
// 测试能不能交换实参的值
x = x ^ y;
y = x ^ y;
x = x ^ y;
}
int a = 10;
int b = 20;
Swap(a,b);
System.out.println(a);
System.out.println(b);

调试查看到在函数中形参确实是成功交换了值

实参并没有交换
由于 Java 中是没有指针这一概念的,具体要怎么实现将放到类与对象中说明。
方法重载
在自然语言中,一个词语如果有多重含义,那么就说该词语被重载了,具体代表什么含义需要结合具体的场景。
在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。
注意,构成重载的条件:
-
方法的名字必须相同
-
参数列表必须不同
-
与返回值类型无关

public static double add(double x,double y){
// 方法的重载
return x + y;
}
public static int add(int x, int y ,int z){
// 方法的重载
return x + y + z;
}
public static int add(int x,int y){
// 方法的重载
return x + y;
}
int num1 = 10;
int num2 = 20;
int num3 = 30;
double num4 = 5.0;
double num5 = 10.0;
System.out.println(add(num1,num2));
System.out.println(add(num1,num2,num3));
System.out.println(add(num4,num5));

编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法。
递归
有时候遇到的问题直接并不好解决,但是发现将原问题拆分成其子问题之后,子问题与原问题有相同的解法,等子问题解决之后,原问题就迎刃而解了。这种思想称为递归。
递归的概念
一个方法在执行过程中调用自身, 就称为 “递归”。递归有一个递推公式,还有一个终止条件。每一次递归都更接近这个终止条件。
递归的使用
public static void Reverse(int num){
// 逆序打印一个数字
if(num > 0)
{
System.out.print(num % 10);
Reverse(num / 10);
}
}
public static int Factorial(int n){
// 递归求 n 的阶乘
if(n != 1)
{
return n * Factorial(n - 1);
}
return 1;
}
System.out.println(Factorial(5));
Reverse(1234);


129

被折叠的 条评论
为什么被折叠?



