数组和方法

第数组定义和访问
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);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值