A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 啊海 中级黑马   /  2016-4-1 22:55  /  530 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Java语言基础(数组概述和定义格式说明)(了解)
* A:为什么要有数组(容器)
        * 为了存储同种数据类型的多个值
* B:数组概念
        * 数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
        * 数组既可以存储基本数据类型,也可以存储引用数据类型。
* C:数组定义格式
        数据类型[] 数组名 = new 数据类型[数组的长度];
案例:
class Demo1_Array {
        public static void main(String[] args) {
                int x = 10;
                x = 20;
                System.out.println("x = " + x);
                //数据类型[] 数组名 = new 数据类型[数组的长度];
                int[] arr = new int[5];                                //可以存储五个int类型的数据
                /*
                左边:
                int:数据类型
                []:代表的数组,几个中括号就代表几维数组
                arr:合法的标识符
                右边:
                new:创建新的实体或对象
                int:数据类型
                []:代表的数组
                5:代表数组的长度
                */
 
        }
}
Java语言基础(数组的初始化动态初始化)(掌握)
* A:什么是数组的初始化
        * 就是为数组开辟连续的内存空间,并为每个数组元素赋予值 
* B:如何对数组进行初始化
        * a:动态初始化 只指定长度,由系统给出初始化值
                * int[] arr = new int[5];        
        * b:静态初始化 给出初始化值,由系统决定长度       
* C:动态初始化的格式:
        * 数据类型[] 数组名 = new 数据类型[数组长度];
* D:案例演示
        * 输出数组名称和数组元素
        整数类型:byte,short,int,long默认初始化值都是0
        浮点类型:float,double默认初始化值都是0.0
        布尔类型:boolean默认初始化值false
        字符类型:char默认初始化值'\u0000'  之前讲过'',只能放一个字符,但是'\'代表转义字符,u代表unicode编码,java采用的是unicode编码,\u相当于把
        后面的4个0给转义了。
        char在内存中占的两个字节,是16个二进制位
        \u0000,每一个0其实代表的是16进制的0,那么四个0就是代表16个二进制位

        [I@19bb25a
        [代表是数组,几个就代表几维
        I代表是int类型
        @是固定的
        19bb25a代表的是数组的地址值
Java语言基础(Java中的内存分配以及栈和堆的区别)
* A:栈(掌握)
        * 存储局部变量 
* B:堆(掌握)
        * 存储new出来的数组或对象 
* C:方法区
        * 面向对象部分讲解 
* D:本地方法区
        * 和系统相关 
* E:寄存器
        * 给CPU使用
当编译时会生成class文件,这些class文件会保存在硬盘上,当运行时,class文件被加载到内存中,内存中要进行代码的执行,此时有进栈的也有进堆的,谁进栈,谁进堆,要看它属于哪一块,如果是局部变量就进栈,new出来的东西就进堆。一定要跑到内存中才能执行,如果在电脑中开了过多的应用程序,电脑就会卡。

Java语言基础(数组的内存图解2二个数组)(了解)
        * 二个不同的数组
案例:
class Demo4_Array {
        public static void main(String[] args) {
                int[] arr1 = new int[3];                                //创建数组,长度为3
                int[] arr2 = new int[3];                                //创建数组,长度为3
 
                System.out.println(arr1);                                //打印数组的地址值
                System.out.println(arr2);
 
                arr1[0] = 10;                                                        //给第一个数组中第一个元素赋值
                arr2[1] = 20;                                                        //给第二个数组中第二个元素赋值
 
                System.out.println(arr1[0]);
                System.out.println(arr1[1]);
                System.out.println(arr1[2]);
 
                System.out.println("--------------------------------------");
 
                System.out.println(arr2[0]);
                System.out.println(arr2[1]);
                System.out.println(arr2[2]);
        }
}
Java语言基础(数组的内存图解3三个引用两个数组)(了解)
        * 三个引用,有两个数组的引用指向同一个地址
//三个引用两个数组
class Demo5_Array {
        public static void main(String[] args) {
                int[] arr1 = new int[3];
                int[] arr2 = new int[5];
                int[] arr3 = arr2;
 
                System.out.println(arr1);
                System.out.println(arr2);
                System.out.println(arr3);
 
                arr1[0] = 10;
                arr1[1] = 20;
 
                arr2[1] = 30;
                arr3[1] = 40;
                arr3[2] = 50;
 
                System.out.println(arr1[0]);
                System.out.println(arr1[1]);
                System.out.println(arr1[2]);
                System.out.println("-------------------------------");
                System.out.println(arr2[0]);
                System.out.println(arr2[1]);
                System.out.println(arr2[2]);
                System.out.println(arr2[3]);
                System.out.println(arr2[4]);
                System.out.println("-------------------------------");
                System.out.println(arr3[0]);
                System.out.println(arr3[1]);
                System.out.println(arr3[2]);
                System.out.println(arr3[3]);
                System.out.println(arr3[4]);
        }
}

Java语言基础(数组的初始化静态初始化及内存图)(掌握)
* A:静态初始化的格式:
        * 格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
        * 简化格式:
                * 数据类型[] 数组名 = {元素1,元素2,…};

Java语言基础(数组操作的两个常见小问题越界和空指针)(掌握)
        * a:ArrayIndexOutOfBoundsException:数组索引越界异常
                * 原因:你访问了不存在的索引。
        * b:NullPointerException:空指针异常
                * 原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。

Java语言基础(数组的操作1遍历)(掌握)
        * 数组遍历:就是依次输出数组中的每一个元素。
        * 数组的属性:arr.length数组的长度
        * 数组的最大索引:arr.length - 1;
案例:
class Demo8_Array {
        public static void main(String[] args) {
                int[] arr = {11,22,33,44,55};
 
                /*System.out.println(arr[0]);//这么做代码的复用性太差,我们学习了循环
                System.out.println(arr[1]);
                System.out.println(arr[2]);
                System.out.println(arr[3]);
                System.out.println(arr[4]);*/
               
                for (int i = 0;i < 5 ;i++ ) {
                        System.out.println(arr[i]);
                }
                System.out.println("---------------");
                //arr.length 代表的是数组的长度
                System.out.println(arr.length);
                for (int i = 0;i < arr.length ;i++ ) {
                        System.out.println(arr[i]);
                }
 
                int[] arr2 = {3,4,5};
                print(arr2);
        }
 
        /*
        数组的遍历
        1,返回值类型void
        2,参数列表int[] arr
        */
 
        public static void print(int[] arr) {
                for (int i = 0;i < arr.length ;i++ ) {
                        System.out.print(arr[i] + " ");
                }
        }
}

Java语言基础(数组的操作3反转)(掌握)
* A:案例演示
        * 数组元素反转(就是把元素对调)
        
Java语言基础(二维数组概述和格式1的讲解)(了解)
* A:二维数组概述
* B:二维数组格式1
        * int[][] arr = new int[3][2]; 
* C:二维数组格式1的解释
* D:注意事项
        * a:以下格式也可以表示二维数组
                * 1:数据类型 数组名[][] = new 数据类型[m][n];
                * 2:数据类型[] 数组名[] = new 数据类型[m][n];
        * B:注意下面定义的区别
        * 
                        int x;
                        int y;
                        int x,y;
                       
                        int[] x;
                        int[] y[];
                       
                        int[] x,y[];        x是一维数组,y是二维数组
        * 定义二维数组,输出二维数组名称,一维数组名称,一个元素

Java语言基础(二维数组格式2的讲解及其内存图解)(了解)
* A:二维数组格式2
        * int[][] arr = new int[3][]; 
* B:二维数组格式2的解释
* C:案例演示
        * 讲解格式,输出数据,并画内存图

Java语言基础(二维数组格式3的讲解及其内存图解)(了解)
* A:二维数组格式3
        * int[][] arr = {{1,2,3},{4,5},{6,7,8,9}}; 
* B:二维数组格式3的解释
        * 讲解格式,输出数据,并画内存图

Java语言基础(二维数组练习1遍历)(掌握)
        * 需求:二维数组遍历

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

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

Java中到底是传值还是传址
1,既是传值,也是传地址,基本数据类型传递的值,引用数据类型传递的地址
2,java中只有传值,因为地址值也是值(出去面试都说这种,支持者是高司令(java之父))

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马