JAVA--数组

有一天你被要求用一个程序来录入同学们的成绩,有没有一种东西可以存储一堆数据呢?

这个东西就是数组了.

数组

数组可以用来存储很多相同类型的数据,是一种引用变量.

1.声明数组

元素类型[] 变量名(即数组名称.)

初始化数组的时机与变量的初始化:

1.声明时直接初始化,也叫静态初始化.

int[] nums={1,2,3,4,5};

2.先声明再初始化,又叫动态初始化,又细分为两种

/*1.规定长度的写法*/
    int[] nums=new int[5];
/*2.不规定长度的写法*/
    int[] nums=new int[]{};

2.元素

上面1中的程序大括号内的每一个数字都是数组的元素.

3.数组的长度与下标

数组内存储的元素数量称为数组的长度,一般用length指代.

数字内元素的"位置",一般用index指代

     下标的注意事项:下第一个元素的下标为0,最后一个元素下标为length-1.

4.数组元素的访问

有了下标就可以访问数组内的元素了,利用for循环可以输出所有的元素.

此时我们运行如下程序:

public staitic void main(String[] args){
    int[] num=new int[5];
    double[] dou=new double[5];
    char[] chs=new char[5];
    boolean[] bol=new boolean[5];
    String[] str=new String[5];

/*利用for循环输出以上数组*/
    System.out.print("输出num数组:");
    for(int i=0;i<num.length;i++){
        System.out.print(num[i]+",");
    }
    System.out.print("输出dou数组:");
    for(int i=0;i<dou.length;i++){
        System.out.print(dou[i]+",");
    }
    System.out.print("输出chs数组:");
    for(int i=0;i<chs.length;i++){
        System.out.print(chsi]+",");
    }
    System.out.print("输出bol数组:");
    for(int i=0;i<bol.length;i++){
        System.out.print(bol[i]+",");
    }
    System.out.print("输出str数组:");
    for(int i=0;i<str.length;i++){
        System.out.print(str[i]+",");
    }
}

可以看到的输出结果为:

输出num数组:0,0,0,0,0,
输出dou数组:0.0,0.0,0.0,0.0,0.0,
输出chs数组:,,,,,
输出bol数组:false,false,false,false,false,
输出str数组:null,null,null,null,null,

以上输出结果就是每种类型的默认值,其中char类型在不同电脑输出的内容不同,其底层内容是'\u0000.'

5.数组元素的覆盖

语法:变量名[index]=新值.

示例代码:

int[] nums={1,2,3,4,5};
nums[2]=15;
System.out.println(nums[2]);

运行结果为15. 

6.数组间的赋值

就是令一个数组等于另一个数组,也就是变量之间的赋值.

下面看如下代码:

public static void main(String[] args) {
       int[] num1={1,2,3,4,5};
       System.out.println("修改前num1的第三个元素为:"+num1[2]);
       int[] num2=num1;
       num2[2]=10;
       System.out.println("修改num2第三个元素之后num1的第三个元素为:"+num1[2]);
       System.out.println("修改num2第三个元素之后num1的第三个元素为:"+num2[2]);
    }

运行结果:

修改前num1的第三个元素为:3
修改num2第三个元素之后num1的第三个元素为:10
修改num2第三个元素之后num1的第三个元素为:10

 我们并没有修改num1[2],却发现num1[2]也跟num2[2]一样被修改为10.这就是引用变量的性质了,

 通过一个变量对数组的元素进行修改,那么与之相关的变量对应的数组的元素也会发生变化。

7.常见异常类型:数组下标越界异常

运行如下代码:

 public static void main(String[] args) {
       int[] num1={1,2,3,4,5};
       System.out.println(num1[5]);
    }

在控制台可以看到如下文字: 

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
	at Test20180728.main(Test20180726.java:4)
	................
    ................

这个"ArrayIndexOutOfBoundsException" 就是数组下标越界异常的意思了,意思就是我们访问了一个在数组中不存在的下标.

在写代码的时候一定要注意数组长度和数组下标的关系

8.引用类型Arrays

Arrays类提供了一系列可以对数组进行操作的方法,是数组的工具类.

例如我们要直接输出数组,在不使用Arrays的情况下需要for循环进行遍历输出,代码比较多.如果使用Arrays类的toString方法,只需一行代码就可以实现了.

代码示例:

public static void main(String[] args) {
       int[] nums={1,2,3,4,5};
      //for循环遍历输出数组:
        System.out.println("for循环输出数组:");
        for (int i=0;i<nums.length;i++){
            System.out.print(nums[i]+" ");
        }
        System.out.println();
        System.out.println("Arrays.toString方法输出数组:");
        // Arrays内的toString方法输出数组:
       System.out.println(Arrays.toString(nums));
    }

运行结果:

for循环输出数组:
1 2 3 4 5 
Arrays.toString方法输出数组:
[1, 2, 3, 4, 5]

不过在使用Arrays之前,需要导包,具体方法是在代码最顶端添加如下语句:

import java.util.Arrays;

9.复制数组方法

复制数组有两种方法,一种是利用Arrays类,一种是系统复制法

1.Arrays.copyOf();

 元素类型[] 变量名=Arrays.copyOf(src,newLength);
      src:源数组
      newLength:新数组的长度

代码示例:

 public static void main(String[] args) {
       int[] num1={1,2,3,4,5};
       int[] num2=Arrays.copyOf(num1,5);
        System.out.println("利用Arrays.copyOf复制的数组:"+Arrays.toString(num2));
    }

运行结果: 

利用Arrays.copyOf复制的数组:[1, 2, 3, 4, 5]

2.System.arraycopy(); 

 System.arraycopy(src,start1,des,start2,length);
       src:源数组,即被复制的数组名
       start1:源数组复制的开始下标
       des:目标数组名
       start2:目标数组复制的开始下标
       length:复制的长度

代码示例:

 public static void main(String[] args) {
       int[] num1={1,2,3,4,5};
       int[] num2=new int[5];
       System.arraycopy(num1,0,num2,0,5);
        System.out.println("利用System.arraycopy复制的数组:"+Arrays.toString(num2));
    }

运行结果:

利用System.arraycopy复制的数组:[1, 2, 3, 4, 5]

 那么这两种方法有什么区别?

1.Arrays.copyOf可以对数组进行扩容或缩容,System.arraycopy不能进行此操作.

2.System.arraycopy可以从任意位置开始到任意位置结束,Arrays.copyOf只能从开始复制.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值