1.1 JVM内存划分
Java 程序在运行时,需要在内存中的分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
- 栈
存储局部变量
- 堆
存储new出来的东西
方法区 (面向对象进阶讲)
本地方法区 (和系统相关)
寄存器 (给CPU使用)
1.1.2 一个数组的内存图
定义一个数组,输出数组名及元素。然后给数组中的元素赋值,再次输出数组名及元素。
1.1.2.1 案例代码
package com.itheima_02;
/*
* 定义一个数组,输出数组名及元素。然后给数组中的元素赋值,再次输出数组名及元素。
*/
public class ArrayTest {
public static void main(String[] args) {
//定义一个数组
int[] arr = new int[3];
//输出数组名及元素
System.out.println("arr:"+arr);
System.out.println("arr[0]:"+arr[0]);
System.out.println("arr[1]:"+arr[1]);
System.out.println("arr[2]:"+arr[2]);
System.out.println("--------------");
//然后给数组中的元素赋值
arr[0] = 100;
arr[2] = 200;
//再次输出数组名及元素
System.out.println("arr:"+arr);
System.out.println("arr[0]:"+arr[0]);
System.out.println("arr[1]:"+arr[1]);
System.out.println("arr[2]:"+arr[2]);
}
}
1.1.2.2 代码内存图解
1.1.3二个数组的内存图
定义两个数组,分别输出数组名及元素。然后分别给数组中的元素赋值,分别再次输出数组名及元素。
1.1.3.1案例代码
package com.itheima_02;
/*
* 定义两个数组,分别输出数组名及元素。然后分别给数组中的元素赋值,分别再次输出数组名及元素。
*/
public class ArrayTest2 {
public static void main(String[] args) {
//定义两个数组
int[] arr = new int[2];
int[] arr2 = new int[3];
//分别输出数组名及元素
System.out.println("arr:"+arr);
System.out.println("arr[0]:"+arr[0]);
System.out.println("arr[1]:"+arr[1]);
System.out.println("--------------");
System.out.println("arr2:"+arr2);
System.out.println("arr2[0]:"+arr2[0]);
System.out.println("arr2[1]:"+arr2[1]);
System.out.println("arr2[2]:"+arr2[2]);
System.out.println("--------------");
//然后分别给数组中的元素赋值
arr[1] = 100;
arr2[0] = 200;
arr2[1] = 300;
//分别再次输出数组名及元素
System.out.println("arr:"+arr);
System.out.println("arr[0]:"+arr[0]);
System.out.println("arr[1]:"+arr[1]);
System.out.println("--------------");
System.out.println("arr2:"+arr2);
System.out.println("arr2[0]:"+arr2[0]);
System.out.println("arr2[1]:"+arr2[1]);
System.out.println("arr2[2]:"+arr2[2]);
System.out.println("--------------");
}
}
1.1.3.2代码内存图解
1.1.4 二个数组指向同一个堆内存的内存图
定义两个数组,先定义一个数组,赋值,输出。然后定义第二个数组的时候把第一个数组的地址赋值给第二个数组。然后给第二个数组赋值,再次输出两个数组的名及元素。
1.1.4.1案例代码四
package com.itheima_02;
/*
* 定义两个数组,先定义一个数组,赋值,输出。然后定义第二个数组的时候把第一个数组的地址赋值给第二个数组。
* 然后给第二个数组赋值,再次输出两个数组的名及元素。
*/
public class ArrayTest3 {
public static void main(String[] args) {
//先定义一个数组
int[] arr = new int[3];
//赋值
arr[0] = 100;
arr[1] = 200;
arr[2] = 300;
//输出
System.out.println("arr:"+arr);
System.out.println("arr[0]:"+arr[0]);
System.out.println("arr[1]:"+arr[1]);
System.out.println("arr[2]:"+arr[2]);
System.out.println("--------------");
//然后定义第二个数组的时候把第一个数组的地址赋值给第二个数组
int[] arr2 = arr;
//然后给第二个数组赋值
arr2[0] = 111;
arr2[1] = 222;
arr2[2] = 333;
//再次输出两个数组的名及元素
System.out.println("arr:"+arr);
System.out.println("arr[0]:"+arr[0]);
System.out.println("arr[1]:"+arr[1]);
System.out.println("arr[2]:"+arr[2]);
System.out.println("--------------");
System.out.println("arr2:"+arr2);
System.out.println("arr2[0]:"+arr2[0]);
System.out.println("arr2[1]:"+arr2[1]);
System.out.println("arr2[2]:"+arr2[2]);
}
}
1.1.4.2代码内存图解
1.1.5数组初始化之静态初始化
-
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。
- 格式:
- 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
- 举例:
- int[] arr = new int[]{1,2,3};
- 解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值,并且值分别是1,2,3。
- 其实这种写法还有一个简化的写
int[] arr = {1,2,3};
- 格式:
1.1.5.1案例代码
package com.itheima_03;
/*
* 静态初始化:给出数组中的元素值,由系统决定数组的长度。
*
* 格式:
* 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,...};
*
* 举例:
* int[] arr = new int[]{1,2,3};
*
* 简化的格式:
* 数据类型[] 数组名 = {元素1,元素2,元素3,...};
* 简化格式的代码:
* int[] arr = {1,2,3};
*/
public class ArrayDemo {
public static void main(String[] args) {
//定义数组
int[] arr = {1,2,3};
//输出数组名和元素值
System.out.println("arr:"+arr);
System.out.println("arr[0]:"+arr[0]);
System.out.println("arr[1]:"+arr[1]);
System.out.println("arr[2]:"+arr[2]);
}
}