目录
在上一次博客中小编主要和大家分享了Java中的一些基础知识,与小编之前和大家分享的C语言没有太大的区别,但是从这次开始小编就要和大家分享一些Java中与C语言不一样的地方了,准备好接收哦!
首先我们得明白什么是方法,所谓方法就是一个代码片段,类似于C语言当中的函数。
方法存在的意义:
语法格式:
[]中的值表示可以加也可以不加。
- 修饰符 返回值类型 方法名称 ([参数类型 形参]) {
-
- 方法体代码;
-
- [return 返回值];
-
- }
注意:
调用方法---->传递参数---->找到方法地址---->执行被调方法的方法体---->被调方法结束返回---->回到主调方法继续往下走
代码如下所示:
- import java.util.Scanner;
-
- public class Test1 {
- public static int Add(int x, int y) {
- return x + y;
- }
- public static void main(String[] args) {
- Scanner scan = new Scanner(System.in);
- int a = scan.nextInt();
- int b = scan.nextInt();
- int ret = Add(a,b);
- System.out.println(ret);
- }
- }
结果如下所示:
解析:

在Java中,实参值永远都是拷贝到形参中去的,形参和实参本质是两个实体。形参的名字可以随意取。
我们可以看到下面代码中被调用方法中的值已近被交换了,但是主方法中却没有被交换。这样我们就可以更加确信实参与形参是两个实体了。
代码如下所示:
- import java.util.Scanner;
-
- public class Test2 {
- public static void Swap(int x, int y) {
- int tmp = 0;
- tmp = x;
- x = y;
- y = tmp;
- System.out.println("Swap方法中的:" + x + " " + y);
- }
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- int a = scanner.nextInt();
- int b = scanner.nextInt();
- Swap(a,b);
- System.out.println("主方法中的:" + a + " " + b);
- }
- }
结果如下所示:
在Java中如果多个方法名字相同,但是参数列表不同,则称该种方法被重载了。
注意:
代码如下所示:
- public class Test3 {
- public static int Sum(int a, int b) {
- return a + b;
- }
- public static int Sum(int a, int b, int c) {
- return a + b + c;
- }
- public static double Sum(double a, double b) {
- return a + b;
- }
- public static double Sum(double a, double b, double c) {
- return a + b + c;
- }
- public static double Sum(int a, double b) {
- return a + b;
- }
- public static double Sum(double b,int a) {
- return a + b;
- }
- public static void main(String[] args) {
- int ret1 = Sum(10,20);
- System.out.println(ret1);
- System.out.println("==============");
- System.out.println(Sum(3.2, 9));
- System.out.println("==============");
- System.out.println(Sum(2,4.1));
- System.out.println("==============");
- System.out.println(Sum(1,2,3));
- System.out.println("==============");
- System.out.println(Sum(1.2,2.3,3.4));
- }
- }
结果如下所示:

在同一个作用域中不能定义两个相同名称的标识符,比如:方法中不能定义两个名字一样的变量,那么为什么类中就可以定义方法名相同的方法呢?
其实它是经过编译器编译修改之后最终的名字。具体的方法:方法全路径名+参数列表+返回值类型,构成方法的完整的名字。
自身中又包含了自己,一个方法在执行过程中调用自身,就称为递归。
递归的必要条件:
我们直接看一个经典的案例:河内塔。
代码如下所示:
- public class Test4 {
- /**
- * @param n 几个盘子
- * @param pos1 起始位置
- * @param pos2 中转位置
- * @param pos3 目的位置
- */
- public static void move(char pos1,char pos2) {
- System.out.print(pos1 + "->" + pos2 + " ");
- }
- public static void Hanoi(int n, char pos1, char pos2, char pos3) {
- if(n == 1) {
- move(pos1,pos3);
- return;
- }
- Hanoi(n - 1,pos1,pos3,pos2);
- move(pos1,pos3);
- Hanoi(n - 1,pos2,pos1,pos3);
- }
- public static void main(String[] args) {
- Hanoi(1,'A','B','C');
- System.out.println();
- Hanoi(2,'A','B','C');
- System.out.println();
- Hanoi(3,'A','B','C');
- System.out.println();
- }
- }
结果如下所示:

方法调用的时候,会有一个“栈”这样的内存空间描述当前的调用关系,称为调用栈。
每一次的方法调用就称为一个“战帧”,每个栈帧中包含了这次调用的参数是哪些,返回到哪里继续执行等信息。
这次小编就给大家分享到这里啦如果想要深入了解Hanoi的同学可以去看小编写的C语言这篇:http://t.csdn.cn/ezdy1 ,希望对大家有所帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)