Java方法详解
方法定义以及调用
- 定义:方法是解决一类问题的步骤的有序组合,执行特定功能
修饰符 返回值类型 方法名(参数类型 参数名){ 。。。 方法体 。。。 return 返回值 }
方法中的参数类型:实参以及形参
实参:调用方法时实际传递给方法的数据
形参:方法被调用时用于接收外界输入的数据
- 调用:
- 值传递:
- 引用传递:
- Java只有值传递
方法重载
- 定义:在一个类中,有相同的函数名称,但形参不同的函数
- 规则: - 方法名称必须相同
- 参数列表必须不同(个数不同,或类型不同,参数排列顺序不同等)
- 方法的返回类型可以不同也可以相同
- 仅仅返回类型不同不足以成为方法重载 - 实现理论
方法名称相同时,编译器会根据调用方法的参数个数,参数类型等逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错
命令行传参
- 有时候希望运行一个程序时候再传递给它消息,这要靠传递命令行参数给main()函数实现
- 在用命令行运行时,必须回到src目录下,使用java 包名.类名去调用,否则会报找不到主类错误
- 以下第一个图为错误示范
正确示范
代码public class CommadArgs { 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 Demo3 { public static void main(String[] args) { Demo3 demo3 = new Demo3(); demo3.test(1,2,3,4,5); } public void test(int... i){ System.out.println(i[0]); } }
public class Demo3 { public static void main(String[] args) { Demo3 demo3 = new Demo3(); demo3.test(new double[]{1,5,8,56,8}); } public void test(double... num){ if (num.length == 0){ System.out.println("No argument passed"); return; } double result = num[0]; for (int i = 1; i < num.length; i++) { if (num[i] > result){ result = num[i]; } } System.out.println("the max valueis:" + result);; } }
递归
- 定义:A方法调用A方法
- 组成: 递归头:什么时候不调用自身方法,如果没有头,将陷入死循环
递归体:什么时候需要调用自身方法//计算4的阶乘 public class Demo5 { public static void main(String[] args) { System.out.println(f(4)); } public static int f(int n){ if (n == 1){ return 1; } else { return n * f(n-1); } } }
Java使用栈机制实现递归,容易内存崩溃