1、数组:存储同一数据类型的元素的容器A:数据类型[] 数组名;(推荐的使用方式)
B:数据类型 数组名[];
int[] arr; 定义了一个int类型的数组,数组名是arr
int arr[]; 定义了一个int类型的变量,变量名是arr数组
数组初始化:
* A:所谓的初始化,其实就是为数组开辟内存空间,并为数组中的每个元素赋予初始值。
* B:如何进行初始化呢?我们有两种方式对数组进行初始化
* a:动态初始化 只给出长度,由系统给出初始化值---int[] arr = new int[3]
* b:静态初始化 给出初始化值,由系统决定长度---int[] arr = {1,2,3};
* 动态初始化:
* 数据类型[] 数组名 = new 数据类型[数组长度];
默认初始化值:
* 整数 : 0
* 小数 : 0.0
* 字符 : \u0000 特殊的空白字符
* 布尔 : false
* 引用数据类型 : null
int[] arr = new int[10];
/* [I@5d290ef4
*
* @ : 分隔符
* [ : 当前是一个数组类型, 几个空括号代表的是几维数组
* I : 当前数组中存储的数据类型(int)
* 5d290ef4 : 十六进制[地址值]
*/
System.out.println(arr); // [I@5d290ef4
// [I@5d290ef4,连续打印的话,每次都不一样,因为每次开创的内存空间地址不一定一样
/*
* int : 数组中存储的元素, 数据类型
* [] : 当前的变量是一个数组变量.
* arr : 数组名, 合法的标识符即可
* new : 在内存中开辟一块空间
* [10] : 开辟的空间, 里面有10个小格子, 可以存储10个数据.
*/
2、每当new,就会在内存中开辟一个空间
3、除了基本数据类型,其他的打印引用,打印出来的都是内存地址值,_
栈内存 : 方法运行时进入的内存, 局部变量进入方法中,使用完毕直接回收
堆内存 : new出来的数据都会进堆内存, 堆内存中的数据都会有[地址值],垃圾回收机制空闲时回收
方法区 : .class文件加载时进入的内存(反射)
--------------------
寄存器 : 交给CPU去使用
本地方法区 : 调用操作系统本地资源(API)的一些功能,或者自己写的方法
4、程序运行时,先将一个类的字节码文**(.class)**件加载进方法区,然后JVM会自动调用main方法,main方法就会进入到桟内存中,new出来的进入堆内存中,_
5、什么是引用数据类型? 在堆内存中产生了地址值的数据,该地址值被变量所引用了,String是引用数据类型的!! 引用数据类型默认初始化值是null
String s = "abc";
String s = new String("abc");//这两个是等价的,辅助String的特殊
6、Arrays.sort
package com.heima.array3;
import java.util.Arrays;
public class Demo3_Array {
public static void main(String[] args) {
int[] arr = { 22, 11, 55, 44, 33 };
//排序了
Arrays.sort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
7、二维数组
//动态初始化
package com.heima.array3;
public class Demo4_ArrayArray {
public static void main(String[] args) {
// 当前是一个二维数组, 数组名叫arr, 可以存储2个一维数组, 每一个一维数组可以存储3个int数据
int[][] arr = new int[2][3];
// 二维数组操作元素的方式:
// 数组名[索引] -> 一维数组整个容器
// 数组名[索引][索引] -> 获取一位数组中, 索引对应的元素
arr[0][0] = 11;
arr[0][1] = 22;
arr[0][2] = 33;
arr[1][0] = 111;
arr[1][1] = 222;
arr[1][2] = 333;
System.out.println(arr[1][1]); //22
}
}
//静态初始化
package com.heima.array3;
public class Demo5_ArrayArray {
public static void main(String[] args) {
int[][] arr = {{11,22,33},{44,55,66}};
// 二维数组的遍历
// 外循环, 获取到的是每一个一维数组
for (int i = 0; i < arr.length; i++) {
// arr[i] : 代表的就是每一个一维数组
// 内循环, 获取到的是每一个一维数组对应的元素
for(int j = 0; j < arr[i].length; j++){
System.out.println(arr[i][j]);
}
}
}
}