当前位置:首页 > 技术 > 正文内容

Java核心概念:数组与方法详解

访客 技术 2026年6月25日 1

四、数组深入理解

数组基础概念

数组是编程语言中最基础的数据结构之一,用于存储多个相同类型元素的连续内存空间。在Java语言中,数组本质上是一个对象,继承自java.lang.Object类,并实现了CloneableSerializable两个标记接口。

数组的基本操作包括声明、初始化和元素访问:

// 声明整型数组
int[] numbers;

// 分配内存空间,创建包含5个元素的数组
numbers = new int[5];

// 为特定位置赋值
numbers[0] = 10;

// 获取数组长度
int size = numbers.length;

二维数组的实现

Java支持创建嵌套数组,即数组中的每个元素本身也是数组。这种结构常用于表示表格、矩阵或棋盘等二维数据。

// 创建3行5列的二维整型数组
int[][] matrix = new int[3][5];

// 直接初始化二维数组
int[][] data = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

// 访问特定位置元素
matrix[1][2] = 100;

数组相关算法

数组是大多数算法实现的基础载体,下面介绍几种经典的排序算法:

选择排序(Selection Sort):在待排序序列中寻找最小元素,放到起始位置,然后从剩余元素中继续寻找最小元素。

插入排序(Insertion Sort):将数据分为已排序和未排序两部分,依次将未排序元素插入到已排序序列的正确位置。

快速排序(Quick Sort):选择一个基准元素,将数组划分为小于基准和大于基准的两部分,递归排序子数组。

归并排序(Merge Sort):采用分治策略,将数组递归拆分至单个元素,再逐步合并成有序序列。

堆排序(Heap Sort):利用完全二叉堆的结构特性,将数组构建成最大堆,依次交换堆顶与末尾元素并调整堆。

冒泡排序改进版:添加交换标志位,当某轮遍历未发生任何元素交换时,说明数组已完全有序,可提前终止循环。

以下是完全可用的冒泡排序实现:

public static void bubbleSort(int[] arr) {
    int n = arr.length;
    boolean swapped;
    
    for (int i = 0; i < n - 1; i++) {
        swapped = false;
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                swapped = true;
            }
        }
        if (!swapped) {
            break;
        }
    }
}

高维数组

除了二维数组,Java还支持三维及以上维度数组,实际应用中较少使用超过三维的数组。

// 声明三维数组
int[][][]立方体 = new int[2][3][4];

// 初始化并赋值
立方体[0][1][2] = 50;

五、方法的定义与使用

方法的核心作用

方法是组织代码的基本单元,它将完成特定功能的逻辑封装为一个独立单元。方法的主要价值体现在代码复用、模块化和信息隐藏三个方面。

  • 代码复用:相同逻辑只需编写一次,可在多处调用
  • 模块化:将复杂问题分解为多个独立模块
  • 信息隐藏:调用者无需了解内部实现细节

方法的基本结构

方法的完整定义包含返回类型、方法名称、参数列表和方法体四个部分:

public 返回类型 方法名称(参数类型 参数名, 参数类型 参数名) {
    // 方法体:具体实现逻辑
    return 返回值;
}

返回类型:指定方法执行完毕后返回的数据类型,无返回值时使用void关键字。

方法命名规范:遵循驼峰命名规则,首字母小写,后续单词首字母大写。

参数列表:圆括号内列出所有输入参数,多个参数间用逗号分隔。

实际参数与形式参数

  • 实际参数(实参):调用方法时传递的具体数值或变量
  • 形式参数(形参):方法定义中声明的用于接收数据的变量

Java中采用值传递机制:基本类型传递数值副本,引用类型传递地址副本。方法内部对形参的修改不会影响原始实参。

JVM内存区域划分

Java虚拟机运行时内存分为五个主要区域:

  1. 方法区:存储类元数据、运行时常量池、静态变量
  2. 堆内存:存放所有new创建的对象和数组
  3. 虚拟机栈:保存方法调用时的局部变量、操作数栈、动态链接
  4. 程序计数器:记录当前线程执行的字节码行号
  5. 本地方法栈:为native方法提供运行环境

方法执行时,其局部变量和参数保存在栈帧中,new创建的对象实例保存在堆内存中。

方法重载机制

方法重载允许在同一个类中定义多个同名方法,通过不同的参数列表来区分。参数列表的差异体现在三个方面:参数个数不同、参数类型不同、参数顺序不同。

返回值类型不参与重载判断,因为单纯从调用角度无法确定调用的是哪个重载方法。

public class MathUtils {
    
    public void showValue(int num) {
        System.out.println("整数参数: " + num);
    }
    
    public void showValue(int num1, int num2) {
        System.out.println("两个整数: " + num1 + ", " + num2);
    }
    
    public void showValue(double num) {
        System.out.println("浮点数参数: " + num);
    }
    
    public void showValue(String text) {
        System.out.println("字符串内容: " + text);
    }
}

上述示例展示了如何通过不同的参数类型和个数来实现方法重载,编译器会根据调用时传递的参数自动匹配对应的方法版本。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。