黑马程序员技术交流社区

标题: 函数数组总结笔记 [打印本页]

作者: 含笑    时间: 2015-6-28 09:10
标题: 函数数组总结笔记
1. 回顾
        1)函数(方法)
                定义函数的格式以及调用方式:
               
                        权限修饰符 返回值类型 函数名(参数列表)
                        {
                                // 方法体(执行语句);
                                // return 语句;
                        }
                       
                        如果有返回值
                                -- 赋值调用, 输出调用
                                -- 可以单独调用,但一般没有意义.
                        如果没有返回值
                                -- 只能单独调用
       
       
        2)数组
                定义:存储多个同一种类型的元素的集合(容器)
                特点:
                        1) 长度固定
                        2) 可以存储基本数据类型,也可以存储引用数据类型.
                        3) 只能存储同一种数据类型
                定义格式:
                        int[] arr1 = new int[10];
                        int[] arr2 = new int[]{10,20,30};
                        int[] arr3 = {40,50,60};
                       
                三个功能:
                        int[] arr = {5, 26, 15, 47, 13, 39};
                       
                        遍历
                                for(int x = 0; x < arr.length; x++){
                                        int everyElement = arr[x];
                                }
                       
                        找最值
                                思路:
                                        1)定义变量,记录一个最值,默认选取了第一个
                                        2)然后遍历数组,拿数组中的每一个元素与记录的值比较,如果发现遍历到的比记录的值大,记录的值就改变成遍历到的这个值.
                                        3)遍历完成,记录的就是最大的那个值了,将这个值返回即可.
                                        注意:
                                                能确定下面两个问题吗?
                                                        能确定传递进来的数组不是null吗?
                                                        能确定传递进来的数组不是空数组吗?
                                               
                                                所以为了程序的健壮性,要先判断. 因为方法有int类型返回值,目前我们不好处理.等学完异常处理,就好办了.
                                                但我们目前可采取下面的解决方案:
                                        解决方案:
                                                我们不找最值了,我们找最值出现的索引. 那么如果这个索引是5,那么最值不就是arr[5] 吗.
                                                这时,我们可以先做判断了, 并且把null和空数组的情况返回 -1 来处理.
                                                public static int getMaxIndex(int[] arr){
                                                        if(arr == null || arr.length == 0){
                                                                return -1;
                                                        }
                                                        else
                                                        {
                                                                // 再做正常的找最值的代码
                                                        }
                                                }
                       
                        找指定值的索引:
                                遍历数组,依次拿遍历到的元素与指定值进行比较  一旦匹配,返回指定值的索引. 如果遍历完,没有,返回-1
                       
2. 参数传递问题
        Java中参数传递问题:
                基本类型:形式参数的改变对实际参数没有影响。
                引用类型:形式参数的改变直接影响实际参数。
                -- 但是字符串特殊.

        Java中只有值传递,引用类型传递的是地址值。

3. 面向对象思想
       
        面向过程:面向过程是以函数为基础,完成各种操作。
        C语言

        面向过程:面向过程是以函数为基础,完成各种操作。强调的是过程。
        面向对象:面向对象是以对象为基础,完成各种操作。强调的是对象,结果。
        面向对象是基于面向过程的。
       
4. 面向对象思想特点
       
        面向对象的思想特点:
                1:是一种更符合人们思考习惯的思想
                2:可以将复杂的事情简单化
                3:将程序员从执行者转换成了指挥者

        以后做任何事情:
                找对象。让这个对象做事情。去哪找?向JDK(JVM)要,因为JDK集成了大量的对象,马上就要学了。
                如果你用到了JDK没有提供的对象的时候怎么办?自己造对象,然后用。用完了还可以给别人用。
5.
        什么是符合面向对象的思想
                1) 分析系统有哪些对象 -- 名词提取法
                2) 明确各个对象可以做什么
                3) 明确各个对象之间的关系.
6. 类与对象的关系
       
               
        类:Java中最基本的单位。是属性和行为的集合。是一个抽象的概念。
        对象:就是类的具体的存在,体现。

        java中描述事物通过类的形式体现,类是具体事物的抽象,概念上的定义。比方说人,是整个概念.
        对象就是事物的具体实实在在的个体,比方说魏忠贤.
       
7. 定义学生类
        class Student
        {
                String name;
                int age;
               
                public void sleep()
                {
                        System.out.println("学生睡觉");
                }
               
                public void eat()
                {
                        System.out.println("学生吃饭");
                }
        }
       
        // 使用
        1) 创建对象
                Student stu = new Student();
               
        2) 使用成员变量
                stu.name = "刘亦菲";
                System.out.println(stu.name);
        3) 使用成员方法
                stu.sleep();
                       
        练习:
                手机类: Phone
                属性:品牌(brand)、价格(price)、颜色(color)
                行为:打电话(call)、发短信(sendMessage)、玩游戏(playGame)
8. 关于敲代码的重要提醒
        在入门阶段就开始养成良好的编码习惯.
        去看刘意老师代码的格式,照着来.

9. 什么时候定义成员变量
        事物的属性是事物的一部分,这个属性对应的变量才能被定义为成员变量。在java中,成员变量其实就是这个类的属性。
        其他情况,都应该将变量定义成局部变量。
        当然,你如果不按照这个标准做也没有太大问题,只是不符合面向对象的思想特点。
       
10. 局部变量和成员变量
       
        成员变量和局部变量的区别?
                A:定义位置区别
                        成员变量        在类中,方法外
                        局部变量        在方法中,或者方法的形式参数
                B:初始化值的区别
                        成员变量        有默认初始化值
                        局部变量        没有默认初始化值,想先定义,赋值,才能使用
                C:存储位置区别
                        成员变量        存储在堆中,随着对象的存在而存在,随着对象的消失而消失。
                        局部变量        存储在栈中,随着方法的调用而存在,随着方法调用完毕而消失。

        在使用变量的时候:
                首先在局部范围找,有就使用。
                接着在成员方法找,有就使用。
                如果在成员位置没有,就报错。

                使用过程中,遵循一个原则:就近原则。






       
11. 匿名对象

        概念:没有名字的对象就是匿名对象,除了没有名字之外,其他的与之前学习的对象一模一样。
        特点:匿名对象,就想帮助你的陌生人一样,帮你一次以后你就再也找不到他人了。

        应用场景:
                1:当对对象方法仅进行一次调用的时
                2:匿名对象可以作为实际参数进行传递

        分析:
        Student s = new Student(); // 创建对象,并且起了个名字叫s
        s.show(); // 用对象调用方法
       
        // 匿名对象写法 -- new Student()就是一个对象了, 是对象, 就可以调用这个对象具有的方法.
        new Student().show();
       
        // 作为实际参数传递
        // 举例: 我定义了一个方法接收一个学生类型的参数
        public void hello(Student s){
                s.show();
        }
               
        // 普通方式 调用
        // Student stu = new Student(); // 先创建学生对象, 然后将学生对象传递进方法
        // hello(stu);
       
        // 使用匿名对象的方式传递
        hello(new Student());               
                       
                       
12.
        重点:
                1)
                面向对象的思想理解
                面向对象的思想特点
                怎样分析问题符合面向对象的思想
               
                以上理解性的东西认真的读几遍,换成自己的话能解释出来.
               
                2)
                一个学生类的定义以及测试使用,必须能敲出来.
                它的内存图,能理解.最好能自己动手画一画.
               
                3)
                成员变量和局部变量的定义 以及 区别. 要能理解并且能正确使用.
               
                4)
                匿名内部类,暂时先理解,看到别人使用了能看懂.以后代码敲多了大家自然就会用了.
                       
                       
                       
                       
                       
                       
               
               
               
               
               
作者: 小路8866    时间: 2015-6-28 13:32
不错不错,支持了
作者: 不完整的旋律    时间: 2015-6-28 15:32
可惜是java.我们学的ios
作者: XXXK    时间: 2015-6-28 15:39
写得不错啊
作者: 形而上孤独    时间: 2015-6-28 18:00
总结的还是挺全的
作者: 0618-蔺飞飞    时间: 2015-6-28 21:15
这么多黑马币,眼馋
作者: 北游    时间: 2015-6-28 22:12
加油,努力。




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