黑马程序员技术交流社区

标题: 学习到第5天数组,跟大家分享下学习笔记 [打印本页]

作者: wuzeshui    时间: 2016-1-12 21:25
标题: 学习到第5天数组,跟大家分享下学习笔记
数组:
        概述:存储同一种数据类型的多个元素的集合(容器);
                基本数据类型 引用数据类型
        格式:
                数据类型[] 数组名 = new 数据类型[数组的长度];
                int[] arr = new int[3];
                 格式一:元素的数据类型[]  数组的名字  =  new  元素的数据类型[元素的个数(数组的长度)];
                     变形:元素的数据类型  数组的名字[]  =  new  元素的数据类型[元素的个数(数组的长度)];

                   格式二:元素的数据类型[]  数组的名字  =  new  元素的数据类型[]{元素1,元素2,元素3,......};
                          注:第二个[]里不能填任何东西,填了就会编译报错

                   格式三:元素的数据类型[]  数组的名字  =  {元素1,元素2,元素3,......};

        数组的特点:
                           数组中存储的元素的数据类型必须是同一个数据类型
                           数组里的元素的个数是固定的,也就是说在一开始定义数组的时候就已经决定了
                           数组有索引,索引是从0开始标号,说明索引的最大值是元素的个数减去1

        属性:length (长度)

        初始化:在内存中开辟了连续的内存空间,并给数组元素赋值;
                动态
                静态
               
                数组动态初始化后元素的默认值:
                        整数: 0
                        浮点: 0.0
                        字符: \u0000
                        布尔: false
                        引用数据类型: null

                栈:局部变量
                堆:new出来的数组和对象
                方法区:
                本地方法区:
                寄存器:

                int[] arr1 = new int[3];
                int[] arr2 = new int[3];
                int[] arr3 = arr2;

                静态初始化:
                        int[] arr = new int[]{3,7,9};
                        int[] arr = {3,7,9};

                数组的用法:
                   例:
                         int[] arr = {1,2,4,3,6};
                      System.out.println(arr);//直接打印数组的名字的结果是数组在内存中的地址值
                      System.out.println(arr[0]);//要通过数组的索引,才能打印出数组里存储的元素
                数组中元素标号的叫法:
                        索引,角标,下标
                常见的数组问题:
                        数组索引越界异常:ArrayIndexOfBoundsException
                                访问了不存在的索引元素;
                        空指针异常:NullPointerException
                                数组引用为null的时候再来调用数组元素;
                        一个数组名字只可以指向一个数组实例,因为变量名只能存放一个值,所以只能指向一个数组实例
                                但一个数组实例可以被多个数组名字指向,因为多个变量都存放同一个值(数组实例的地址值)

                遍历数组练习:
                public static void main(String[] args){
                        int[] arr = {3,7,9,8,38};        //定义一个数组
                        print(arr);                                        //调用遍历数组的方法
                }
                //遍历
                public static void print(int[] arr){                //定义遍历数组的方法
                        for(int i = 0; i < arr.length; i++){        //通过for循环获取数组中的所有索引
                                System.out.println(arr[i]);                        //根据索引获取到数组的每一个元素,并打印输出
                        }
                }
                //数组求最值
                public static int getMax(int[] arr){
                        int max = arr[0];
                        for(int i = 1; i < arr.length; i++){        //通过for循环获取数组中的所有索引
                                if(max  < arr[i]){
                                        max = arr[i];
                                }
                        }
                        return max;
                }
                //数组反转
                public static void reverseArray(int[] arr){
                        for(int i = 0;i < arr.length / 2; i++){
                                int temp = arr[i];
                                arr[i] = arr[arr.length - 1 - i];
                                arr[arr.length - 1 - i] = temp;

                        }
                }

                //查找星期
                public static char getWeek(int week) {
                                char[] arr = {' ','一','二','三','四','五','六','日'};                //定义了一张星期表
                                return arr[week];                                                                                        //通过索引获取表中的元素
                }

                //数组元素查找(查找指定元素第一次在数组中出现的索引)
                public static int getIndex(int[] arr,int value) {
                        for (int i = 0;i < arr.length ;i++ ) {                                //数组的遍历
                                if (arr[i] == value) {                                                        //如果数组中的元素与查找的元素匹配
                                        return i;
                                }
                        }
                        return -1;
                }

        二维数组:
                格式: int[][] arr = new int[3][2];
                格式2:        int[][] arr = new int[3][];
                格式3:        int[][] arr = {{12,31,42},{1,2,3,4},{5,7}};

                二维数组的遍历:
                /*
                // 外循环控制的是二维数组的长度,其实就是一维数组的个数。
                // 内循环控制的是一维数组的长度。


                int[][] arr = {{12,31,42},{1,2,3,4},{5,7}};

                for(int i = 0; i < arr.length;i++){
                        //arr[i]
                        for(int j = 0; j < arr[i].length;j++){
                                System.out.print(arr[i][j] + " ");
                        }
                        System.out.println();
                }
                */
                二维数组元素求和:

                /*
                                int sum = 0;                                                                        //定义变量,记录每次相加的结果
                                for (int i = 0;i < arr.length ;i++ ) {                        //获取每一个一维数组
                                        for (int j = 0;j < arr[i].length ;j++ ) {        //获取每一个一维数组中的元素
                                                sum = sum + arr[i][j];                                        //累加
                                        }
                                }
                                System.out.println(sum);
                */

               

        参数传递问题:
                基本数据类型的值传递,不改变原值,因为调用后就会弹栈,局部变量随之消失
                引用数据类型的值传递,改变原值,因为即使方法弹栈,但是堆内存数组对象还在,可以通过地址继续访问

                基本数据类型,形式参数的改变不影响实际参数
                引用数据类型,形式参数的改变影响实际参数        (String)、

                Java中到底是传值还是传址:
                        java中只有值传递,因为地址值也是值(出去面试都说这种,支持者是詹姆斯丶高斯林)
        几种‘空’的区别:
                null //代表什么都没有,空格也没有
                " "         //代表字符串空格
                ' '  //代表字符空格
                \u0000 //Unicode编码,char类型的默认值
               
               
               



作者: 愿随风丶飘雪    时间: 2016-1-12 22:38
哇塞,学的不错,比我强多了,好好学
作者: aoejhx    时间: 2016-1-13 13:17
加油啊@小伙子

作者: 一大把手    时间: 2016-1-13 14:25
加油小伙子




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2