Java方法定义必须包含返回类型、方法名、参数列表(含空括号)和方法体,调用时需按static或实例方式正确引用,参数为值传递,重载仅依据参数列表区分。

Java里定义方法必须明确返回类型、方法名、参数列表和方法体,调用时需确保对象实例存在(非static方法)或类名可访问(static方法),否则编译直接报错。
方法定义的四个必要组成部分
一个合法的Java方法声明必须包含:返回类型、方法名、圆括号()(含参数声明)、花括号{}包裹的方法体。缺一不可,哪怕返回类型是void也不能省略。
-
public static void main(String[] args)是最典型的完整写法,其中public是访问修饰符,static决定是否依赖实例 - 参数列表为空时仍要保留
(),写成myMethod(),不能写成myMethod - 如果方法有返回值,方法体内必须有
return语句,且返回值类型必须与声明的返回类型一致(或可自动转型) - 方法名遵循驼峰命名,不能是Java关键字,如
class、if等
调用实例方法前必须有有效对象引用
非static方法属于对象,调用前得先创建实例,否则会触发NullPointerException或编译错误(若在静态上下文中直接用未初始化的引用)。
- 正确:
MyClass obj = new MyClass(); obj.doSomething(); - 错误:
MyClass.doSomething();(除非该方法是static) - 错误:
MyClass obj = null; obj.doSomething();→ 运行时报NullPointerException - 静态方法可以直接用类名调用:
Math.abs(-5),但别误以为所有工具方法都这样设计——很多自定义类把逻辑放在实例方法里
参数传递是值传递,但引用类型的“值”是地址
Java只有值传递。对基本类型(如int、boolean),传的是副本;对引用类型(如String、ArrayList),传的是对象引用的副本——这意味着你能通过它修改对象状态,但无法让原引用指向新对象。
立即学习“Java免费学习笔记(深入)”;
-
void changeValue(int x) { x = 10; }→ 调用后原变量不变 -
void changeList(List→ 原list) { list.add("new"); } list内容被修改 -
void reassignList(List→ 原list) { list = new ArrayList(); } list引用不受影响 - 字符串
String虽是引用类型,但不可变,所以str.concat(...)不会改变原引用指向的内容
重载方法靠参数列表区分,跟返回类型无关
方法重载(overload)只看方法名 + 参数个数/类型/顺序,返回类型不同但参数完全一样,编译不通过。
- 允许:
print(String s)和print(int i) - 允许:
process(List和list) process(String[] arr) - 不允许:
getCount()返回int和getCount()返回long—— 编译报错method getCount() is already defined - 注意:自动拆箱(如
int↔Integer)可能引发意外重载匹配,尤其在有Object参数的方法存在时
最容易被忽略的是访问修饰符和static属性对调用方式的硬性约束,还有重载时对泛型擦除后签名冲突的误判——比如doWork(List和doWork(List在字节码层面其实是同一个签名,无法共存。










