Java基础 - 数组,内存,数组遍历、取最值等操作

本文详细介绍了数组的概念、初始化方式及常见操作,如遍历、获取最值等,并讨论了数组操作中常见的越界和空指针问题。此外,还介绍了二维数组的不同格式及其内存分配原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载请注明出处:https://blog.youkuaiyun.com/mythmayor/article/details/72732024

1.数组概念

* 数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
* 数组既可以存储基本数据类型,也可以存储引用数据类型。

数组定义格式
数据类型[] 数组名 = new 数据类型[数组的长度];

2.数组的初始化

(1)数组的初始化
* 就是为数组开辟连续的内存空间,并为每个数组元素赋予值
如何对数组进行初始化
* a:动态初始化 只指定长度,由系统给出初始化值
* int[] arr = new int[5];
* b:静态初始化 给出初始化值,由系统决定长度
(2)动态初始化
* 数据类型[] 数组名 = new 数据类型[数组长度];
(3)静态初始化
* 格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
* 简化格式:
* 数据类型[] 数组名 = {元素1,元素2,…};

3.内存分配以及堆与栈的区别

  • A:栈(掌握)
    • 存储局部变量
  • B:堆(掌握)
    • 存储new出来的数组或对象
  • C:方法区
    • 面向对象部分讲解
  • D:本地方法区
    • 和系统相关
  • E:寄存器
    • 给CPU使用

4.数组操作的两个常见小问题:越界和空指针

        * a:ArrayIndexOutOfBoundsException:数组索引越界异常
	* 原因:你访问了不存在的索引。
 * b:NullPointerException:空指针异常
	* 原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。
	* int[] arr = {1,2,3};
	* arr = null;
	* System.out.println(arr[0]);

5.数组的操作

(1)遍历:
public static void print(int[] arr) {
for (int i = 0;i < arr.length ;i++ ) {
System.out.print(arr[i] + " ");
}
}
(2)获取最值:
public static int getMax(int[] arr) {
int max = arr[0];
for (int i = 1;i < arr.length ;i++ ) {
if (max < arr[i]) {
max = arr[i];
}
}
return max;
}

(3)数组元素反转:
public static void reverseArray(int[] arr) {
for (int i = 0;i < arr.length / 2 ; i++) {
int temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = temp;
}
}

(4)数组查表法(根据键盘录入索引,查找对应星期):
public static char getWeek(int week) {
char[] arr = {’ ',‘一’,‘二’,‘三’,‘四’,‘五’,‘六’,‘日’}; //定义了一张星期表
return arr[week]; //通过索引获取表中的元素
}

(5)数组元素查找:
public static int getIndex(int[] arr,int value) {
for (int i = 0;i < arr.length ;i++ ) {
if (arr[i] == value) {
return i;
}
}
return -1;
}

6.二维数组

    格式1            int[][] arr = new int[3][2]; 
    格式2            int[][] arr = new int[3][];
    格式3            int[][] arr = {{1,2,3},{4,5},{6,7,8,9}}; 
    以下格式也可以表示二维数组
                * 1:数据类型 数组名[][] = new 数据类型[m][n];
	* 2:数据类型[] 数组名[] = new 数据类型[m][n];

7.参数传递问题:

(1)基本数据类型的值传递,不改变原值,因为调用后就会弹栈,局部变量随之消失
(2)引用数据类型的值传递,改变原值,因为即使方法弹栈,但是堆内存数组对象还在,可以通过地址继续访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值