掌握方法的定义、调用、参数传递和重载技术
方法(Method)是Java中组织代码的基本单位,它将一组相关的语句封装在一起,实现特定的功能。方法提高了代码的复用性、可读性和可维护性,是面向对象编程的重要组成部分。
[访问修饰符] [static] 返回值类型 方法名(参数列表) {
// 方法体
[return 返回值;]
}
public void sayHello() {
System.out.println("Hello, World!");
}
public void greet(String name) {
System.out.println("Hello, " + name + "!");
}
public int getCurrentYear() {
return 2024;
}
public int add(int a, int b) {
return a + b;
}
定义方法后,需要通过方法调用来执行方法中的代码。Java中有两种主要的方法调用方式:静态方法调用和实例方法调用。
public class MathUtils {
// 静态方法定义
public static int multiply(int a, int b) {
return a * b;
}
public static void main(String[] args) {
// 静态方法调用
int result = MathUtils.multiply(5, 3);
System.out.println("结果: " + result);
}
}
public class Calculator {
// 实例方法定义
public int subtract(int a, int b) {
return a - b;
}
public static void main(String[] args) {
// 创建对象
Calculator calc = new Calculator();
// 实例方法调用
int result = calc.subtract(10, 4);
System.out.println("结果: " + result);
}
}
特性 | 静态方法 | 实例方法 |
---|---|---|
关键字 | static | 无static关键字 |
调用方式 | 类名.方法名() | 对象名.方法名() |
内存分配 | 方法区 | 堆内存 |
访问实例变量 | 不能直接访问 | 可以访问 |
使用场景 | 工具方法、数学计算 | 对象行为、状态操作 |
Java中的参数传递采用"值传递"机制,但对于不同类型的数据,传递的"值"有所不同。理解参数传递机制对于正确使用方法至关重要。
public class ParameterDemo {
public static void changeValue(int x) {
x = 100; // 只改变局部变量x的值
System.out.println("方法内x的值: " + x);
}
public static void main(String[] args) {
int num = 10;
System.out.println("调用前num的值: " + num);
changeValue(num);
System.out.println("调用后num的值: " + num);
}
}
传递基本数据类型时,方法接收的是实参值的副本,方法内对参数的修改不会影响原始变量的值。
public class ReferenceDemo {
public static void changeArray(int[] arr) {
arr[0] = 999; // 修改数组元素
System.out.println("方法内数组第一个元素: " + arr[0]);
}
public static void main(String[] args) {
int[] numbers = {1, 2, 3};
System.out.println("调用前数组第一个元素: " + numbers[0]);
changeArray(numbers);
System.out.println("调用后数组第一个元素: " + numbers[0]);
}
}
传递引用类型时,方法接收的是对象引用的副本,通过这个引用可以修改对象的内容,但不能改变原始引用指向的对象。
方法重载是指在同一个类中定义多个同名方法,但这些方法的参数列表不同。方法重载提供了使用相同方法名处理不同类型或数量参数的能力。
注意:仅仅返回值类型不同不能构成方法重载!
public class OverloadDemo {
// 重载方法1:两个int参数
public int add(int a, int b) {
return a + b;
}
// 重载方法2:三个int参数
public int add(int a, int b, int c) {
return a + b + c;
}
// 重载方法3:两个double参数
public double add(double a, double b) {
return a + b;
}
// 重载方法4:一个int和一个double参数
public double add(int a, double b) {
return a + b;
}
// 重载方法5:一个double和一个int参数
public double add(double a, int b) {
return a + b;
}
public static void main(String[] args) {
OverloadDemo demo = new OverloadDemo();
System.out.println(demo.add(1, 2)); // 调用方法1
System.out.println(demo.add(1, 2, 3)); // 调用方法2
System.out.println(demo.add(1.5, 2.5)); // 调用方法3
System.out.println(demo.add(1, 2.5)); // 调用方法4
System.out.println(demo.add(1.5, 2)); // 调用方法5
}
}
通过在线IDE体验完整的Java方法示例,包括方法定义、调用、重载等核心概念的实际应用。
public class BankAccount {
private double balance;
/**
* 存款方法
* @param amount 存款金额,必须大于0
* @return 存款后的余额
*/
public double deposit(double amount) {
if (amount <= 0) {
throw new IllegalArgumentException("存款金额必须大于0");
}
balance += amount;
return balance;
}
/**
* 取款方法
* @param amount 取款金额,必须大于0且不超过余额
* @return 取款后的余额
*/
public double withdraw(double amount) {
if (amount <= 0) {
throw new IllegalArgumentException("取款金额必须大于0");
}
if (amount > balance) {
throw new IllegalArgumentException("余额不足");
}
balance -= amount;
return balance;
}
/**
* 获取当前余额
* @return 当前账户余额
*/
public double getBalance() {
return balance;
}
}