呦吼~ 由来更新了!Java基础(四)大神教你学数组!快来看一看啊!!!

【码牛云课堂】Java基础(四)大神教你学数组!快来看一看!

本贴为持续更新贴!内容附带大量图文和练习,供大家学习时参考。本贴主要内容为数组,希望大家阅读后能对数组有不少的了解。更多资料请练习:
码牛云课堂Java技术指导霸牛老师(微信):mnykt8080;
​ 码牛云Java技术交流QQ群:1142264605;

1.数组

1.1为什么要学习数组?

概念:数组就是一种容器,可以同时存放多个数据值。

数组的特点:

  1. 数组是一种引用数据类型
  2. 数组当中的多个数据,类型必须统一
  3. 数组的长度(数组中可以存储元素的数量)一旦确定,就不可以发生改变
  4. 数组中存放的数据叫数组的元素,数据个数称为数组的长度

1.2数组定义格式

数据类型[] 数组名
	示例:
	int[] arr;        
	double[] arr;      
	char[] arr;
数据类型 数组名[]
	示例:
	int arr[];
	double arr[];
	char arr[];
package com.mnyketang;
/*

   数组的定义
   	数据类型[] 数组名
   	数据类型 数组名[]
 */
public class Demo01{
    public static void main(String[] args) {
       
       int[] arr; 
       double[] brr;
       char crr[];
        
    }
}

1.3数组初始化

数组在使用前必须进行初始化。所谓初始化:就是为数组的元素分配内存空间,并为每个数组元素赋初始值。

两种常见的初始化方式:

  1. 动态初始化:只指定数组的长度,由系统为每个数组元素指定初始值。
  2. 静态初始化:初始化时由程序员显示的指定每个数组元素的初始值,由系统决定数组长度。

动态初始化数组的格式:

数据类型[] 数组名  = new 数据类型[数组长度];

静态初始化格式:

数据类型[] 数组名 = new 数据类型[]{1,值2,值3...};  //完整写法
数据类型[] 数组名 = {1,2,3...}; //简写版

示例代码

package com.mnyketang;
/*
	数组在使用前必须进行初始化。所谓初始化:就是为数组的元素分配内存空间,并为每个数组元素赋初始值。

    两种常见的初始化方式:

    1. 动态初始化:只指定数组的长度,由系统为每个数组元素指定初始值。
    		格式:
    			数据类型[] 数组名  = new 数据类型[数组长度];
    		
    2. 静态初始化:初始化时由程序员显示的指定每个数组元素的初始值,由系统决定数组长度。
    		格式:
    			数据类型[] 数组名 = new 数据类型[]{值1,值2,值3...};  //完整写法
				数据类型[] 数组名 = {值1,值2,值3...}; //简写版

 */
public class Demo02 {

    public static void main(String[] args) {
        // 动态初始化:只指定数组的长度,由系统为每个数组元素指定初始值。
        // 格式:数据类型[] 数组名 = new 数据类型[数组长度];
        int[] arr = new int[10];

        //静态初始化:初始化时由程序员显示的指定每个数组元素的初始值,由系统决定数组长度。
        /*
        	格式:
    			数据类型[] 数组名 = new 数据类型[]{值1,值2,值3...};  //完整写法
				数据类型[] 数组名 = {值1,值2,值3...}; //简写版
        */
        int[] brr = new int[]{1,2,3};
        int[] crr = {4,5,6};     
    }
}  

1.4数组的使用

数组最常用的用法就是访问数组元素,包括对数组元素进行赋值取出数组元素的值。

1.4.1 什么是索引

​ 每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。

​ 这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。

1.4.2 访问数组元素格式
数组名[索引];
1.4.3示例代码
package com.mnyketang;
/*
   
    访问数组元素的格式:数组名称[索引值]  
 */
public class Demo03 {
    public static void main(String[] args) {
        // 静态初始化的省略格式
        int[] arr = { 1, 2, 3 };
        System.out.println(array); //直接打印数组打印的是地址值
        
        //访问数组元素的格式:数组名称[索引值]
        System.out.println(arr[0]); // 1
        System.out.println(arr[1]); // 2
        System.out.println(arr[2]); // 3
        
        //数组元素赋值
        arr[0] = 100;
        System.out.println(arr[0]); // 100
    }
}
1.4.4 数组默认值
package com.mnyketang;
/*
使用动态初始化数组的时候,由系统为每个数组元素指定初始值。规则如下:
    整数类型默认为0;
    浮点类型默认为0.0;
    字符类型默认为'\u0000';
    布尔类型默认为false;
    引用类型默认为null。
 */
public class Demo04 {
    public static void main(String[] args) {
        // 动态初始化一个数组
        int[] array = new int[3];

        System.out.println(array); // 内存地址值
        System.out.println(array[0]); // 0
        System.out.println(array[1]); // 0
        System.out.println(array[2]); // 0
    }
}

1.5内存分配

1.5.1内存概述

​ 内存是计算机中的重要原件,临时存储区域,作用是运行程序。

​ 我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。

​ 必须放进内存中才能运行,运行完毕后会清空内存。

​ Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。

1.5.2java中的内存分配

目前我们只需要记住两个内存,分别是:栈内存和堆内存

区域名称作用
寄存器给CPU使用
本地方法栈与操作系统有关
方法区存放.class相关信息。
堆内存new来创建的,都存储在堆内存。
方法栈存放的是方法中的局部变量,方法运行时一定进栈执行

1.6单个数组的内存图

在这里插入图片描述

1.7 多个数组的内存图

在这里插入图片描述

1.8多个数组指向相同内存图

在这里插入图片描述
10.数组操作的两个常见小问题

1.10.1 索引越界异常

出现原因

package com.mnyketang;
/*

数组索引越界异常
ArrayIndexOutOfBoundsException

原因:访问了不存在的无效索引
 */
public class Demo05 {

public static void main(String[] args) {
        int[] array = {15,25,35};
        System.out.println(array[0]); //15
        System.out.println(array[1]); // 25
        System.out.println(array[2]); // 35

        // 错误写法
        // 并不存在3号元素,所以发生异常
        System.out.println(array[3]);
    }

}
1.10.2 空指针异常

出现原因

public class Demo06 {
    public static void main(String[] args) {
        int[] arr = new int[3];

        //把null赋值给数组
        arr = null;
        System.out.println(arr[0]);
    }
}

1.11数组遍历

数组遍历:就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。

public class Demo07 {
	public static void main(String[] args) {
		int[] arr = { 1, 2, 3, 4, 5 };
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		System.out.println(arr[3]);
		System.out.println(arr[4]);
        
         // 使用循环,次数其实就是数组的长度。
        for (int i = 0; i < 6; i++) {
            System.out.println(array[i]);
        }
        
        //  int len = array.length; // 长度
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
        
	}
}

1.12数组最值

最大值获取:从数组的所有元素中找出最大值。

实现思路:

1.定义变量max,保存最大值,假设数组第一个元素为最大值

2.遍历数组,获取每个元素

3.将遍历到的元素和max进行比较

4.如果数组元素的值大于max,将当前元素赋值给max

5.遍历结束,变量保存的就是数组中的最大值

代码实现:

public class ArrayTest02 {
    public static void main(String[] args) {
        //定义数组
        int[] arr = {12, 45, 98, 73, 60};

        //1.定义变量max,保存最大值,假设数组第一个元素为最大值
        int max = arr[0];

        //2.遍历数组,获取每个元素
        for(int x=1; x<arr.length; x++) {
            //3.将遍历到的元素和max进行比较
            if(arr[x] > max) {
                //4.如果数组元素的值大于max,将当前元素赋值给max
                max = arr[x];
            }
        }
        //5.遍历结束,变量保存的就是数组中的最大值 
        System.out.println("max:" + max);

    }
}

今天的内容就这么多希望大家学习后对数组有了更深的了解,要记得多多练习来消化一下哟。想要获得后续资料,持续关注码牛云吧,下次更新我们不见不散!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值