重学Java 10 面向对象

发布时间:2024年01月20日

正是风雨欲来的时候,火却越烧越旺了? ? ?

???????????? ?????????????????????????????——24.1.20

重点

1.为何使用面向对象思想编程

2.如何使用面向对象思想编程

3.何时使用面向对象思想编程

4.利用代码去描述世间万物的分类

5.在一个类中访问另外一个类中的成员 -> new对象

6.成员变量和局部变量的区别

一、面向对象的介绍

1.面向过程:自己的事情自己干,代表语言:C语言

? ? ? ??????????eg、洗衣服:每一步都自己干 -> 找个盆,加水,放洗衣粉,找搓衣板,开始洗衣

2.面向对象:自己的事情别人帮忙去做,代表语言:Java语言

? ? ? ? ? ? ? ? eg、洗衣服:自己的事情别人干 -> 全自动洗衣机

3.使用面向对象思想编程:方便快捷

? ? ? ? ? ? ? ? 很多功能都已经实现好了,只需要将其拿来使用即可,简化了我们自己的编写过程,减少了代码量

4.什么时候使用面向对象思想编程:

? ? ? ? ? ? ? ? 调用别人的功能时

? ? ? ? ? ? ? ? 在一个类中想使用别的类中的思想时,就使用面向对象思想编程

? ? ? ? ? ? ? ? 至于使用的代码功能细节,我们不关心,我们只需要知道如何使用即可

5.如何使用面向对象思想编程:

? ? ? ? ①new,new. -> 点代表的是调用

? ? ? ? ②特殊:如果调用的成员带static关键字,我们直接使用类名点即可

二、类和对象

2.1? 类(实体类)_class

1.测试类:带main方法的类,主要是运行代码的

2.实体类:是一类事物的抽象表示形式

? ? ? ? ? ? ? ? ?世间万物的分类:比如:犬类、人类、猫类、鼠标类

? ? ? ? 组成部分:

? ? ? ? ? ? ? ? 1.属性(成员变量):这一类事物有什么

? ? ? ? ? ? ? ? ? ? ? ? ①定义位置:类中方法外

????????????????????????②作用范围:作用于当前类

? ? ? ? ? ? ? ? ? ? ? ? ③定义格式:数据类型 变量名

? ? ? ? ? ? ? ? ? ? ? ? ④默认值:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 整数:0? ? ? ? 小数:0.0? ? ? ? 字符:'\U0000‘? ? ? ? 布尔:false? ? ? ? 引用:null

? ? ? ? ? ? ? ? 2.行为(成员方法):这一类的事物能干嘛

? ? ? ? ? ? ? ? ? ? ? ? 只需要将方法中所学的static干掉,其他的都一样

只需要将某个分类的属性和行为描述出来,就可以描述这个类

案例

人类

public class Demo65Object02Person {
    //属性 -> 成员变量
    String name;
    int age;

    //行为 -> 成员方法
    public void eat(){
        System.out.println("人要吃饭");
    }

    public void drink(){
        System.out.println("人要喝水");
    }
}

动物类

public class Demo66Object03Animal {
    String kind;//品种
    String color;//颜色

    public void eat(){
        System.out.println("动物要吃东西");
    }

    public void sleep(){
        System.out.println("动物要睡觉");
    }

小明类

public class Demo67Object04Phone {
    //属性
    String brand;
    String color;
    int price;

    //行为
    public void call(String name){
        System.out.println("给"+name+"打电话");
    }

    public String message(){
        return "给小明发短信";
    }

2.2 对象

1.概述:一类事物的具体体现

2.使用:

? ? ? ? ①导包

? ? ? ? ? ? ? ? 如果两个类在同一个包下,想要使用对方的成员不需要导包

? ? ? ? ? ? ? ? 如果两个类不在同一个包下,想要使用对方的成员需要导包

? ? ? ? ? ? ? ? 特殊包:java.lang -> 使用lang包下的类,不需要导包 -> String

? ? ? ? ? ? ? ? 注:在学习四种权限修饰符前,尽量让两个类在同一个包下

? ? ? ? ②创建对象:想要使用哪个类中的成员,就new哪个类的对象

? ? ? ? ? ? ? ? 类名 对象名 = new 类名() -> 如:Person person = new Person();

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Animal animal = new Animal();

? ? ? ? ③调用成员(成员变量、成员方法) -> 想要使用哪个类中的成员,便用哪个类的对象去点哪个成员

? ? ? ? ? ? ? ? 对象名.成员变量名 = 值

? ? ? ? ? ? ? ? 对象名.方法名() -> 调用的是无参无返回值的方法

? ? ? ? ? ? ? ? 对象名.方法名(实参)-> 调用的是无参有返回值的方法

? ? ? ? ? ? ? ? 数据类型 变量名 = 对象名.方法名() -> 调用的是无参有返回值的方法

????????????????数据类型 变量名 = 对象名.方法名(实参) -> 调用的是有参有返回值的方法

示例

public class Demo65Object02Person {
    //属性 -> 成员变量
    String name;
    int age;

    //行为 -> 成员方法
    public void eat(){
        System.out.println("人要吃饭");
    }

    public void drink(){
        System.out.println("人要喝水");
    }
}

public class Demo66Object03Animal {
    String kind;//品种
    String color;//颜色

    public void eat(){
        System.out.println("动物要吃东西");
    }

    public void sleep(){
        System.out.println("动物要睡觉");
    }
}

public class Demo67Object04Phone {
    //属性
    String brand;
    String color;
    int price;

    //行为
    public void call(String name){
        System.out.println("给"+name+"打电话");
    }

    public String message(){
        return "给小明发短信";
    }
}

    public static void main(String[] args) {
        Demo65Object02Person p = new Demo65Object02Person();
        p.age = 21;
        p.name = "小明";
        p.drink();
        p.eat();
        System.out.println(p.age);
        System.out.println(p.name);
        System.out.println("—————————————————————————————————————————————");

        Demo66Object03Animal a = new Demo66Object03Animal();
        a.color = "白色";
        a.kind = "金毛巡回犬";
        a.sleep();
        a.eat();
        System.out.println(a.color);
        System.out.println(a.kind);
        System.out.println("————————————————————————————————————————————");

        Demo67Object04Phone ph = new Demo67Object04Phone();
        ph.brand = "oppo findx3pro";
        ph.color = "white";
        ph.price = 5799;
        ph.message();
        ph.call("张三");
        System.out.println(ph.brand);
        System.out.println(ph.color);
        System.out.println(ph.price);
        ph.call("小明");
        ph.message();
    }

练习

用代码描述一个手机类,在测试类中为手机类中的属性赋值,并且调用手机类中的功能

public class Demo67Object04Phone {
    //属性
    String brand;
    String color;
    int price;

    //行为
    public void call(String name){
        System.out.println("给"+name+"打电话");
    }

    public String message(){
        return "给小明发短信";
    }
}
    

public static void main(String[] args) {
    Demo67Object04Phone phone = new Demo67Object04Phone();//手机类类名
    phone.brand = "OPPO Findx3Pro";
    phone.price = 5599;
    phone.color = "白色";
    System.out.println(phone.brand);
    System.out.println(phone.price);
    System.out.println(phone.color);
    phone.call("小明");
    phone.message();
}

2.3.匿名对象的使用

1.int i = 10;

? ? ? ? ①int:是数据的类型

? ? ? ? ②i:变量名

? ? ? ? ③等号右边的10:真正的数据

2.Person p = new Person()

? ? ? ? ①等号左边的Person:对象的类型,好比是int

? ? ? ? ②p:对象名

? ? ? ? ③等号右边的new Person:真正的数据,是一个Person对象,将这个对象真正创建出来了

1.所谓的匿名对象,其实就是没有等号左边的部分,只有等号右边的部分(对象)

2.使用:

? ? ? ? new 对象().成员

3.注意:

? ? ? ? ①如果只想单纯的调用一个方法,让方法执行,我们可以考虑匿名对象

? ? ? ? ②但是如果涉及到赋值,千万不要使用匿名对象

示例

public class Demo65Object02Person {
    //属性 -> 成员变量
    String name;
    int age;

    //行为 -> 成员方法
    public void eat(){
        System.out.println("人要吃饭");
    }

    public void drink(){
        System.out.println("人要喝水");
    }
}


public class Demo70Object07PersonNoName {
    public static void main(String[] args) {
        //原始方式
        Demo65Object02Person p = new Demo65Object02Person();
        p.name = "小明";
        System.out.println(p.name);
        p.eat();

        System.out.println();

        //匿名对象方式
        new Demo65Object02Person().eat();
    }
}

        //匿名对象方式:
        new Demo65Object02Person().eat();
        new Demo65Object02Person().name = "小红";
        System.out.println(new Demo65Object02Person().name);    //null
        //无法输出

涉及到赋值,千万不要使用匿名对象

三、对象的内存解析

1.一个对象的内存图

2.两个对象的内存图

phone1和phone2都是新new出来的对象,所以在堆内存中开辟了两个不同的空间,修改自己空间中的数据不会影响其他空间中的数据

3.两个对象指向同一个空间的内存图

? ??

phone2是phone1给的,phone1在内存中保存的是地址值,所以此时phone2和phone1的地址值一样,操作同一片空间中的数据,所以修改一个对象的数据会影响另一个对象

四、成员变量和局部变量的区别

1.定义位置不同*

? ? ? ? 成员变量:类中方法外

? ? ? ? 局部变量:方法之中或者参数位置

2.初始化值不同*

? ? ? ? 成员变量:有默认值,不用手动赋值,可以直接使用

? ? ? ? 局部变量:没有默认值,必须手动先赋值,才能使用

3.作用范围不同*

? ? ? ? 成员变量:作用于整个类

? ? ? ? 局部变量:只作用于自己所在的方法,其他方法用不了

4.内存位置不同

? ? ? ? 成员变量:在堆中,跟着对象走

? ? ? ? 局部变量:在栈中,跟着方法走

5.生命周期不同

? ? ? ? 成员变量:随着对象的产生而产生,随着对象的消失而消失

? ? ? ? 局部变量:随着方法的调用而产生,随着方法的调用完毕而消失

五、练习

定义一个类MyDate,属性有year、month、day

? ? ? ? 在定义一个Citizen(公民类),属性有name(String类型),birthday(MyDate类型),idcard(string类型),为这三个属性赋值,然后将值取出

自定义生日类型

//自定义生日类型
public class Demo71Object08MyDate {
    int year;
    int month;
    int day;
}


自定义公民类?

//自定义公民类
public class Demo72Object09Citizen {
    //姓名
    String name;        //默认值null
    // 生日 Mydate类型
    // Mydate属于自定义类型(引用数据类型)
    // 这种类型要操作之前,必须要赋值
    // 这种自定义对象,需要new对象赋值
    Demo71Object08MyDate birthday;      //默认值null
    //身份证
    String idcard;      //默认值null
}

主函数

    public static void main(String[] args) {
        Demo72Object09Citizen citizen = new Demo72Object09Citizen();
        citizen.name = "张三";
        citizen.idcard = "04214047";
        citizen.birthday = new Demo71Object08MyDate();

        /*Stringbuilder
            citizen.birthday获取的是Mydate对象
            再去点year获取的是Mydate对象中的year
            链式调用
         */
        citizen.birthday.year = 2002;
        citizen.birthday.month = 11;
        citizen.birthday.day = 4;

        System.out.println(citizen.name + "," + citizen.birthday.year + "年"
                 + citizen.birthday.month + "月" + citizen.birthday.day + "日 " + "学号:" + citizen.idcard);
    }

?

运行结果

给自定义的类型(引用数据类型)赋值,需要new对象(String比较特殊,可以直接=赋值)

六、总结

文章来源:https://blog.csdn.net/m0_73983707/article/details/135676515
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。