7.JAVASE--数组-字符|字符串

一、数组定义


变量空间是可以存放数据的,但是每一个变量空间只能存放一个数据。如:int s = 111;

1、数组的概念


数组是同一种类型数据的集合;即能够存放多个相同类型的数据的容器。

2、数组的定义方式


数组是存放多个数据的容器,java中需要使用new关键字来创建容器,在创建容器时也要明确容器的大小,即容器中存放数据个数。有以下格式:

new :会创建引用型的数据,也会在堆中开辟空间。

元素类型[] 数组名 = new 元素类型[元素个数或数组长度] ;

int[] arr = new int[3];  
//通过new关键字创建了一个长度为3,元素类型是int的数组实体。

3、数组用途


数组可以**储存多个数据,而且可以对数据进行编号。**从0开始,操作元素完成可以通过编号(索引)完成。

int[] arr = new int[3];  //通过new关键字创建了一个长度为3,元素类型是int的数组实体。
arr[0] = 3;   //给数组编号(角标)为0的空间存放int类型的常量值3
System.out.println(arr[1]);  //输出数组编号为1空间中的值。

二、数组内存详解


1、Java内存的分配


Java内存分配:寄存器常量池静态域

栈内存:存储局部变量,只要在方法中定义的都是局部变量。一旦声明周期结束,变量就会销毁。

堆内存:存储都是实体(对象),每一个实体都有一个首地址,就是在内存中存储的位置。堆内存的变量都有初始化

方法体中引用变量和基本变量都在栈上,其它都在堆中。

局部变量的引用型:会把对象存在堆中,而把引用存在栈中。

2、数组内存分配


int[] arr01 = new int[3];  //定义数组arr01 指向new 开辟的新数组地址
arr01 = null;  //定义数组arr01 指向null 

在这里插入图片描述
说明:
1.程序执行main()方法时,遇见 new int[3 ] 会在堆内存中开辟新空间,并给其分配一个地址(假设 0x34)。

2.数组各个空间都有默认的 编号角标/下标或索引),将编号中对应的 数据 根据数据类型完成 初始化

3.数组创建成功,将数组的 地址 赋值给 arr ,让 arr 指向数组实体

4.程序继续进行,将 arr指引赋值为 null ,即 arr 不再指向数组实体。

5.这是堆中的数组会被标记成垃圾,等待垃圾回收站回收GC释放堆中资源。

class Demo08{
   
    public static void main(String[] args) {
   
        int[] arr = new int[4];  // 1.定义数组数组编号称为角标 从0开始的
        //2.数组赋值
        arr[0] = 34;  // 给第一个元素赋值
        arr[1] = 18;  // 给第二个元素赋值
        arr[2] = 57;  // 给第三个元素赋值
        System.out.println("数组arr的第二个元素是:" + arr[1]);
        System.out.println(arr);  // 数组arr对应在堆中的地址信息。

        char chas[] = new char[3];
        System.out.println("chas[0]="+chas[0]);  // 0
        System.out.println(chas[0]==0);  // 0对应的字符

        boolean flag[] = new boolean[2];
        System.out.println("flag[0]="+flag[0]);  // false

        String strs[] = new String[4];
        System.out.println("str[0]="+strs[0]);  //null
    }
}

/*
数组arr的第二个元素是:18
[I@1540e19d
chas[0]= 
true
flag[0]=false
str[0]=null
*/

3、数组常见问题


3.1、数组角标越界异常

class Demo10{
   
    public static void main(String[] args) {
   
        int arr[] = new int[3];
        System.out.println(arr[3]);
    }
}

//  Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3

在这里插入图片描述

3.2、数组空指针异常

class Demo10{
   
    public static void main(String[] args) {
   
        int arr[] = new int[3];
        //System.out.println(arr[3]);
        arr = null;
        System.out.println(arr[3]);
    }
}

在这里插入图片描述

三、数组的应用


1、数组另一种定义格式


元素类型  数组名[] = new 元素类型[]{
   元素1,元素2,......元素n};
元素类型  数组名[] = {
   元素1,元素2,......元素n};

2、遍历数组


角标0开始,主键递增角标对应一位数组里的元素。

class Demo12{
   
    public static void main(String[] args) {
   
        int nums[] = {
   12,5,873,144,26};  //  角标:0  1  2  3  4
        for (int i = 0; i < 5; i++) {
   
            System.out.println(nums[i]);
        }
//        Arrays.toString 快速打印数组内容  会打印 []
        System.out.println(Arrays.toString(nums));
    }
}

/*
12
5
873
144
26
[12, 5, 873, 144, 26]
*/

但是如果数组的内容异常庞大,这时候就需要确定数组的大小

//        数组对象的length属性存储了数组长度的信息。
        System.out.println("nums数组的大小为:"+nums.length);
        nums = new int[]{
   12,22,34,55,1,3,44,5,4444,388};
        int arr_length = nums.length;
        for (int i = 0; i < arr_length; i++) {
   
            System.out.println(nums[i]);
        }

3、数组求和


需求:求数组中所有元素的和

思路:

1.需要定义个功能,用来求数组中所有元素的

2.定义功能,必须搞清楚两个明确。

1):有返回结果,即所求的 ,和的类型为int

2):有未知的参数参与。需要求和的数组 ,数组需要调用者传递给此功能

步骤:
  1. 定义变量记录
  2. 通过循环对数组进行遍历
class Demo13{
   
    public static int getSum(int []nums){
   
        int res = 0;
        int length =  nums.length;  // 获取长度
        for (int i = 0; i < length; i++) {
   
            res += nums[i];
        }
        return res;
    }
//    数据类型...形式参数  可变长度参数  就是数组
    public static int getSum1(int...nums){
   
        int res = 0;
        int length =  nums.length;  // 获取长度
        for (int i = 0; i < length; i++) {
   
            res += nums[i];
        }
        return res;
    }
    public static void main(String[] args) {
   
        int nums[] = {
   23,45,12,76,3,5,8,77};
        int sum = getSum(nums);
        System.out.println("数组的求和结果:"+sum);
    }
}

4、数组求最值


需求:获取多个整数中最大值

思路:

1.数据多了为了方便操作,先储存起来。需要容器,用数组
2.多个数据需要进行比较。每次都有较大 的数,需要记录下来和下一个数比较。
3.将数组中的元素都比一边。最后,就获取到最大值

步骤:

1.接收欲求最大值的数组

2.定义一个变量记录较大的数。

3.对数组进行遍历。让元素和较大的值进行比较。如果元素大于较大的数,用变量记录给元素。

4.遍历完成后,变量中记录就是最大值

class Demo13{
   
    public static int getMax(int...nums){
   
        int max = nums[0];
        int length = nums.length;
        for (int i = 1; i < length; i++) {
   
            if (max < nums[i]){
   
                max = nums[i];
            }
        }
        return max;
    }

//    根据角标进行
    public static int getMax1(int []nums){
   
        int max = 0;
        int length = nums.length;
        for (int i = 1; i < length; i++) {
   
            if (nums[max] < nums[i]){
   
                max = i;
            }
        }
        return nums[max];
    }

    public static void main(String[] args) {
   
        int nums[] = new int[]{
   1,3,44,22,555,44,33
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值