方法签名由方法名和参数类型列表(顺序与数量)组成,不包括返回类型、异常声明、访问修饰符或参数名;void表示无返回值,非void方法每条执行路径末尾必须有return表达式。

Java 方法的定义结构必须包含访问修饰符、返回类型、方法名、参数列表和方法体,缺一不可;没有返回值时必须写 void,连空格都不能少。
方法签名由哪几部分组成
方法签名 = 方法名 + 参数类型列表(顺序和数量),不包括返回类型、异常声明、访问修饰符或参数名。这意味着:
-
public int add(int a, int b)和private double add(int x, int y)是同一个签名,编译报错:重复定义 -
String get(String key)和String get(Object key)是不同签名,可以重载 - 泛型擦除后若签名相同(如
List和List),仍视为重复,编译不通过
返回类型和 return 语句怎么配对
返回类型决定方法体内 return 的行为,不是“有没有 return”,而是“有没有合法的终止路径”:
-
void方法可以没有return,也可以有return;(仅结束执行) - 非
void方法:每条执行路径末尾都必须有return 表达式;,否则编译报错missing return statement - 条件分支中如果只在
if块里return,但没处理else,也会报错
public String findName(boolean found) {
if (found) {
return "Alice";
}
// 缺少 else 分支或默认 return,编译失败
}
参数列表里的常见陷阱
参数声明看似简单,但几个细节极易出错:
立即学习“Java免费学习笔记(深入)”;
- 多个参数用逗号分隔,末尾不能加逗号:
void log(String msg, int level,)→ 编译错误 - 可变参数(
...)必须是参数列表最后一个,且只能有一个:void print(String... args, boolean flag)→ 不合法 - 基本类型传值,对象传引用副本——方法内重新赋值
obj = new Xxx()不影响调用方,但obj.field = ...会生效 - 参数名可与类字段同名,此时需用
this.name区分,否则发生遮蔽(shadowing)
最容易被忽略的是:方法定义中任何一部分写错位置或遗漏(比如把 static 放在返回类型后面),都会导致编译器报出看似无关的错误,比如 “illegal start of expression”——其实只是语法结构崩了。写完先盯一眼顺序:修饰符 → 返回类型 → 方法名 → (参数列表) → 方法体。









