package com.lesson9.example;
/*
* 简单了解一维数组Array
* */
/*
* 【数组】
* 1.声明数组:Type[] <数组名>
* ---->Type[] 相当于一种数据类型,表示以Type为数组元素类型的数组
* ---->声明数组变量时,不能指定数组长度
* 2.实例化数组:<数组名> = new Type[数组元素个数]
* ---->java中数组也是一种对象,需要为其分配空间,即实例化数组(new)
* ---->在为数组分配内存空间时须指明数组的长度
* ---->实例化数组后,数组中的每个元素会被自动赋予和其数据类型相同的默认值
* 整型:0, 浮点型:0.0, 布尔:false, 字符串:null
* 3.数组可以存放基本类型或引用类型的数据,但是同一数组内元素类型必须一致
* 4.数组中的元素是有序的(元素之间的位置相对有序,可以通过数组下标的方式来访问数组元素的)
* 5.数组的长度(array.length)是固定的
* ---->数组具有length属性,该属性只能被读取,不能修改
* */
public class ArrayExample {
public static void main(String args[]){
int[] intArray; //声明数组:数组元素类型+数组名intArray = new int[5]; //实例化数组:分配内存 + 指明数组长度intArray[0] = 1;intArray[3] = 4;for(int i = 0; i < 5; i++){
System.out.print(intArray[i] + "\t"); //输出:1 0 0 4 0
}
}
}
package com.lesson9.example;
/*
* 了解Array数组初始化
* */
/*
* 【Array初始化】
* 1.静态初始化:定义数组的同时为数组元素赋值
* 2.动态初始化:数组定义与为数组分配内存空间和赋值的操作分开进行
* 3.默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,
* 每个元素也被按照成员变量的规则被隐式初始化。
* */
public class ArrayExample2 {
public static void main(String args[]){
/** 静态初始化方法一:在声明数组的同时进行赋值* */Byte[] bArray = {1,2,3,4};//穷举法,能够确定长度和所有数组元素/** 静态初始化方法二:在声明并实例化数组的同时进行赋值* */int[] iArray = new int[]{1,2,3,4};//当声明数组并实例化时,如果为数组元素赋初始值,实例化中的[]内不能指明数组长度/** 动态初始化:数组定义与实例化和赋值的操作分开进行* */String[] book = new String[3];book[0] = "Thinking in Java";book[1] = "Effective Java";/** 默认初始化:数组是引用类型* */Date[] date = new Date[2];date[0] = new Date(2013,2,10);date[1] = new Date(2013,8,15);//相当于Date[] date = new Date[]{new Date(2013,2,10),new Date(2013,8,15)}
}
}
//创建一个Date类,用于存储时间
class Date{
int year,month,day;//带参构造函数public Date(int year,int month,int day){
this.year = year;this.month = month;this.day = day;
}
}
package com.lesson9.example;
/*
* 通过实例加深对数组初始化的了解,了解数组变量和数组对象的区别
* */
/*
* 【注意】
* 1.java的数组是一种引用类型。数组变量并不是数据本身,而是指向堆内存中存放的数组对象。
* 因此可以改变一个数组变量所引用的数组。
* 2.数组是否必须进行初始化?
* --->对于这个问题关键在于理清数组变量和数组对象的区别:
* 数组变量是存放在栈内存中的,数组对象是存放在堆内存中的;
* 数组变量只是一个引用变量,它能够指向实际的数组对象。
* --->所谓的数组初始化并非是对数组变量的初始化,而是对数组对象进行初始化。
* */
public class ArrayExample3 {
public static void main(String args[]){
//静态初始化String[] cats = {"Mimi", "Tom"};String[] dogs = new String[]{"Coco", "Lily", "Lucy", "Milk"};//动态初始化String[] ducks = new String[3];ducks[0] = "Cindy";ducks[1] = "Jack";ducks[2] = "May";System.out.println("---------cats line---------");print(cats);System.out.println("---------dogs line---------");print(dogs);System.out.println("---------ducks line---------");print(ducks);/** 结果输出:* ---------cats line---------Mimi Tom---------dogs line---------
Coco Lily Lucy Milk---------ducks line---------Cindy Jack May* */
System.out.println("==============Change======================");cats = dogs; //可以改变数组变量所引用的数组ducks = cats; //cats数组变量改变后指向dogs数组对象,则ducks也指向dogs数组对象//相当于擦掉原先的箭头,将其重新指向新的数组对象。//数组变量中存放的是数组对象的地址(大小都一样),因此不用考虑两个数组之间的长度差问题System.out.println("---------cats line---------");print(cats);System.out.println("---------dogs line---------");print(dogs);System.out.println("---------ducks line---------");print(ducks);/** 结果输出:* ---------cats line---------Coco Lily Lucy Milk---------dogs line---------Coco Lily Lucy Milk---------ducks line---------Coco Lily Lucy Milk* */
}/** 该方法用于输出字符串数组* @param str String 需要输出的字符串数组* return void* */private static void print(String[] str){
//将方法设置成类方法,可以在类中直接用方法名调用for(int i = 0; i < str.length; i++){
System.out.print(str[i] + "\t");
}System.out.println();
}
}
2、package com.lesson9.example;
/*
* 了解二维数组的使用
* */
public class ArrayExample4 {
public static void main(String args[]){
/** 二维数组的声明、实例化、赋值、输出* */int[][] iArray = new int[2][3]; //声明一个2行3列的二维数组iArray[1][2] = 99; //对某个指定位置的元素进行赋值//循环输出二维数组中的元素for(int i = 0; i < iArray.length; i++){//iArray.length表示二维数组的行数
for(int j = 0; j < iArray[0].length; j++){//iArray[0].length表示二维数组的列数,即某一行的列数
System.out.print(iArray[i][j] + "\t");
}
System.out.println();
}/** 【注意】二维数组Array[x][y]的长度length* 1.<数组名>.length表示的是数组的行数x* 2.<数组名>[number].length表示的是某行所拥有的元素数,即数组的列数y* */System.out.println("============================================");/** 不对称数组的设置* *//** 数组实例化时可以只设置行数,但是此时二维数组不能使用* 需要分别设置每行中元素的个数,数组才真正初始化完成* */int[][] td = new int[3][]; //实例化时可以只设置行数(但是不能只设置列数)//分别设置各行的元素td[0] = new int[4];td[1] = new int[]{1, 2};for(int i = 0; i < td.length; i++){ //td.length表示行数
for(int j = 0; j < td[i].length; j++){ //这里不能使用固定的索引,因为每行的元素个数都不相同
System.out.print(td[i][j] + "\t");
}System.out.println();
}System.out.println("============================================");//也可以直接对不对称数组进行赋值,但是注意:实例化时不用指明数组的长度byte[][] bArray = new byte[][]{{1, 2}, {3, 4, 5}, {6, 7, 8, 9, 10}};/** 灵活赋初值* *///分别设置一维数组int[] ss1 = {100, 12, 99};int[] ss2 = {21, 78, 102, 66};int[] ss3 = {17, 88};//将一维数组添加到二维数组int[][] arr = new int[][]{ss1, ss2, ss3}; //arr是一个二维数组,arr[i]表示第i行数组//arr[0] = ss1 = {100, 12, 99}//arr[1] = ss2 = {21, 78, 102, 66}//arr[2] = ss3 = {17, 88}int[] temp = arr[0]; //temp是一个一维数组变量,temp = arr[0] = {100, 12, 99}//temp[i]表示访问一维数组temp的第i个元素System.out.println(temp[1]); //输出:12
}
}