当前位置: 首页 > news >正文

Java 方法详解

一、方法的基本定义与调用

1. 方法的基本语法

修饰符 返回值类型 方法名(参数列表) {// 方法体return 返回值; // 如果返回值类型为void,则不需要return语句
}

示例
public class Calculator {// 加法方法public int add(int a, int b) {return a + b;}// 无返回值方法public void printResult(int result) {System.out.println("计算结果: " + result);}
}// 方法调用
Calculator calc = new Calculator();
int sum = calc.add(3, 5); // 调用add方法
calc.printResult(sum);    // 调用printResult方法
 

2. 参数传递机制

Java 采用值传递(Pass by Value)机制:

  • 基本数据类型:传递的是值的副本
  • 引用数据类型:传递的是对象引用的副本
public class ParameterDemo {public static void main(String[] args) {int num = 10;modifyPrimitive(num);System.out.println(num); // 输出: 10(值未改变)int[] arr = {1, 2, 3};modifyArray(arr);System.out.println(arr[0]); // 输出: 100(数组内容被修改)}public static void modifyPrimitive(int value) {value = 20;}public static void modifyArray(int[] array) {array[0] = 100;}
}
 

二、方法的重载(Overloading)

1. 重载的定义与规则

方法重载是指在同一个类中定义多个同名方法,但参数列表不同(参数类型、个数或顺序)。
 
public class OverloadDemo {// 计算两个整数的和public int add(int a, int b) {return a + b;}// 计算三个整数的和public int add(int a, int b, int c) {return a + b + c;}// 计算两个小数的和public double add(double a, double b) {return a + b;}
}
 

重载规则

  • 方法名必须相同
  • 参数列表必须不同
  • 返回值类型可以相同也可以不同
  • 访问修饰符可以相同也可以不同

2. 重载的调用规则

Java 编译器根据调用时提供的实参类型和数量,选择最匹配的方法:

OverloadDemo demo = new OverloadDemo();
int result1 = demo.add(1, 2);       // 调用add(int, int)
int result2 = demo.add(1, 2, 3);    // 调用add(int, int, int)
double result3 = demo.add(1.5, 2.5); // 调用add(double, double)
 

三、方法的重写(Override)与多态

1. 重写的定义与规则

方法重写发生在子类中,用于修改父类中定义的方法实现。

class Animal {public void makeSound() {System.out.println("动物发出声音");}
}class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("汪汪汪");}
}class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("喵喵喵");}
}
 

重写规则

  • 方法名、参数列表和返回值类型必须与父类相同
  • 访问修饰符不能比父类更严格(如父类是protected,子类不能是private
  • 不能抛出比父类更多的异常

2. 多态的实现

通过方法重写和向上转型,实现运行时多态:

Animal dog = new Dog();
Animal cat = new Cat();dog.makeSound(); // 输出: 汪汪汪
cat.makeSound(); // 输出: 喵喵喵
 

四、可变参数(Varargs)

1. 可变参数的语法

Java 5 引入可变参数,允许方法接收任意数量的同一类型参数:

public class VarargsDemo {// 计算任意数量整数的和public int sum(int... numbers) {int total = 0;for (int num : numbers) {total += num;}return total;}
}// 调用示例
VarargsDemo demo = new VarargsDemo();
int result1 = demo.sum(1, 2);       // 传递2个参数
int result2 = demo.sum(1, 2, 3, 4); // 传递4个参数
int result3 = demo.sum();           // 不传递参数
 

2. 可变参数的注意事项

  • 可变参数本质上是一个数组
  • 一个方法只能有一个可变参数,且必须是最后一个参数
  • 可变参数可以不传递任何值

// 合法:可变参数在最后
public void printInfo(String name, int... scores) {// 方法体
}// 非法:可变参数不在最后
// public void printInfo(int... scores, String name) { }
 

五、方法的递归调用

1. 递归的基本概念

递归是指方法直接或间接调用自身的过程,通常包含递归终止条件递归步骤
public class RecursionDemo {// 计算阶乘public int factorial(int n) {// 终止条件if (n == 0 || n == 1) {return 1;}// 递归步骤return n * factorial(n - 1);}
}// 调用示例
RecursionDemo demo = new RecursionDemo();
int result = demo.factorial(5); // 计算5的阶乘,结果为120
 

2. 递归的优缺点

  • 优点:代码简洁,逻辑清晰,适合解决分治类问题
  • 缺点:可能导致栈溢出(StackOverflowError),性能开销较大

六、方法引用(Method Reference)

1. 方法引用的语法

Java 8 引入方法引用,提供了更简洁的方式来引用已存在的方法:
 
// 方法引用语法
类名::静态方法
对象::实例方法
类名::实例方法
 

2. 方法引用的应用场景

(1)静态方法引用

// 使用Lambda表达式
Function<Integer, String> func1 = num -> String.valueOf(num);// 使用方法引用
Function<Integer, String> func2 = String::valueOf;
 

(2)实例方法引用

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");// 使用Lambda表达式
names.forEach(name -> System.out.println(name));// 使用方法引用
names.forEach(System.out::println);
 

(3)构造方法引用

// 使用Lambda表达式
Supplier<List<String>> supplier1 = () -> new ArrayList<>();// 使用方法引用
Supplier<List<String>> supplier2 = ArrayList::new;
 

七、方法的访问控制

1. 访问修饰符的作用范围

Java 提供四种访问修饰符,控制方法的可见性:

修饰符同一类同一包不同包子类不同包非子类
private ✔️
默认 ✔️ ✔️
protected ✔️ ✔️ ✔️
public ✔️ ✔️ ✔️ ✔️

2. 访问修饰符的使用原则

  • private:用于封装内部实现,不希望外部访问的方法
  • 默认:用于同一包内的组件间协作
  • protected:用于需要被子类重写的方法
  • public:用于对外提供服务的 API 方法
http://www.jsqmd.com/news/438090/

相关文章:

  • 网站安装过程中出现红色叉号怎么办?
  • AI广告投放方案,通过豆包做推广的路径 - 品牌2026
  • 2026年3月自动送料机厂家权威推荐,技术实力与市场口碑深度解析 - 品牌鉴赏师
  • 网站安装过程中一直提示数据库连接失败怎么办?
  • DedeCMS模板目录:织梦cms网站模板在哪里修改
  • 2026年质量好的准分子UV系统公司推荐:氮气保护UV系统优质供应商推荐 - 品牌宣传支持者
  • 2026年质量好的工程灯品牌推荐:酒店工程灯/会所工程灯厂家热销推荐 - 品牌宣传支持者
  • ThreadLocalMap 和 HashMap 的区别?
  • P5221 Product 另解
  • AI能做企业广告吗?如何做?有可行的AI广告方案吗? - 品牌2026
  • OpenAI:GPT-5.3 Instant上线,幻觉率大降27%,GPT-5.4更惊喜
  • Flutter-OH 原生代码断点调试指导
  • 2026年口碑好的滚丝机品牌推荐:二轴滚丝机/数控滚丝机/精密滚丝机厂家实力与用户口碑参考 - 品牌宣传支持者
  • GPT-5.3 Instant深度解析:幻觉率大降27%,开发者如何快速接入并布局GPT-5.4?
  • DedeCms上传的图片带水印,在哪里关闭?
  • DedeCms安装成功后点击登录网站后台报404错误怎么办?
  • 2026年比较好的高速SMT整线方案公司推荐:智能SMT整线方案实力工厂推荐 - 品牌宣传支持者
  • 2026年比较好的法兰科注塑机厂家推荐:发拉科注塑机/发那科注塑机/发兰科注塑机厂家推荐哪家好 - 品牌宣传支持者
  • 机器学习:Python+Flask 超市营收数据分析大屏 电商数据分析可视化架构(Echarts实时可视化+订单管理 源码)✅
  • 2026哪个平台有特价机票?实用购票平台测评 - 品牌排行榜
  • 2026年靠谱的透镜电动注塑机厂家推荐:高速电动注塑机/医疗电动注塑机热门品牌厂家推荐 - 品牌宣传支持者
  • 毕设程序java“美丽太原”宣传网站 基于Java的“锦绣太原“文旅推广平台 SpringBoot框架下的“晋阳印象“城市形象展示系统
  • 无处不在的空,唯一处的自感
  • 2026年比较好的岳麓区底盘维修厂家推荐:BBA汽车底盘维修/长沙豪车专修底盘维修厂家口碑推荐汇总 - 品牌宣传支持者
  • 2026年口碑好的低温空气源热泵机组品牌推荐:山东低温空气源热泵机组销售厂家哪家好 - 品牌宣传支持者
  • Slickflow.NET 基于 AI 大模型实现智能客服多轮问答系统
  • 2026年靠谱的北京便携式自组网品牌推荐:北京工业级自组网/北京应急自组网设备厂家最新推荐 - 品牌宣传支持者
  • alert 如何屏蔽
  • Visual Studio 2026中GitHub Copilot Edits
  • MCP协议之Client 的工作机制和流程