• Java 入门之数组


    1、数组:就是用于存储相同数据类型的数据的容器

    2、使用数组的原因:

      没有数组:存在多个变量,需要声明多个变量的名称,这些名称之间没有什么关系和规律。想访问所有的变量,就比较困难。

      有了数组:只需要有一个数组容器的名称,容器里面有通过数字表示的位置。位置的数字又有规律的。可以通过容器名称结合位置数字的方式,访问到某个变量。非常容易的访问所有的变量。通过有规律的索引,来访问没有规律的元素。

    3、数组的定义:四种方法

      (1)数组元素的数据类型[] 数组名称 = new 元素的数据类型[数组容器的大小];

        eg:int[] scores = new int[3];

     (2)数组元素的数据类型[] 数组名;          eg:int[] scores;

        数组名 = new 数组元素类型[数组长度];  scores = new int[3];

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

        eg:int[] scores = new int[]{33,33,44};

     (4)数组元素类型[] 数组名 = {元素1,元素2.....};

        eg: int[] scores = {33,33,44};

    4、详细解释:

      元素:数组中的数据、数组中的变量

      元素的数据类型:数组中的数据的数据类型,用于决定每个空间的大小

      []:表示是一个一维数组

      数组名称:数组本身也是一个变量,用于存储数组的地址的变量。

      =:赋值符号,将数组的地址,赋值给数组的名称

      new:用于在堆内存中开辟空间

      元素的数据类型:和前面的元素的数据类型保持一致

     数组容器的大小:可以存储数据的个数

    5、打印的数组的结果解释:[I@15db9742

      [:表示这是一个一维数组

      I:表示数组中存储的是int类型的数据

      @:普通的分隔符

      15db9742:数组有一个内存地址,通过hashCode方法,将这个内存地址计算成了一个数字,用于表示这个内存地质,将这个数字转成十六进制的表示形式

      说明:以后将打印结果,简称为数组的地址

    Jvm内存的划分

    1、jvm是执行java程序的容器,空间很大,需要划分不同的区域:不同的功能,需要使用不同特点的区域来完成。分为:栈内存、堆内存、方法区、本地方法区、程序计数器

    2、栈内存【常用】:用于执行方法,每个方法单独的分配一段空间,称为栈帧,把给方法分配内存空间,形象的称为“进栈”。特点:先进后出

    3、堆内存【常用】:用于存储数组、对象等数据量较大的数据。一般都是引用数据类型。

    4、方法区【常用】:用于存储类的字节码对象,存储常量、存储静态变量

    5、本地方法区:用于执行本地方法。C语言、C++方法就是本地方法。

    6、程序计数器:用于控制程序的执行、控制程序执行哪行代码

     

    两个引用指向同一个数组

    1、引用:

      在内存中的一个变量,存储另外一个数据的地址。

      称数据的地址,为引用

      存储引用的变量,称为引用数据类型的变量

    2、两个引用指向了同一个数组:

      任意一个引用修改了数组中的内容

      另外一个数组也能访问到修改了的数据

    3、图示:

       

     

    数组的异常

    1、在程序运行过程中,出现了和生活正常情况不符的条件,就没有必要让程序继续执行下去。将这个情况的信息,封装成一个对象,就是异常对象。一旦有了异常对象,程序就会做一些跳转甚至结束。

    2、数组操作的过程中,可能会发生的两个异常:

      数组索引越界异常:

       原因:访问了数组中,不存在的索引。数组索引的范围是0~长度-1,超过了这个范围都是越界

        避免:不要访问不存在的索引 

      空指针异常:  

      原因:当引用不再指向任何的堆内存中的数据时,仍然要通过这个引用访问堆内存中的数据,只能抛出异常。

       避免:在使用引用之前,可以先判断是否为null,不为null的时候再去访问

    数组的遍历

     

    class Test {
        public static void main(String[] args) {
            int[] arr = {11,22,33,44,55};
            //定义循环,获取所有的索引,由于i不仅表示循环的控制,还表示数组的索引
            //所以从0开始
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }
    }

    数组中取最大值

    class Test2 {
        public static void main(String[] args) {
            int[] arr = {23, 34 -12, 66, 11, 78};
            int max = arr[0];// 假设数组的第一个元素为最大值
            for (int i = 1; i < arr.length; i++) {
                if (arr[i] > max) {
                    max = arr[i];//替换成比max大的元素的值
                }
            }
            //循环结束之后,max就是数组的最大值
            System.out.println(max);
        }
    }

    数组的反转

    class Test3{
        public static void main(String[] args) {
            int[] arr = {11,22,55,3,5,9};
            //调用方法,遍历数组内容
            printArr(arr);
            //对数组进行反转:获取对称位置的索引
            for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
                //i和j位置的元素,进行交换
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
            //反转完成之后,再次遍历数组内容
            printArr(arr);
        }
        /*定义一个方法,遍历一个int类型的数组
         返回值类型:void,因为只需要打印出来即可
         参数列表:
        */
        public static void printArr(int[] arr) {
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i] + "  ");
            }
            System.out.println();
        }
    }
    数组的反转

     

     

  • 相关阅读:
    求两条链表有无交点和第一个交点
    重载自增运算符(前置自增++p和后置自增p++)
    二叉排序树和平衡二叉树
    红黑树
    java学习攻略
    Intellij IDEA / IntelliJ
    ngrinder test
    eclipsejeekeplerSR2win32x86_64 jsonedit plugin
    向叶子文文的.net之路学习(大量的转载)
    微软发布机制(转)从浅入深
  • 原文地址:https://www.cnblogs.com/xfdhh/p/11147537.html
Copyright © 2020-2023  润新知