Java方法定义必须明确返回类型、方法名、参数列表和方法体;调用时需确保实例或类名可用且参数严格匹配;仅支持值传递,重载仅依据参数列表。

Java里定义方法必须明确返回类型、方法名、参数列表和方法体;调用时需确保对象实例(非static)或类名(static)可用,且参数类型、数量严格匹配。
方法声明必须包含返回类型和参数括号
Java不允许省略返回类型(void 也不能省),哪怕不返回值也得写 void。参数列表哪怕为空,括号 () 也不能省略。
-
public void sayHello()✅ 合法 -
public sayHello()❌ 编译报错:missing return type -
public void sayHello❌ 编译报错:missing method body or declare abstract
访问修饰符(public/private/protected)、static、final 等修饰符顺序也有要求,必须放在返回类型前。
调用实例方法前必须有有效对象引用
非 static 方法属于对象,没有实例就调用会触发 NullPointerException 或编译错误(若在静态上下文中直接用未初始化的引用)。
立即学习“Java免费学习笔记(深入)”;
-
MyClass obj = new MyClass(); obj.doWork();✅ -
MyClass obj = null; obj.doWork();❌ 运行时报NullPointerException -
doWork();(在main中直接写)❌ 编译报错:non-static method cannot be referenced from a static context
如果方法是 static,则可用类名调用:MyClass.doWork(),但此时不能访问 this 或非静态成员。
参数传递是值传递,但引用类型的“值”是地址
Java只有值传递。对基本类型(int、boolean等),传的是副本,修改不影响原变量;对引用类型(String、ArrayList、自定义对象),传的是引用的副本——即两个变量指向同一堆内存。
public static void modifyList(ArrayListlist) { list.add("new"); // ✅ 原list可见此修改 list = new ArrayList<>(); // ❌ 不影响调用方的list引用 }
常见误区:以为“对象传的是引用”,实际传的是引用的值(地址),所以重赋值 list = ... 不会改变外部变量所存的地址。
重载方法靠参数列表区分,与返回类型无关
方法重载(overload)只看方法名 + 参数个数/类型/顺序。返回类型不同但参数完全一致,编译直接失败。
-
void print(String s)和void print(int i)✅ 重载 -
String getValue()和int getValue()❌ 编译报错:method getValue() is already defined -
void log(List和msgs) void log(ArrayList✅ 重载(参数类型不同)msgs)
注意泛型擦除后可能产生冲突,比如 List 和 List 擦除后都是 List,无法构成重载。
最容易被忽略的是:方法签名不包括异常声明和修饰符,但 static 与否会影响调用方式;而 final、synchronized 这类修饰符既不参与重载判定,也不影响调用语法,只约束行为语义。









