四、Java之数组
1.一、认识java以及环境变量2.二、1、java基础之关键字、标识符、注释、常量、变量及数据类型3.二、2、java基础之运算符与键盘录入(scanner)4.二、3、java基础之流程控制语句5.三、Java里的方法
6.四、Java之数组
7.五、Java面向对象概述8.五、Java面向对象:封装9.五、Java面向对象:继承10.五、Java面向对象:多态11.六、Java常用类:Object,Scanner12.六、Java常用类:String,StringBuffer13.六、Java常用类:Arrays,包装类,Random,System,Date,SimpleDateFormat14.七、Java集合15.八、Java集合其他知识16.九、IO流17.十、Java多线程和设计模式18.十一、网络编程19.十二、类加载器和反射20.Maven学习21.Git22.JDBC之Mysql一、JVM内存的划分
堆:存储的是局部变量和方法的调用
栈:存储的是new出来的对象
方法区:用于存储类的元数据信息
本地方法区:用于存储Java程序中调用本地方法(Native Method)的相关信息。本地方法通常用于访问底层系统资源或执行与平台相关的操作,例如操作系统API调用、硬件访问等。
寄存器:是位于CPU内部的一组特殊用途的高速存储器。它们用于存储和处理指令执行过程中的数据、地址和控制信息。
二、数组
数组:是一个存储多个元素的容器, 是一块连续的内存空间,每一个位置都有索引进行标识
特点: 同一个数组中,只能存储同一种数据类型的元素.
数组定义:数据类型[] 数组名;
数组的初始化:
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
语句定义格式: 数据类型[] 数组名 = new 数据类型[元素的个数];
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度
语句定义格式: 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
简化写法: 数据类型[] 数组名 = {元素1,元素2,...}
注意事项:
1、数组的动态初始化和静态初始化不能混合使用
2、虽然静态初始化后数组中存储就是我们自己给的数据了,但是要记住一点,在一开始的时候,系统依旧会赋予默认值
属性:length 作用:获取数组中的元素个数(数组长度),结果是一个整数
package com.shujia.day04; /* 数组遍历(依次输出数组中的每一个元素) */ public class ArrayTest1 { public static void main(String[] args) { //定义并初始话一个数组 int[] arr = {11, 22, 33, 44, 55, 66}; //在知道数据的范围的情况下,使用for循环 // for (int i = 0; i < 6; i++) { // System.out.println(arr[i]); // } //将来数组中的元素个数我们不一定能够数的清 //java中数组提供了一个属性给我们使用 length //格式: 数组名.length 获取的是数组的长度 for (int i = 0; i < arr.length; i++) { if(i==0){ System.out.print("["+arr[0]+","); }else if(i==arr.length-1){ System.out.println(arr[i]+"]"); }else { System.out.print(arr[i]+","); } } } }
常见错误:
数组索引越界异常:ArrayIndexOutOfBoundsException
空指针异常:NullPointerException
数组动态初始化内存图

数组动态初始化并赋值
两个数组指向同一个堆内存空间
三、一维数组
package com.shujia.day03.ketang; /* 数组:是一个存储多个元素的容器, 是一块连续的内存空间,每一个位置都有索引进行标识 特点: 同一个数组中,只能存储同一种数据类型的元素. 数组的定义: 语句定义格式: 数据类型[] 数组名; 数组光定义出来不能直接使用,需要对数组进行初始化 两种初始化的方式: 1. 动态初始化: 初始化时只指定数组长度,由系统为数组分配初始值。 2. 静态初始化: 初始化时指定每个数组元素的初始值,由系统决定数组长度。 动态初始化: 语句定义格式: 数据类型[] 数组名 = new 数据类型[元素的个数]; 举例:创建一个可以存储3个int类型的数组 int[] arr = new int[3]; 局部变量: 方法上或者方法内部定义的变量统称为局部变量,在栈中出现 */ public class ArrayDemo1 { public static void main(String[] args) { //定义一个存储int类型元素的数组 // int[] arr; // System.out.println(arr); /** * * 左边: * int: 表示该数组中的元素都是int类型 * []: 表示该数组是一个一维数组 * arr: 是数组的名字,符合标识符命名规则 * * 右边: * new: 在堆内存中开辟空间 * int: 表示该数组中的元素都是int类型 * []: 表示该数组是一个一维数组 * 3: 表示的是该数组可以存储3个元素 * */ // int[] arr = new int[3]; int[] arr = new int[3]; System.out.println(arr); //[I@4554617c //实际中,更需要获取数组中的元素值 //java中提供了获取元素的方式,数组中每一个元素都有一个位置下标索引,可以通过索引获取对应位置上的元素 //语句格式: 数组名[下标索引] 索引从左向右,从0开始 int a = arr[0]; System.out.println(a); int a2 = arr[1]; System.out.println(a2); int a3 = arr[2]; System.out.println(a3); } public static void sum(int a,int b){ } }
四、二维数组
二维数组:元素是一维数组的数组
二维数组的格式1;
语句定义格式1:数据类型[][] 数组名 = new 数据类型[m][n];
二维数组的格式2:
语句定义格式:数据类型[][] 数组名 = new 数据类型[m][];
二维数组格式3:
语句定义格式:
数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2,..},{},{},{},..};
简化写法:
数据类型[][] 数组名 ={{元素1,元素2,..},{},{},{},..};
package com.shujia.day04; /* 举例:创建一个可以存储3个一维数组的二维数组,并且每个一维数组中可以存储2个int类型的元素 int[][] arr = new int[3][2]; 以下都是正确写法: int[] arr[] = new int[3][2]; int arr[][] = new int[3][2]; int [] [] arr = new int[3][2]; */ public class Array2Demo1 { public static void main(String[] args) { int[][] arr = new int[3][2]; System.out.println(arr); System.out.println(arr[0]); //打印的是第一个一维数组的地址值 System.out.println(arr[1]); System.out.println(arr[2]); //打印第二个一维数组的第二个元素 System.out.println(arr[1][1]); // 0 } }
二维数组的遍历:
package com.shujia.day04; /* 二维数组遍历 */ public class Array2Test1 { public static void main(String[] args) { String[][] shujia = {{"小花", "小红", "小黑"}, {"花花", "乐乐"}, {"中义", "海兵", "龙俊", "鹏程"}}; //思路是遍历到每一个一维数组,然后再遍历每一个一维数组中的元素 for (int i = 0; i < shujia.length; i++) { //外层for循环表示遍历到每一个一维数组 for (int j = 0; j < shujia[i].length; j++) { //内层for循环表示遍历每个一维数组的每个元素 System.out.println(shujia[i][j]); } System.out.println("----------------------"); } } }
二维数组内存图
五、传参的问题
1、当基本数据类型作为方法的参数类型的时候,调用时传入的是具体的数值
2、当引用数据类型作为方法的参数类型的时候,调用时传入的是对应的地址值

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!