黑马程序员技术交流社区

标题: java第五天笔记 [打印本页]

作者: 任有智双元    时间: 2015-7-31 22:29
标题: java第五天笔记
1. 函数概述
        定义: 定义在类中的一小段具有特定功能的程序.
                可以提高代码的复用性和维护性。
        格式:
                修饰符 返回值类型(没有写void) 方法名(参数类型1 形式参数1, 参数类型2 形式参数2,...)
                {
                        // 方法体
                        // return 语句
                }
               
        特点:
                1) 函数是平级关系.不能嵌套.
                2) 函数只有被调用才会执行.
               
        调用方法:
                1) 单独调用.
                        如果有返回值.一般情况直接调用是没有意义的.
                        如果没有返回值呢? 那就只能单独调用了.
                2) 输出调用.
                3) 赋值调用.
                        方法是什么类型返回值就用什么类型接收.(不要忽略隐式转换的问题)
       
        定义方法是明确思路:
                1) 明确返回值类型
                2) 明确参数列表
       
        练习:两个int数中的最大值
               
                       
        结束方式:
                关键字return让方法结束的.
                返回值类型是void 的方法, return语句可以省略.
       
        练习:
                请编写一个函数完成比较两个int类型数据是否相等的功能
                明确返回值类型 : boolean
                明确参数列表 : int a, int b
               
        注意事项:
                测试的时候,每种可能都要测到,并且要考虑非法数据的情况.
               
        函数重载:
                是在一个类中,方法名相同,但参数列表不同(包括个数或者类型), 与返回值类型无关.
               
               
2 . 数组
        定义: 存储多个同一种数据类型的元素的容器.
        好处: 元素会具备索引,方便操作.
        特点:
                1) 可以存储基本数据类型, 也可以存储引用数据类型.
                2) 一个只能存放同一种数据类型.
                3) 数组的长度固定.
               
        格式:
                元素类型[] 数组名 = new 元素类型[长度];
               
        直接打印数组: 看到数组在内存中的地址值的十六进制表示形式.
       
        获取元素格式:
                数组名[索引]
               
               
3. 内存
        栈:
                局部变量
                特点:使用完毕自动消失.
       
        堆:
                new 建立的实例
                都有默认值:
                        整形 : 0
                        浮点型 : 0.0
                        字符型 : '\u0000' (空字符'')
                        boolean : false
                        引用数据类型 : null
                会在变成垃圾后(没用引用指向),被垃圾回收器不定时的回收.       
                       
4. 数组的定义方式
        以int数组为例:
                int[] arr1 = new int[5];
                int[] arr2 = {1,5,8,9,7};
                int[] arr3 = new int[]{1,2,3,4};
       
                左边[]位置不同的方式,理解:
                int arr[] = new int[5];

        数组操作的常见问题:
                A:数组越界异常。你访问了不存在的索引。
                        ArrayIndexOutOfBoundsException
                       
                B:空指针异常。一个实例(对象)已经不存在了,你还去访问它的内容。
                        NullPointerException

5. 数组常见操作
        1) 遍历
                for (int x = 0; x < arr.length; x++)
                {
                        System.out.println(arr[x]);
                }
        2) 数组操作之获取最值
                思路:
                        1) 定义变量,记录每次比较后较大的值.
                        2) 遍历数组,拿到每个元素,与变量记录的值进行比较,如果发现遍历到的值更大,就把这个值赋给变量.
                        3) 遍历结束,变量就是记录的最大值.
               
                public static int getMax(int[] arr)
                {
                        int maxValue = arr[0];
                        for (int x = 1; x < arr.length; x++)
                        {
                                if (arr[x] > maxValue)
                                {
                                        maxValue = arr[x];
                                }
                        }
                        return maxValue;
                }
               
                补充:
                        1) 数组长度可以为0.
                                例如: int[] arr = new int[0]; // 这样定义是可以的.
                        2) 数组是引用数据类型,所以其默认值是null.
                       
                由此引出,上述查找最值的方法其实是存在问题的.(程序的健壮性)
                        1) 如果传递一个长度为0的数组进去,会在拿第一个值时,出现索引越界.
                        2) int[] arr = null; 将此数组传递进去,会出现空指针异常.
                此问题将来学习了异常处理机制可以解决.
               
                目前,如果想避免,请保证传递非空数组的参数.
                或者换一种思考问题的方式: 我不找数组的最值了, 我找数组最值的索引. 能找到索引了, 最值不就也找到了吗.
                那么此时对传递的非法参数,就可以返回-1来处理了.
                函数如下:
                        public static int getMaxIndex(int[] arr)
                        {
                                // 为了程序的健壮性, 先对参数进行判断
                                if (arr == null || arr.length == 0) // 如果数组为null 或者 数组长度为0
                                {
                                        // 返回-1
                                        return -1;
                                }
                                // 数组参数没问题,我再进行遍历查找
                                int maxIndex = 0; // 定义变量记录最大值的索引.
                                for (int x = 1; x < arr.length; x++)
                                {
                                        if (arr[x] > arr[maxIndex]) // 找到比记录的索引上的值更大的元素
                                        {
                                                // 将最大值索引记录成找到的
                                                maxIndex = x;
                                        }
                                }
                                // 遍历结束, maxIndex记录的就是最大的值的索引,返回该索引
                                return maxIndex;
                        }
                       
                        对于此函数的调用,就可以对结果进行判断,而且方法不再报出异常.
                       
               
        3) 基本查找
                思路:
                        1)变量数组,拿每一个元素与想找的值进行比较,一旦匹配,返回该值索引.
                        2)遍历结束,如果没有,返回-1.
       
6. 二维数组

        定义格式1: 数据类型[][] 变量名 = new 数据类型[n][m];
       
        定义格式2: 数据类型[][] 变量名 = new 数据类型[n][];
                                再对每一个一维数组进行初始化
                               
        定义格式3: 数据类型[][] 变量名 = { {1,2},{3,4,5} ,{6,7,8,9} ,{0} };

        遍历二维数组的思路:
                外循环遍历二维数组,得到每一个一维数组,内循环遍历一维数组.
        注意事项:
                数组的长度不要数.通过数组的length属性获取.
       
重点:
        1 函数的定义和调用掌握
        2 函数的概述,执行流程,结束条件等理解即可.
        3 函数的重载(面试题)
        4 数组概述,内存图解理解
        5 数组的定义和使用(遍历,求最值,普通查找) 掌握.
        6 二维数组所有理解即可.
               
               
               
               
               
作者: qiyongjian    时间: 2015-7-31 22:37
赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞
作者: ch18346846149    时间: 2015-7-31 23:02
顶一个,
作者: shero    时间: 2015-8-1 08:26
赞一个。。
作者: jiandandekuaile    时间: 2015-8-1 08:49
参观膜拜一下,哈哈




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