news 2026/9/3 8:41:29

6. Java 方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
6. Java 方法

方法的定义

方法是一段封装特定功能的、可重复调用的代码块。

语法格式:

修饰符 返回值类型 方法名(参数类型 形参1, 参数类型 形参2, ...) { 方法体 return 返回值; }

各组成部分说明:

组成部分

说明

修饰符

控制访问权限和调用方式,如public static

返回值类型

方法返回结果的数据类型;无返回值用void

方法名

小驼峰命名,见名知意

参数列表

形式参数(形参),多个用逗号分隔;无参数则留空

方法体

实现功能的具体代码

return

结束方法执行并返回结果;void方法可省略或用return;提前退出

示例:

public static int getMax(int num1, int num2) { if (num1 > num2) { return num1; } else { return num2; } } int max = getMax(10, 20); // max = 20

方法定义后不会自动执行,必须通过方法名(实参)显式调用。


方法的分类

按是否有参数和是否有返回值,方法分为四类:

分类

声明示例

调用方式

无参无返回值

public static void printHello()

printHello();

无参有返回值

public static String getGreeting()

String s = getGreeting();

有参无返回值

public static void printInfo(String name)

printInfo("Tom");

有参有返回值

public static int add(int a, int b)

int sum = add(3, 5);


形参和实参

  • 形参:方法定义时括号中的变量,是占位符
  • 实参:调用方法时传入的具体值

要求:实参的类型、数量、顺序必须与形参一致,否则编译报错。

public static int add(int num1, int num2) { // num1、num2 是形参 return num1 + num2; } add(10, 20); // 10、20 是实参 add(a, 3); // 实参可以是变量 add(2 + 3, a * 2); // 实参可以是表达式

方法重载

规则

同一个类中,方法名相同、参数列表不同,构成方法重载。

判断条件

说明

方法名

必须相同

参数个数

不同即构成重载

参数类型

不同即构成重载

参数顺序

不同即构成重载(如(int, double)(double, int)

与返回值类型无关,与参数名无关。

以下写法不构成重载,会编译报错:

// 编译错误:仅返回值类型不同 public static int add(int a, int b) { return a + b; } public static double add(int a, int b) { return a + b; } // 编译错误:仅参数名不同 public static int add(int a, int b) { return a + b; } public static int add(int x, int y) { return x + y; }

原因:add(1, 2)调用时编译器无法根据返回值判断目标方法。

重载匹配顺序

编译器按以下优先级匹配重载方法:

  1. 精确类型匹配
  2. 自动类型提升(byteshortintlongfloatdouble
  3. 自动装箱/拆箱
  4. 可变参数(优先级最低)
public static void test(long a) { System.out.println("long"); } public static void test(double a) { System.out.println("double"); } test(10); // 输出 "long":int → long 比 int → double 更近

重载示例

public class OverloadDemo { public static int add(int a, int b) { return a + b; } public static double add(double a, double b) { // 参数类型不同 return a + b; } public static int add(int a, int b, int c) { // 参数个数不同 return a + b + c; } public static double add(int a, double b) { // 参数顺序不同 return a + b; } }

值传递

Java 只有一种参数传递方式:值传递。实参将自身的值复制一份传给形参,方法内对形参的修改不影响实参。

"值"的含义取决于实参类型:

实参类型

传递的值

方法内修改的影响

基本类型

数据值本身

不影响实参

引用类型

堆内存地址的副本

修改地址本身不影响实参;修改地址指向的对象内容会影响原对象

基本类型

public static void change(int x) { x = 100; // 修改的是副本 } int a = 10; change(a); System.out.println(a); // 10,不受影响

引用类型:修改对象内容

public static void changeContent(int[] arr) { arr[0] = 100; // arr 与实参指向同一对象 } int[] a = {1, 2}; changeContent(a); System.out.println(a[0]); // 100,原数组内容被修改

引用类型:修改引用本身

public static void changeRef(int[] arr) { arr = new int[]{3, 4}; // arr 指向新对象,不影响实参 } int[] a = {1, 2}; changeRef(a); System.out.println(a[0]); // 1,原数组未受影响

方法调用内存模型

JVM 内存分区

内存区域

作用

栈(Stack)

每个线程独享,存储方法调用栈帧(局部变量、形参、返回地址)。方法调用入栈,执行完毕出栈

堆(Heap)

所有线程共享,存储对象实例和数组。栈中的引用变量存储的是堆地址

方法调用流程

public static int add(int x, int y) { int result = x + y; return result; } public static void main(String[] args) { int a = 10; int b = 20; int sum = add(a, b); }

执行步骤:

  1. main入栈:栈帧中存储a=10b=20
  2. 调用add(a, b)a=10b=20的值复制给形参xyadd栈帧入栈,计算result=30
  3. add出栈:return 30将结果传给mainsumadd栈帧弹出
  4. main出栈:程序结束

递归

方法调用自身的写法,须满足两个条件:

  1. 有递归出口(终止条件)
  2. 每次递归调用,问题规模缩小
public static int factorial(int n) { if (n == 1) return 1; // 递归出口 return n * factorial(n - 1); // 问题规模缩小 }

递归层级过深会导致栈帧无限堆积,抛出StackOverflowError


基本类型与引用类型

对比维度

基本类型(8种)

引用类型

存储内容

数据值本身

堆中对象的地址

内存位置

栈(方法栈帧)

引用在栈,对象在堆

默认值

对应类型的零值(int为 0,booleanfalse

null

赋值/传参

复制值,互不影响

复制地址,修改内容相互影响

是否可为null

Java 的 8 种基本类型:

分类

类型

占用

取值范围

整数

byte

1B

-128 ~ 127

short

2B

-32768 ~ 32767

int

4B

-2³¹ ~ 2³¹-1

long

8B

-2⁶³ ~ 2⁶³-1

浮点

float

4B

精度 6~7 位

double

8B

精度 15~16 位

字符

char

2B

0 ~ 65535

布尔

boolean

JVM 实现相关

true/false


注意事项

  1. 方法不能嵌套定义:Java 不允许在一个方法体内定义另一个方法
  2. return执行后方法立即结束,其后代码不会执行(编译可通过但不可达)
  3. 声明了非void返回值类型的方法,所有执行路径都必须有return语句
  4. 调用方法时,实参的类型、数量、顺序必须与形参一致
  5. 引用类型变量值为null时调用方法或访问属性会抛出NullPointerException

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 8:40:49

AI - 阿里云百炼

阿里云百炼是阿里云 2023 年 10 月上线的一站式 MaaS 大模型开发 & 应用全链路平台,集合模型调用、微调、RAG 知识库、Agent 智能体、低代码应用搭建、API 服务,个人 / 企业开发者通用。 官网地址:大模型服务平台百炼控制台 一、核心定…

作者头像 李华
网站建设 2026/9/3 8:37:57

独角发卡系统二次开发实战:基于Hyper模板的魔改与全栈部署指南

简介:这是一份面向PHP开发者与数字商品站长的独角发卡2.0.6深度魔改版,专为hyper模板定制适配,解决原版在移动端卡密展示、高并发售卖(如超800条卡密失效)、支付灵活性及用户运营功能上的明显短板。资源包共1229个文件…

作者头像 李华
网站建设 2026/9/3 8:37:16

基于STM32的智能绿色风扇系统开发:从传感器选型到PWM调速

最近很多电子信息、自动化专业的大四同学在做毕业设计时,都会选“基于STM32的智能XX系统”这类题目,原因很直接:STM32资料丰富、外设齐全,用来做嵌入式课程设计和毕业设计既容易出实物,也方便展示功能。不过题目看起来…

作者头像 李华
网站建设 2026/9/3 8:32:57

Python+Open3D+PyQt点云桌面应用开发:从算法到GUI的完整实践

简介:本资源是一套面向Python三维可视化开发者的实战型点云处理方案,聚焦PyQt5 GUI框架与Open3D库的深度集成,解决点云数据在桌面应用中嵌入式交互显示的核心难题,适用于计算机视觉、自动驾驶点云分析、三维重建等领域的初/中级开…

作者头像 李华
网站建设 2026/9/3 8:31:02

基于52单片机的BMS仿真系统:从电压采样到均衡控制的完整实现

简介:本资源是一套面向嵌入式初学者与课程设计者的基于52单片机的电池管理系统(BMS)仿真教学方案,聚焦锂电池电压监测、温度采集与状态显示等核心功能实现,适用于电子类专业单片机原理与应用、嵌入式系统实训等实践环节…

作者头像 李华
网站建设 2026/9/3 8:30:52

FPGA车牌识别工程化实践:从算法适配到实车验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华