39天
Java的内存划分
主要分为以下5个部分:
1.栈(Stack):存放的都是方法中的局部变量。方法的运行一定要在栈当中运行。
局部变量:方法的参数,或者是方法{}内部的变量。
作用域:一旦超出作用域,立刻从栈内存当中消失。
2.堆(Heap):凡是new出来的东西,都在堆当中。
堆内存里面的东西都有一个地址值:16进制
堆内存里面的数据u,都有默认值,规则:
如果是整数 默认为0
如果是浮点数 默认为0.0
如果是字符 默认为‘\u0000’
如果是浮点数 默认为false
如果是浮点数 默认为null
3.方法区(Method Area):存储.class相关信息,包含方法的信息。
4.本地方法栈(Native Method Stack):与操作系统相关。
5.寄存器(pc Register):与CPU相关。
一个数组的内存图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5dqYdK1O-1607311649531)(F:\Java\Learn\day11\day11.assets\image-20201207093427628.png)]
两个数组的内存图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWEQVfJc-1607311649535)(F:\Java\Learn\day11\day11.assets\image-20201207100123717.png)]
两个数组共同指向一个内存空间
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w0u8uAZ3-1607311649536)(F:\Java\Learn\day11\day11.assets\image-20201207102211520.png)]
数组索引越界异常
package day1101;
/*
* 数组得索引编号从0开始,一直到“数组得长度-1”为止
*
* 如果访问数组元素得时候,索引编号并不存在,那么将会发生
* 数组索引越界异常
* ArrayIndexOutOfBoundsExceptions
* 原因:索引编号写错了
* 解决:修改成为存在得正确索引编号* */
public class Demo01ArrayIndex {
public static void main(String[] args) {
int[] array = { 15, 25, 35 };
System.out.println(array[0]);//15
System.out.println(array[1]);//25
System.out.println(array[2]);//35
//System.out.println(array[3]);//报错超出索引范围
}
}
空指针异常
package day1101;
/*所有的引用类型变量,都可以赋值为一个null值,但是代表其中什么都没有
*
* 数组必须进行new初始化才能使用其中的元素。
* 如果只是赋值了一个null,没有进行new创建,
* 那么将会发生;
* 空指针异常NullPointerException
*
* 原因:忘了new
* 解决:补上new
* */
public class Demo01ArrayNull {
public static void main(String[] args) {
//int[] array;
//array = new int[3];
//System.out.println(array[0]);//没有new的话Variable 'array' might not have been initialized
int[] array = null;
array = new int[3];
System.out.println(array[0]);//空指针异常 0
}
}
获取数组的长度
package day1101;
/*
* 获取数组长度的格式:
* 数组名称.length
* 这将会得到一个int数字,代表数组的长度
*
* 数组一旦创建,程序运行期间,长度不可改变
* */
public class Demo03ArrayLength {
public static void main(String[] args) {
int[] arrayA = new int[3];
int[] arrayB = { 10, 20, 30, 40};
System.out.println(arrayA.length);//3
System.out.println(arrayB.length);//4
int[] arrayC = new int[5];
System.out.println(arrayC.length);//5
arrayC = new int[7];
System.out.println(arrayC.length);//7
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-crYJYVje-1607311649540)(F:\Java\Learn\day11\day11.assets\image-20201207111226752.png)]
数组长度的不可变说的是,只要在堆里面创建了new了新的数组,就是新的不可以改变,但是左边的数组的引用是可以改变的。
遍历数组
package day1101;
/*
* 遍历数组,说的就是对数组当中的每一个元素进行逐一,挨个儿处理,默认的处理方式就是打印输出。
* */
public class Demo04Array {
public static void main(String[] args) {
int[] array = {10, 20, 30, 40};
for (int i = 0; i < array.length; i++) {
System.out.println("第" + i + "个元素为:" + array[i]);
}
//可以通过输入array.fori来出现上述for循环
}
}