Java复习笔记9【数组】

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
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值