202011.14

day04内容:

  • 数组

  • 方法

目标:

关于数组方向:

  1. 理解容器概念
  2. 掌握数组的三种定义方式
  3. 会使用数组索引来访问数组元素
  4. 了解数组的内存图分析
  5. 了解控制着和越界异常
  6. 掌握数组遍历,数组最大值,最小值的获取
  7. 了解数组反转的原理
  8. 了解数组作为方法参数传递
  9. 了解数组作为方法返回值

第数组定义和访问

1.容器的概念

​ 容器就是将多个数据存储到一起,每个数据称为容器的元素

数组概念

​ 数组:存储数据,长度固定的容器,保证每个数据的数据类型一致

2.数组定义三种定义方式:

第一种方式:
数组存储数据类型[] 数组名=new 数组存储的数据类型[长度(正整数)];
解析:
  • 数组存储的数据类型:决定了数组容器能够存储什么样数据类型的数据

  • []:表示数组。

  • 数组名称:给数组定义一个变量名,全小写

  • new:是一个关键字,创建数组使用的关键字

  • 数组存储的数据类型:决定了数组容器能够存储什么样数据类型的数据

  • [长度]:代表数组长度大小,表示数组能存储多少个元素。

    备注:数组一旦创建,长度不变。(定长特性)

第二种方式:

数组数据类型[] 数组名=new 数组的数据类型[]{元素1,元素2,....,元素n};
注意:第二种方式不能跟上长度。不然会报错

第三种方式:

数组的数据类型[] 数组名={元素1,元素2,元素3.。。};

数组特点

​ 1.数组长度运行期不可变,编译期可变

​ 2.数组本身就是一种引用数据类型( int[] )

​ 3.数组定义的时候是引用数据类型( int[] ),元素数据类型可变,

​ 4.数组内元素可以是数组

​ 5.数组中的数据,数据类型必须一致。

数组初始化:在内存中常见一个数组并且存入了一些默认值

​ 数组数据类型[] 数组名称; //数组定义

​ 数组名称=new 数组数据类型[长度]; //初始化

​ 默认值:int整数类型,默认值为0,

​ 浮点数类型,默认值0.0

​ 对于字符类型(char),默认值为'u0000'。显示出来是一个空格

​ 字符串,默认值为:null

​ 布尔类,默认值:false

两种常见初始化:静态动态不能同时存在

​ 1.静态初始化:创建数组的时候不指定长度,直接写内容

​ 2.动态初始化:创建数组的时候指定长度不指定内容

备注:

​ 静态虽然没有直接指定长度,但是程序会自己推算长度

建议:

​ 如果不确定数组中存储的内容,用动态

​ 内容已经确定就是用静态

​ 大多数情况建议直接使用动态初始化

数组的访问

索引:下标(记住index)

​ 每一个存储到数组中的元素,都会自动的分配一个编号,编号从0开始,这个系 统自动分配的编号称为系统的索引(index),我们可以通过数组索引访问数组 中的元素。最大索引值:数组长度-1------->数组名.length-1

格式:
		数组名称[索引];
获取数组长度:

​ 数组构建完成就自动拥有固定的长度,java会自动给数组一个属性,获取数组 长度,属性length代表数组长度,是一个int属性

		数组名称.length
索引访问数组中元素操作:

​ 修改数组中对应未知的值:数组名[索引]=数值;

​ 从数组中取出值,赋值给变量:变量=数组名[索引]

输出数组名称会得到什么:得到:[I@15db9742 数组对应的内存地址哈希值
		System.out.println(arr);

数组原理内存图解

内存:

​ 计算机中重要元件,临时存储区域,程序允许过程中,我们写的代码存放在硬 盘当中不会直接运行,要放在内存当中才会运行(通过javac和java来完成), 程序运行完毕后,会清空内存。

jvm中的内存划分:

​ 提高运行效率,会对内存空间进行不同区域的划分,每一片区域,都有特定的 处理数据方式和内存管理方式。

jvm内存划分:(记住stack和heap)
区域名称 作用
寄存器 给CPU使用,和开发无关
本地方法栈 JVM虚拟机使用系统功能时使用的,和开发无关
方法区 用来存储可以运行的.class文件
方法栈(stack) 方法运行时使用的内存。比如main方法运行就进入方法栈才能运行
堆内存(heap) 用于存储对象,数组,new出来的对象都在堆内存中
数组在内存当中的存储:
public static void mian(String[] args){
    int[] arr=new int[];
    System.out.println(arr);		//打印出来一个内存地址哈希值
    
}

image-20201112160113497

流程控制:

​ 0.class文件通过java.exe,

​ 1.mn方法进入方法栈中执行,

​ 2.创建数组,JVM在堆内存中开辟空间,存储数组

​ 3.数组在内存中会有自己的内存地址,以16进制表示

​ 4.数组三元素默认值为0

​ 5.JVM数组的内存地址赋值给数组名arr,

​ 6.变量arr保存的是地址而不是值

两个数组分别内存:就是不同的内存对象

两个变量指向同一个数组:

public ststic void main(String[] args){
	//定义一个数组,动态初始化
	int[] arr=new int[3];
	//通过数组访问数组中的元素
	arr[0]=10;
	arr[1]=20;
	arr[2]=30;
	//查看数组中的第二个元素
	System.out.println(arr[1]);
	//定义一个数组,将上一个数组赋值给该数组
	int[] arr2=arr;
	arr2[1]=20;
    //查看arr2数组中的第二个元素。
    System.out.println(arr2[1]);
}

原理图解:

image-20201112164444903

数组常见异常操作

1.数组越界:

		public static void mian(String[] args){
            //动态穿件一个数组
            int[] arr=new int[5];
            //查看数组第五个数据,错误写法
            System.out.println(arr[5]);
        }

​ 数组最大索引为:数组名.length-1 ,超出就会出现越界异常

2.数组空指针:

		public static void main(String[] args){
            //动态初始化一个数组
            int[] arr=new int[3];
            arr=null;
            //查看arr数组第三个元素
            System.out.println(arr[2]);
            
            
        }

​ 空指针异常:在程序运行过程中一个不存在的变量被引用

数组遍历(查看数组中所有元素)核心重点

​ 解释:将数组中每一个元素单个分别获取出来,

直接输出方式遍历数组

		public static void main(String[] args){
            //静态初始化数组
            int[] arr={1,2,3,4};
            //循环遍历数组中元素查看
             System.out.println(arr[0]);
             System.out.println(arr[1]);
             System.out.println(arr[2]);
             System.out.println(arr[3]);
        }

​ 数组的索引是从0开始,依次递增到arr.length-1停止,引入循环结构

用for循环遍历数组:

		public static void main(String[] args){
            //静态初始化一个数组
            int[] arr={1,2,3,4};
            //数组遍历
            for(int i=0;i<arr.length;i++){
             System.out.println(arr[i]);   
            }
        }

遍历过程中如何获取最值:

最大值:就是比较所有值,取出最大的那个值

​ 思路:先定义一个最大值变量(arr[0]),遍历数组循环比较,每次保留最大的那一 个

		public static void main(String[] main){
            //写一个数组
            int[] arr={12,85,13,75,46,486,96,-185};
            //遍历数组比较
            int max=arr[0];
            for(int i=0;i<arr.length;i++){
                if(max<arr[i]){
                    max=arr[i];
                }
            }
            System.out.println("最大值为:"+max);
        }
原文地址:https://www.cnblogs.com/tushao/p/13986833.html