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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【南京校区】从0开始进入到Java面向对象的世界


面向过程、面对对象。
        面向过程:每一步都需要我们自己去完成。都需要我们自己去实现。
                         举例:
                                追女孩子
                                       
                                面向过程的思想去追一个女孩子。
                                        到大马路上去务色
                                        舔着脸去要微信号
                                        尬聊
                                        继续尬聊
                                        约出来吃饭
                                        约出来看电影
                                        约出来压马路
                                        ...
                                        成为了你的女朋友。

        面向对象:对象又是一个什么角色?
                        在我们需要完成一件事情的时候,我们不是立马就开始干。
                        而是先去找,谁可以干这件事情,谁可以干,那么我就让谁去干这件事情。
                        我不关心过程,只关心结果。
                        所以,面向对象中的对象,指的是:真正可以做事情的那个人。


                                面向对象的思想去追一个女孩子:
                                        "忽略过程,找谁可以做,那么就让谁去做。"
                                       
                                        思考:谁可以帮我追一个女孩子。
                                                        家里的七姑八大姨。

                                        你要不要关心七姑八大姨是如何帮你找一个女朋友的?
                                        不要关心,只要关心她给你找的这个结果就可以了。

                                        在这个过程中:谁是面向对象中的对象:七姑八大姨
                                       



        举例:
                我要对数组进行遍历。遍历的格式 : [1, 2, 3, 4, 5]
                int [] arr = {1,2,3,4,5};
                面向过程:
                        System.out.print("[");
                        for (int i = 0; i < arr.length ;  i++){
                                if(i == arr.length - 1){
                                        System.out.print(i);
                                }else{
                                        System.out.print(i + ", ");
                                }
                        }
                        System.out.println("]");
               
                简单来说:
                        其中的每一步都需要我们自己去完成。
                        包括:打印,遍历,判断是否为最后一个...

               
                面向对象:
                        我要找谁可以干这件事情,谁可以干,我就让谁去干,我忽略过程,只关心结果。
                        在Java中提供了很多能帮我们做事情的类,比如:Scanner 可以帮我们进行键盘录入。
                        比如Random可以帮我们计算随机数。Arrays可以帮我们操作数组。


                        我要找谁可以做遍历数组的事情呢?Arrays可以做
                        所以我现在就懒得去做了,让Arrays去做,我只关心遍历的结果,而忽略了遍历的过程。
                        String result = Arrays.toString(arr);//就是把一个数组变成一个字符串。
                        System.out.println(result);


        比如:
                Random

                面向过程的思想特点写随机数:就需要使用到数学中很复杂的计算方法。

                面向对象的思想特点写随机数:谁可以干这件事情。 Random可以干
                                                                        那么我们自己就懒的去做干,直接让Random去干,我们只要得到最终的结果就可以了。



现实生活中的一个 懒人思想。




1.类和对象
        在面向对象的过程中,什么是类?什么是对象?

        类:是对一类事物的描述。
        对象:才是这类事物的真正的具体的体现。


                以学生群体为例
               

                //这些东西不是真正的一个学生。
                //而是对学生这类群体的一个描述
                //所以在Java中。是以类的形式体现的。
                        姓名
                        年龄
                        身高
                        学历
                        学习情况
                        可以吃饭
                        可以睡觉
                        可以学习
                        可以玩游戏
                        ....

                //通过这类描述来创建的真正的一个学生,那么才是对象。
                        比如:
                                根据这个描述找到一个 张三同学。
                       


2.类的定义
        属性:是什么。有什么?
                       
                                姓名
                                年龄
                                身高
                                学历
                                学习情况
                        在代码中,属性是以成员变量的形式体现。

        行为:能干什么?
                        可以吃饭
                        可以睡觉
                        可以学习
                        可以玩游戏
                       
                        在代码中,行为是以成员方法的形式体现。
                               
3.单个对象内存图
                int [] arr = new int[3];
                Student s = new Student();

                new:只要是new出来的,一定是在堆里面开辟了一个新的小空间。

4.多个对象内存图

        多个对象之间,互相是不影响的。

5.多个对象指向相同空间内存图
        结论:
                当其中一个对象对小空间中的值发生了改变,
                那么其他所有的对象再次访问这个小空间时,就是修改后的结果。

       

6,成员变量和局部变量的区别
        编故事记忆法:
                小明家养了一条狗,这条狗是母狗,有一天,母狗怀孕了。
                小红去问小明:你家的狗生了吗?
                小明回答:"未生出"。

       
        未:
                位置
                        代码中的位置
                                局部变量:方法内/方法声明上。
                                成员变量:类中,方法外

                        内存中的位置
                                局部变量:栈
                                成员变量:堆

        生:
                生命周期(侧重于在内存中)
                                局部变量:方法被调用的时候出现。方法执行完毕就消失了。
                                成员变量: 随着对象的创建而存在,随着对象变成垃圾而消失。
                                                                                                                       

                作用范围(侧重于在代码中)
                                局部变量:只在方法中有效
                                成员变量: 在类中有效。
                               

        出:
                初始化值
                                局部变量:没有初始化值,如果没有赋值则不能使用。
                                成员变量: 有默认初始化值。整数 0 小数 0.0 引用 null                       


7.private关键字
        用来描述一类事物的类:Student类,Phone类,Teacher类.... 统称为 javabean类,实体类。
        用来创建的,带有main方法的类:测试类。


        a,private作用
                可以保证数据的安全性。
                一旦方法或者变量被private修饰,他只能在本类中被访问。


        b,格式
                直接写在变量或者方法的前面就可以了
               
                private String name;
                private void method(){...}


        c,好处
                保证数据的安全性。


        d,当private修饰变量时的完整格式:
                第一步:将变量使用private修饰
                第二步:针对于每一个私有化的成员变量,都要提供对应的get和set方法。



8.this关键字
        变量:就近原则
                当局部变量跟成员变量重名时,如果变量前面没有任何的前缀。会触发就近原则。
               
                就近原则的概念:
                        谁离我近,我就使用谁。
                        先到局部位置去找,如果能找到,就使用局部位置的。
                        如果找不到,就去本类的成员位置找,如果找到了就使用本类成员位置。
                        如果找不到就报错。
                       

        this关键字表示的是什么?
                        this关键字作用就是区分成员变量跟局部变量。
                        this.变量名//此时这个变量不会到本方法中找,而直接定位到本类的成员位置。



9,this的内存图
        this:谁来调用我,我就代表谁。
                那个对象来调用this所在的方法,那么此时this就代表这个对象的地址值。


10,封装
        面向对象三大特征之一。

        1.抽取方法。

        2.私有化成员变量。为了保证数据的安全性。


        简单理解:封装就是把一段代码或者成员变量,封起来,装起来。


11.构造方法
        格式:
                修饰符 类名(){
                        方法体;
                }
        案例:
                public Student(){
                        ...
                }

        注意点:
                1.构造方法没有返回值,连void都没有。
                2.构造方法不能使用对象直接调用。

                Student s = new Student();
                s.sleep();
                s.eat();
                s.Student();//错误的。不能直接调用。
       
        作用:
                就是在new对象的时候,给虚拟机调用的。

                Student s = new Student();//后面的小括号里面什么都没有,所以表示调用空参构造。

总结:
        在创建对象的时候,虚拟机会根据小括号中的内容去调用不同的构造方法。
        构造方法就是在创建对象的时候,由虚拟机调用的。
       


12.构造方法的注意事项:
        建议:
                1.空参构造
                2.带有全部参数的构造//全参构造


        Student s = new Student();
        s.setName("张三");
        s.setAge(23);


        Student s = new Student("张三",23);

使用规则:
        1.如果在创建对象的时候,知道了所有的属性值,那么建议使用第二种。
        2.如果在创建对象的时候,不知道所有的属性值,那么使用第一种,当知道了属性时,再set进去。




13.javabean类。
                标准javabean类的步骤:
                        1.类名。要见名知意
                        2.私有化成员变量。//保证数据的安全性
                        3.空参构造
                        4.全参构造
                        5.针对于每一个私有化的成员变量,都要提供其对应的get和set方法。
                        6.show


       
class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void show() {
        System.out.println(name + "---" + age);
    }
}


class Demo{
        public static void main(String [] args){
                Student s1 = new Student("张三1",21);
                Student s2 = new Student("张三2",22);
                Student s3 = new Student("张三3",23);
                Student s4 = new Student("张三4",24);
                Student s5 = new Student("张三5",25);
        }
}


疑问:
        1.空参构造此时就没用了?是的
                既然没有用,那么是不是可以不写?不是的
                        就算没有用,也必须要写。必须按照规则写。
                       
       
        2.set方法跟构造方法有什么区别?
                共同点:都可以给成员变量进行赋值。
                区别:set方法是已经有了对象时进行赋值(修改值)
                          构造方法"只能"在创建对象的时候进行赋值。


                          Student s = new Student();
                          s.setName("张三");//把张三赋值给name
                                                                //其实是把张三将默认初始化null给覆盖了。

        3.get方法跟show方法有什么区别?
                show方法只能展示。//我现在想要看一下对象里面的属性值时
                        Student s = new Student();
                        System.out.println(s);//打印的是地址值
       
                get方法可以展示,也可以获取单个属性值用作其他运算。

                //get方法和show方法的意义。
                Student s = new Student("zhangsan",23);
        s.show();

       //需求:
        //我要把学生的年龄加一岁
        int age = s.getAge();
        age = age + 1;
        s.setAge(age);

        s.show();





0 个回复

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