数组的定义与使用(一)

【本节目标】

        1.理解数组基本概念

        2.掌握数组的基本方法

        3.数组与方法互操作

        4.熟练掌握数组相关的常见问题和代码

1.数组的基本概念

1.1为什么要使用数组

假设现在要存五个学生的javaSE考试成绩,并对其进行输出,按照之前掌握的知识点,我们写出如下代码:

public class TestStudent{

        public static viod main (String[] args){

                int score1 = 70;

                int score2 = 80;

                int score3 = 85;

                int score4 = 60;

                int score5 = 90;



                System.out.println(score1);

                sout(score2);

                sout(score3);

                sout(score4);

                sout(score5);

        }

}

上述代码的缺点是:如果同学多了起来,需要挨个创造变量么?通过观察发现:所有成绩的类型都是相同的,那么Java中存在储存相同类型多个数据的类型就是本节学习的数组

1.2什么是数组

数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间 。比如现实中的车库:

在Java中,包含6个整形类型元素的数组,就相当于上图中连在一起的六个车位,从上图可看出:

        1.数组中存放的元素其类型相同

        2.数组的空间是连在一起的

        3.每个空间有自己的编号,起始位置的编号为0,即数组的下标

1.3数组的创建及初始化

1.3.1数组的创建 

T[] 数组名 = new T[N];

 T:表示数组中存放元素的类型

T[]:表示数组的类型

N:表示数组的长度

int[] array1 = new int[10];
double[] array2 = new double[5];
String[] array3 = new String[3];
 

 1.3.2数组的初始化

数组的初始化主要分为动态初始化以及静态初始化。

        1.动态初始化:在创建数组时,直接指定数组中元素的个数

int[] array = new int[10];

        2.静态初始化:在创建数组时不直接指定数据元素个数,而是直接将具体的数据内容进行指定

格式:T[] 数组名称 = {data1,data2,data3,...,datan};


int[] array1 = new int[]{0,1,2,3,4,5,6,7,8,9};
double[] array2 = new double[]{1.0,2.0,3.0,4.0,5.0};
String[] array3 = new String[]{"hello","java","!!!"};
 

 【注意事项

  • 静态初始化虽然没有指定数组的的长度,编译器在编译时会根据{}中的元素个数来确定数组的长度。
  • 静态初始化时,{}中数据类型必须与[]前数据类型一致。
  • 静态初始化可以简写,省去后面的new T[]。
    //注意:虽然省去了new T[] ,但是编译器编译代码时还是会还原
    int[] array1 = {0,1,2,3,4,6,8};
    double[] array2 = {1.0,2.0,3.0};
    String[] array3 = {"hell","java"};
    

  • 数组也可以按照如下C语言个数床渐渐,不推荐
    /*
    该种定义方式不太友好,容易造成数组的类型就是int的误解
    []如果在类型之后,就表示数组类型,因此int[]结合在一块写意思更清晰
    */
    int arr[] = {1, 2, 3};
  •  静态和动态初始化也可分为两步,但是省略格式不可以
    int[] array1;
    arrayy1 = new int[10];
    
    int[] array2;
    array2 = new int[10,20,30];
    
    //注意省略格式不可以拆分,否则编译失败
    //int[] array3;
    //array3 = {1,2,3};
    

    •  如果没有对数组进行初始化,数组中元素有其默认值​​​​
      1.如果数组中存储元素类型为基类类型,默认值为基类类型对应的默认值,比如:
      类型默认值
      byte0

      short

      0

      int0
      long0
      foat

      0.0f

      double0.0
      char/u0000
      booleanfalese
      ​​​2.如果数组中存储元素类型为引用类型,默认值为null

1.4数组的使用

1.4.1数组中元素访问

数组在内存中是一段连续的空间,空间的编号都是从0开始的,依次递增,该编号称为数组的下标,数组可以通过下标访问其任意位置的元素。比如:

int[] array = new int[]{10,20,30,40,50};
sout(array[0]);
sout(array[1]);
sout(array[2]);
sout(array[3]);
sout(array[4]);

//也可以通过[]对数组中的元素进行修改
array[0] = 100;
sout(array[0]);

 【注意事项

1.数组是语段连续的空间,因此支持随机访问,即通过下标访问快速访问数组中任意位置的元素

2.下标从0开始,介于[0,N)之间不包含N,N为元素个数,不能越界,否则会报出下标越界异常。

int[] array = {1, 2, 3};
System.out.println(array[3]); // 数组中只有3个元素,下标一次为:0 1 2,array[3]下标越界

// 执行结果
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100
    at Test.main(Test.java:4)

抛出了 java.lang.ArrayIndexOutOfBoundsException 异常. 使用数组一定要下标谨防越界.

1.4.2遍历数组

所谓“遍历”是将数组中的所有元素都访问一遍,访问是指对数组中的元素进行某种操作,比如:打印

int[] array = new int[]{10,20,30,40,50};
sout(array[0]);
sout(array[1]);
sout(array[2]);
sout(array[3]);
sout(array[4]);

上述代码可以起到对数中元素遍历的目的,但问题是:

        1.如果数组中增加了一个元素,就需要增加一条打印语句

        2.如果输入中有100个元素,就需要写100个打印语句

        3.如果现在要打打印修改为给数组中每个元素加1,修改起来非常麻烦。

通过观察代码可以发现,对数组中每个元素的操作都是相同的,则可以使用循环来进行打印。

int[] array = new int[]{10,20,30,40,50};
for(int i = 0;i<5;i++){
    sout(array[i]);

    }

 改成循环之后,上述三个缺陷可以全部2和3问题可以全部解决,但是无法解决问题1。那能否获取到数组的长度呢?

 注意:在数组中可以通过 数组对象.length 来获取数组的长度

int[]array = new int[]{10, 20, 30, 40, 50};
for(int i = 0; i < array.length; i++){
    System.out.println(array[i]);
    }

 也可以使用 for-each 遍历数组

int[] array = {1, 2, 3};
for (int x : array) {
    System.out.println(x);
    }

for-each 是 for 循环的另外一种使用方式. 能够更方便的完成对数组的遍历. 可以避免循环条件和更新语句写错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值