Java 方法详解:创建、调用、重载与抽象设计
Java 方法是一组语句的集合,用于执行特定操作。例如调用 System.out.println() 时,系统实际执行了多条语句在控制台输出信息。本文将系统讲解如何创建带/不带返回值的方法、如何调用带/不带参数的方法,以及方法抽象在程序设计中的应用。
方法定义语法
修饰符 返回值类型 方法名(参数列表) {
// 方法体
}
组成部分:
- 修饰符:定义访问权限(public、private 等),可选
- 返回值类型:方法返回的数据类型,无返回值用
void - 方法名:标识符,遵循命名规范
- 参数列表:参数类型、顺序、数量;可为空
- 方法体:实现具体功能的语句块
示例:求两数最小值
/** 返回两个整数中的较小值 */
public static int minFunction(int n1, int n2) {
int min;
if (n1 > n2) min = n2;
else min = n1;
return min;
}
方法调用机制
调用方法时,程序控制权转移到被调用方法。方法在以下两种情况返回控制权:
- 执行
return语句 - 到达方法结束的右大括号
}
void 方法 调用是一条语句,以分号结尾:methodRankPoints(255.7);
有返回值方法 调用可用于表达式:int result = sum(6, 9);
完整调用示例
public class ExampleMinNumber {
public static void main(String[] args) {
int a = 11, b = 6;
int c = minFunction(a, b);
System.out.println("最小值 = " + c);
}
public static int minFunction(int n1, int n2) {
int min = (n1 > n2) ? n2 : n1;
return min;
}
}
输出: 最小值 = 6
void 关键字
void 表示方法无返回值。调用 void 方法必须作为语句使用。
public static void methodRankPoints(double points) {
if (points >= 202.5) System.out.println("Rank:A1");
else if (points >= 122.4) System.out.println("Rank:A2");
else System.out.println("Rank:A3");
}
参数传递:值传递
Java 采用值传递机制。基本类型传递的是值的副本;引用类型传递的是引用的副本(即地址副本)。方法内修改参数不会影响实参原值(基本类型)或引用指向的对象内容可变但引用本身不可变。
值传递演示:交换失败
public static void swapFunction(int a, int b) {
int c = a; a = b; b = c; // 仅改变局部副本
}
调用后原变量 a、b 值不变。
方法重载
同一类中定义多个同名但参数列表不同(类型、数量、顺序)的方法。返回类型可以不同,但仅靠返回类型不同无法构成重载。
重载示例:支持 int 和 double
public static int minFunction(int n1, int n2) { ... }
public static double minFunction(double n1, double n2) { ... }
调用时编译器根据实参类型自动匹配对应重载版本。
命令行参数
main(String[] args) 的 args 数组存储命令行传入的参数(以空格分隔)。
public class CommandLine {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println("args[" + i + "]: " + args[i]);
}
}
}
运行 java CommandLine this is a test 100 将输出各参数及索引。
this 关键字
this 代表当前对象的引用,仅可在实例方法/构造器中使用。主要用途:
- 区分同名实例变量与局部变量:
this.age = age; - 构造器链调用:
this(20);调用本类其他构造器,必须置于首行 - 调用本类其他方法:
this.greet();
this 综合示例
public class This_Example {
int num = 10; // 实例变量
This_Example() { System.out.println("无参构造器"); }
This_Example(int num) {
this(); // 调用无参构造器
this.num = num; // 区分实例变量和参数
}
public void print() {
int num = 20; // 局部变量
System.out.println("局部变量: " + num);
System.out.println("实例变量: " + this.num);
this.greet();
}
public void greet() { System.out.println("Hello"); }
public static void main(String[] args) {
This_Example obj1 = new This_Example();
obj1.print();
This_Example obj2 = new This_Example(30);
obj2.print();
}
}
可变参数
JDK 1.5 引入,语法:typeName... parameterName。一个方法只能有一个可变参数,且必须是最后一个参数。内部作为数组处理。
public static void printMax(double... numbers) {
if (numbers.length == 0) return;
double max = numbers[0];
for (double n : numbers) if (n > max) max = n;
System.out.println("最大值: " + max);
}
// 调用方式多样
printMax(1, 2, 3);
printMax(new double[]{4, 5, 6});
finalize() 方法
对象被垃圾回收前由 JVM 调用,用于资源清理(如关闭文件)。声明形式:
protected void finalize() throws Throwable {
// 清理代码
}
注意:finalize() 调用时机不确定,甚至可能不被调用(程序退出前未触发 GC)。不推荐依赖它管理关键资源,应使用 try-with-resources 或显式 close()。
java
- 精通 Java 运算符:类型、语法与实战示例
- Java 抽象类与抽象方法完全指南
- Java 注解类型完全指南:预定义、自定义与元注解
- Java String.charAt() 详解:语法、返回类型、异常与实战示例
- 精通 Java String.endsWith():检查字符串后缀(示例)
- Java 字符串替换大全:replace()、replaceAll() 与 replaceFirst() 详解
- Java String toLowerCase() 与 toUpperCase():区域感知的大小写转换
- Java 方法重写详解:规则、多态调用与 super 协作
- Java 9 集合工厂方法:一行代码创建不可变 List/Set/Map
- Java 9 接口私有方法:增强封装与代码复用
- 精通 Java 8 方法引用::: 语法与四大引用类型
- Java 8 默认方法:接口演进与向后兼容的关键机制