Java基础

一.数组

1.1数组的简介

数组是一种数据结构,可以用来储存一堆类型相同(基本数据类型和引用数据类型都可以)的并且是有序的数据的容器,我们可以通过数组的下标来访问数组中的元素。

数组没有固定的类名,每一个数组都是对象(基本数据类型的数据,称作值,不叫对象)

注意:

数组是一个固定长度的容器,一旦初始化长度,就不能改变

数组的长度,代表数组中可以储存多少个元素,类似容量

元素,即储存在数组中的每一个数据,称作数组的元素

1.2数组的实例化

我们在定义一个数组时,需要用到 [ ] ,可以理解为要存储一堆数据

1.使用new关键字,来实例化数组对象,同时初始化具体元素

2.使用new关键字,只定义数组的长度

注意:在我们只规定数组的长度时,本质上也存入了默认类型的元素

//new+直接初始化具体元素
        String[] names = new String[]{"小红","小明","小强","张三","李四"};
        System.out.println(Arrays.toString(names));

上述代码中,我们使用new关键字直接实例化了一个数组,存入了5个字符串类型的元素

//new+长度  注意:其实是有长度个默认元素
        int[] nums = new int[5]; //byte,short,int,long对应的默认元素时0
        System.out.println(Arrays.toString(nums));
        double[] prices = new double[5]; //float,double对应的默认元素是0.0
        System.out.println(Arrays.toString(prices));
        char[] chars = new char[5]; // char对应的默认元素是  \u0000
        System.out.println(Arrays.toString(chars));
        boolean[] bools = new boolean[5]; //boolean对应的默认元素是false
        System.out.println(Arrays.toString(bools));
        String[] adds = new String[5]; // 引用类型对应的默认元素是null
        System.out.println(Arrays.toString(adds));

上述代码中,我们使用类型名[ ]  = new [长度]的方式创建了不同类型的数组,并打印数组的元素,需要注意的是:在使用打印命令打印数组时,需要使用Arrays.toString(数组名)的方式

 

可以发现,每个基本数据类型都是有默认值的,引用类型的默认值时null

在我们使用静态初始化数组时,不能像声明变量一样,可以先声明再初始化

1.3数组的访问

我们需要通过下标来访问数组中的元素   下标就是数组中元素的索引值。从0开始,最后一个元素的下标length-1

数组的长度可以表示为    数组名.length

如何通过下标访问   变量名 = 数组名[index]

public static void main(String[] args) {
        int[] ages = new int[]{20,18,19,20,19,30};
        //获取ages中的第一个元素

首先我们通过new关键字直接进行初始化int类型的长度为6的一个数组,他们的索引是0,1,2,3,4,5。

我们如果需要获取数组中的第一个元素

int first = ages[0];
        System.out.println("first: " + first);

可以设置一个int 类型的变量first来接受,然后打印出来同理,我们也可以打印出其他的变量

//获取ages中的第四个元素
        int four = ages[3];
        System.out.println("four: " + four);
        //打印ages的长度
        System.out.println("长度:"+ages.length);
        //获取ages中的最后一个元素
        System.out.println("最后一个元素:"+ages[ages.length-1]);

如果需要打印长度的话,可以使用变量名.length的方式,在获取最后一个元素时,也可以使用

[变量名.length-1] 的方式.

如果我们需要对数组中的元素进行赋值,可以直接使用索引来实现,比如:

 //将年龄39存入到第二个位置
        ages[1] = 39;
        //将年龄50存入到最后一个位置
        ages[ages.length-1] = 50;
        System.out.println(Arrays.toString(ages));

我们可以把39存入索引[1]位置,也就是数组的第二个位置,把50存入数组的最后一个位置,也就是索引[ages.length-1]的位置

可以看出,我们成功访问了 需要的一些元素,并且成功对第二个元素和最后一个元素赋值

//创建一个具有5个长度的long类型数据
        long[] ns = new long[5];
        //将数字10,20,30,40,50分别放入
        ns[0] = 10;
        ns[1] = 20;
        ns[2] = 30;
        ns[3] = 40;
        ns[4] = 50;
        System.out.println(Arrays.toString(ns));

我们可以通过new关键字创建一个long类型长度为5的数组,并把每个元素都进行赋值

//将数字1~10存入到int类型的数组scores里
        int[] scores= new int[10];
        for(int i=0;i<10;i++){
            scores[i]=i+1;
        }
        System.out.println(Arrays.toString(scores));

我们还可以先使用关键字创建长度一定的数组,然后再使用for循环对其内部的元素每个进行赋值

1.4数组下标越界异常

在编译期间不会报错,但是在运行期间会报错

.ArrayIndexOutOfBoundsException

当我们输入的下标大于等于数组的长度或下标小于0时就会发生。

运行时异常:  如果不对错误进行处理,那么jvm会暴力中止该程序

空指针异常:指使用了空值去访问各种方法或者属性

比如:  null.length   null.name

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

根据上述代码,我们使用了int关键字先定义了一个数组,长度是5,但是在访问时下标输入的是5,等于了数组的长度,数组的索引最多是4,就会出现下标越界异常

第二次访问的e2变量也是同样的道理,索引值与数组的长度相同

 String[] names = {"小明","mike",null,""};
//        打印每个元素的字符长度
        System.out.println(names[0].length());
        System.out.println(names[1].length());
        System.out.println(names[2].length());
        System.out.println(names[3].length());

通过上述的代码,我们把第三个元素设置为空,最后一个元素设置为空字符串

那么此时打印2索引的的时候会遇到空值,没有长度,此时就会报空指针异常

为了解决这个问题,我们使用for循环,在元素遇到空时跳过该元素

 for (int i = 0; i < names.length; i++) {
            if (names[i]==null) { //处理null情况
                continue;
            }
            System.out.println(names[i].length());
        }

通过运行结果,我们可以发现,打印命令跳过了[2]索引,直接执行了下一个索引

1.5数组的遍历

我们可以使用两种方式来进行数组的遍历,第一种是用经典for循环,第二种是使用增强的for循环

语法:  

for( 元素类型 变量名:数组|集合|枚举){

 }
 int[] nums = new int[5];
        nums[0] = 10;
        nums[1] = 20;
        nums[2] = 30;
        nums[3] = 40;
        nums[4] = 50;
        //直接打印数组的变量
        System.out.println("数组变量:"+nums); //直接打印数组名,得到的是类全名+@+内存地址的16进制数字
        //调用Arrays.toString();
        System.out.println("数组字符串:"+ Arrays.toString(nums));

首先我们创建一个长度为5的int类型数组,并对其中的元素进行赋值,如果我们直接打印数组名nums的话,会得到类全名@内存地址,我们如果像看到数组中的元素,就需要使用Arrays.toString()的方法,

//使用经典for循环,通过下标遍历
        for (int i = 0; i < nums.length; i++) {
             //i充当下标
             System.out.print(nums[i]+" ");
//           System.out.print(nums[i]);  一样的,只是换行了
        }

        System.out.println("-----增强for循环-------");

        //使用foreach循环遍历上面的数组nums
        for(int n:nums){
            System.out.print(n+" ");
        }
    }
}

根据上述代码,使用经典for循环时,我们需要使用下标进行遍历,声明一个int类型的变量i来充当下标,并初始化i = 0;i的循环条件时小于数组的长度

然后我们就可以进行数组的遍历,打印出nums[ i ],数组的长度是5,所以会循环五次,加上“ ”的目的是为了让每次打印的结果不换行,间隔一个空格

如果我们使用增强for循环的话,就可以定义一个接受变量n,来直接遍历数组,然后打印出来就可以了,两种方式是一样的,只是增强for循环的执行效率更高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值