方法(有的人喜欢叫函数)是一段可重用的代码段。
方法定义的语法形式:
[修饰符] 返回值类型 方法名([参数类型 参数名]){ ... 方法体 ... return 返回值; }
示例
public static void main(String[] args) { System.out.println("Hello World"); }
方法包含一个方法头和一个方法体。下面是一个方法的所有部分:
return;
这种形式。当程序调用一个方法时,程序的控制权交给了被调用的方法。当被调用方法的返回语句执行或者到达方法体闭括号时候交还控制权给程序。
Java 支持两种调用方法的方式,根据方法是否有返回值来选择。
int larger = max(30, 40);
System.out.println("Hello World");
递归调用
Java 支持方法的递归调用(即方法调用自身)。
?? 注意:
- 递归方法必须有明确的结束条件。
- 尽量避免使用递归调用。因为递归调用如果处理不当,可能导致栈溢出。
斐波那契数列(一个典型的递归算法)示例:
public class RecursionMethodDemo { public static int fib(int num) { if (num == 1 || num == 2) { return 1; } else { return fib(num - 2) + fib(num - 1); } } public static void main(String[] args) { for (int i = 1; i < 10; i++) { System.out.print(fib(i) + "\t"); } } }
在 C/C++ 等编程语言中,方法的参数传递一般有两种形式:
那么,Java 中是怎样的呢?
Java 中只有值传递。
示例一:
public class MethodParamDemo { public static void method(int value) { value = value + 1; } public static void main(String[] args) { int num = 0; method(num); System.out.println("num = [" + num + "]"); method(num); System.out.println("num = [" + num + "]"); } } // Output: // num = [0] // num = [0]
示例二:
public class MethodParamDemo2 { public static void method(StringBuilder sb) { sb = new StringBuilder("B"); } public static void main(String[] args) { StringBuilder sb = new StringBuilder("A"); System.out.println("sb = [" + sb.toString() + "]"); method(sb); System.out.println("sb = [" + sb.toString() + "]"); sb = new StringBuilder("C"); System.out.println("sb = [" + sb.toString() + "]"); } } // Output: // sb = [A] // sb = [A] // sb = [C]
以上两个示例,无论向方法中传入的是基础数据类型,还是引用类型,在方法中修改的值,在外部都未生效。
Java 对于基本数据类型,会直接拷贝值传递到方法中;对于引用数据类型,拷贝当前对象的引用地址,然后把该地址传递过去,所以也是值传递。
参考:
https://www.cnblogs.com/jingmoxukong/p/12049215.html
原文:https://www.cnblogs.com/myitnews/p/12943889.html