最近在看JAVA教学的视频,觉得老师讲的很好,同时借用源代码还有笔记来撰写本系列博客,记录自己的学习内容,同时也供看到的人学习。
说实话最近几篇的笔记对应的内容感觉比一开始的要深入好多倍,像博主这样脑袋比较笨的童鞋有的时候就会盯着一些当年刚接触JAVA就遇到的一些至今还不太懂的细节问题反反复复地核对代码和内存图,希望从原理上能理解透彻,写一篇笔记的准备时间也比以前长了很多,但是还是的继续坚持下去啊,嘿嘿~
这篇只讲数组的内容。先来看看数组的介绍:
示例代码:
/**
* 数组的基本概念
* @author dell
*
*/
public class Test01 {
public static void main(String[] args) {
//1. 数组是相同数据类型(数据类型可以为任意类型)的有序集合
// 2. 数组也是对象。数组元素相当于对象的成员变量(详情请见内存图)
//3. 数组长度的确定的,不可变的。如果越界,则报:ArrayIndexOutofBoundsException
int[] a = new int[3];
a[0] = 23;
a[1] = 28;
a[2] = 32;
Car[] cars = new Car[4];
cars[0] = new Car("奔驰");
System.out.println(cars[0].name); //这里注意一下,Car类型的数组cars建立的时候只是new出来四个空间,每个空间只是存储一个引用(地址),指向对应类new出来的对象的一个属性值(name的值:“奔驰”),而这个属性值存放在类Test01的常量池里面(这里有些绕,需要想明白,可参考笔记8的内存分析内容)。
System.out.println(a.length);
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}
}
public class Car {
<span style="white-space:pre"> </span>String name;
<span style="white-space:pre"> </span>public Car(String name){
<span style="white-space:pre"> </span>this.name= name;
<span style="white-space:pre"> </span>}
}
上述代码的难点在于建立引用类型数组队的时候内存到底是怎样分配的,关于这点代码的注释部分有一些解释,下面这张图更形象一些:
接下来介绍的是数组的基本语法:
public class Test02 {
public static void main(String[] args) {
//一,声明(两种格式都对)
int[] a;
int b[];
//二,创建数组对象
a = new int[4];
b = new int[5];
//三,三种初始化方式(对数组元素的初始化)
//1,默认初始化(就是只new但是没有任何赋值语句):数组元素相当于对象的成员变量,默认值跟成员变量的规则一样。数字:0;布尔:false;char:\u0000;引用:null
//2,动态初始化:
for(int i=0;i<a.length;i++){
a[i] = i*12;
}
//3,静态初始化
int c[] = {23,43,56,78}; //长度:4,索引范围:[0,3]
Car[] cars = {
new Car("奔驰"),
new Car("比亚迪"),
new Car("宝马")
};
Car c2 = new Car("奔驰");
System.out.println(c2==cars[0]);
}
}
这里内容没有多少,具体的要求规则在代码的注释部分都有体现,以下三张图是关于创建数组时的动态内存分析,能更加有助于理解:
好了,这篇就到此结束了,离第一个目标——写满20篇越来越近了,加油!