zoukankan      html  css  js  c++  java
  • 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);
            }
    
  • 相关阅读:
    需求分析-配置软件开发的出发点
    有关tab页的
    有关菜单的
    有关树形结构的
    需求分析-新闻发布的完整需求
    需求分析-网盘类的需求分析
    需求分析-有关有关富文本编辑器的需求
    Objective-C中的instancetype和id区别
    webservice远程调试开启
    Controller之间传递数据:Block传值
  • 原文地址:https://www.cnblogs.com/tushao/p/13986833.html
Copyright © 2011-2022 走看看