在Java中方法如何定义与调用_Java方法语法基础说明

Java方法必须定义在类内,由访问修饰符、返回类型、方法名、参数列表和方法体组成;静态方法用类名调用,实例方法需对象调用;参数均为值传递,引用类型传地址值;重载看参数列表,重写须签名一致且权限不更严格。

Java 中的方法必须定义在类内部,不能独立存在;调用时需注意访问权限、静态/实例上下文以及参数类型匹配。

方法定义的必要组成部分

一个完整的方法声明至少包含:访问修饰符、返回类型、方法名、括号 () 和方法体 {}。返回类型不能省略,即使是 void 也必须显式写出。

  • publicprivateprotected 或默认(包级)修饰符不可少,影响外部能否调用
  • 返回类型必须与方法体内 return 的值类型一致;void 方法不能有非空 return 表达式
  • 方法名遵循驼峰命名,不能和类名或已有变量同名(编译会报错)
  • 参数列表写在 () 内,多个参数用逗号分隔,每个参数需声明类型和名称,如 String name, int age

静态方法 vs 实例方法的调用方式差异

是否加 static 直接决定调用时要不要先创建对象。静态方法属于类,实例方法属于对象。

  • 静态方法用 类名.方法名() 调用,例如 Math.abs(-5);不能直接访问 this 或非静态成员
  • 实例方法必须通过对象调用,例如 new ArrayList().add("x");若在静态上下文中(如 main 方法)调用,必须先 new 出实例
  • 从静态方法里调用实例方法,必须显式提供对象引用,否则编译报错:non-static method xxx() cannot be referenced from a static context

参数传递:基本类型是值传递,引用类型传的是引用值

Java 里没有真正的“引用传递”,所有参数都是值传递——只是引用类型的“值”本身是一个内存地址。

  • 修改基本类型参数(如 intboolean)不会影响外部变量
  • 修改引用类型参数所指向对象的属性(如 list.add()obj.name = "a")会影响原对象
  • 但把引用参数重新赋值为新对象(如 list = new ArrayList())不会改变外部变量指向
public class Example {
    public static void modifyList(List list) {
        list.add("added");     // ✅ 外部 list 会被修改
        list = new ArrayList<>(); // ❌ 外部 list 引用不变
    }
    
    public static void main(String[] args) {
        List names = new ArrayList<>();
        names.add("Alice");
        modifyList(names);
        System.out.println(names); // 输出 [Alice, added]
    }
}

最容易被忽略的是:方法重载只看参数列表(类型、个数、顺序),和返回类型无关;而重写必须保证签名一致且子类访问权限不能更严格。这两点一旦搞混,编译或运行时行为会和预期严重不符。