Java类和对象

目录

面向对象和面向过程

类的定义:

对象

什么是对象

 对象的创建

对象的初始化

构造方法初始化

this引用


小伙伴们好鸭,我又来了!这次给大家带来的是类和对象,希望对大家有所帮助。


在讲什么是类和对象之前,首先先给各位小萌新打个预防针。类和对象这部分的内容比较抽象难懂,看不懂很正常,但是不要因为看不懂这部分内容就停止继续往前学习,一直停留在这个部分。因为只有一直往前学习,才能在后面的内容中感受到真正的面向对象是什么意思。

面向对象和面向过程

在具体讲面向对象和面向过程之前,首先要知道的是面向对象和面向过程是两个不同解决问题的思想,而不是具体解决问题的方法。而我们是在这两种思想的指导下对代码进行组织。

面向过程:注重执行过程,将事件的实现分成多个步骤,一个个执行。

面向对象:隐藏事件的执行步骤,关注在这个过程中执行事件的对象。在面向对象中,我们不需要像面向过程一样关注具体细节,我们只需要关注各个对象之间的交互。

例子:洗衣服

面向过程:

  1. 收拾脏衣服
  2. 将脏衣服放到盆子里
  3. 放水
  4. 放洗衣液
  5. 搓衣服
  6. 洗去泡沫
  7. 换水
  8. 搓衣服
  9. 拧干
  10. 晾晒

面向对象:

在洗衣服事件中涉及到的对象有:

  • 洗衣机 
  • 洗衣服的人 
  • 洗衣粉 
  • 衣服

洗衣服的人只需要把衣服和洗衣粉放到洗衣机就好,我们隐藏了执行步骤3456789,将这些步骤放在对象中,让对象去执行这些隐藏步骤就好,我们不care。

以面向对象方式来进行洗衣服,就不关注洗衣服的过程,具体洗衣机是怎么来洗衣服,如何来甩干的,洗衣服的人不用去关心,只需要将衣服放进洗衣机,倒入洗衣粉,启动开关即可,通过对象之间的交互来完成的。

注意:面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。

在Java中,一切皆对象,但是在有对象之前,还需要先认识什么是类?

类:类是用来描述对象的,主要描述该对象具有哪些属性(外观尺寸),哪些功能(用来干啥),描述完成后计算机就可以识别了。

类的定义:

class 类名 {

        属性/成员变量;

        功能/成员方法;

}

成员变量:定义在类里面,方法外面的变量,也就是类中包含的属性。成员变量也称作成员属性。用来描述这个类的属性。

成员方法:定义在类里面的方法,用来实现这个类的功能。

class WashMachine {
    public String brand;//品牌
    public int size;//尺寸
    public String color;//颜色

    //洗衣服功能
    public void washing() {
        System.out.println("洗衣服");
    }

    //甩干功能
    public void spining() {
        System.out.println("甩干");
    }

    //烘干功能
    public void drying() {
        System.out.println("烘干");
    }

}

注意:

  • 类名的定义需要采用大驼峰命名规则(即首字母大写)。
  •  一般一个java文件当中只定义一个类。
  • main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
  •  public修饰的类必须要和文件名相同,不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改。
  • 在类和对象中,重要是关注谁可以成为一个类。

修改public修饰的类的名称的执行步骤:

对象

什么是对象

对象:是对类的实例化。如果将类看成一张建筑图纸,那么对象就是在这个建筑图纸的指导

下建造出来的房子。

 对象的创建

实例化:用类类型创建对象的过程,称为类的实例化。实例化就是创建对象。在java中采用new关键字,配合类名来实例化对象。代码如下:

    public static void main(String[] args) {
        //实例化一个洗衣机对象
        WashMachine washMachine = new WashMachine();
    }

对象的初始化

初始化:对对象的成员变量进行初始化(赋初始值)。

对象的初始化方式有以下三种:

  1. 默认初始化:即用户不对成员变量初始化,由编译器自动帮成员变量初始化。
  2. 原地初始化:在定义成员变量的同时进行初始化。
  3. 构造方法初始化:由构造方法初始化。(后面细讲)
class WashMachine {
    public String brand = "美的";//就地初始化
    public int size;//  默认初始化
    public String color;// 默认初始化

    //洗衣服功能
    public void washing() {
        System.out.println("洗衣服");
    }

}

构造方法初始化

this引用

在认识构造方法之前,各位小伙伴们还有一个知识点要先了解,那就是我们的this引用。

this:对对象的引用。在Java语法中,当我们在定义类的成员方法时,参数列表自动帮助我们隐式定义this形参,以便我们更好的访问对象的成员。

 上面的两个washing()方法,按照我们之前学过的知识来说,这两个方法的参数列表不一样,满足了重载的条件,不应该报错,但是在下面的报错提示中却提示我们这两个方法已经被定义过了,那么,真相只有一个,就是这两个方法的参数列表相同,即在第一个方法当中,编译器自动帮助我们隐式定义了WashMachine这个参数。

this引用的三个用处

  • this引用访问成员变量-->this.data

在类的方法中,当类的参数名和类的成员变量名相同时,编译器不能区分谁是形参,谁是成员变量。此时编译器采取局部变量优先,让局部变量自己给自己赋值,所以成员变量并没有被修改。所以此时需要this引用,this引用指向调用该方法的对象,所以可以通过this对成员变量进行赋值

//形参名和成员变量名一致    
public WashMachine(String brand, int size, String color) {
        brand = brand;
        size = size;
        color = color;
        //等号前后两个变量都是形参
    }

//形参名和成员变量名不一致 
   public WashMachine(String brand1, int size1, String color1) {
        brand = brand1;
        size = size1;
        color = color1;
        //等号前是成员变量,等号后是形参
    }

//利用this引用对成员变量赋值
    public WashMachine(String brand, int size, String color) {
        this.brand = brand;
        this.size = size;
        this.color = color;
        //等号前是成员变量,等号后是形参
    
    }
  • this引用访问成员方法:利用this调用类的方法,也可以直接调用。-->this.func()
  • this引用访问构造方法:在构造方法内部利用this调用构造方法。-->this()(后面细讲)

构造方法:定义在类的内部,用于初始化成员变量的方法,构造方法名和类名一致。注意,如果用户没有定义构造方法,那么编译器会默认帮助我们隐式定义一个不带参数的构造方法。

 构造方法调用:在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。

在上面的洗衣机类中,我们并没有找到一个和类名一样的方法,此时,编译器会默认帮助我们定义以下方法:

class WashMachine {
    public String brand = "美的";//就地初始化
    public int size;//  默认初始化
    public String color;// 默认初始化

    //洗衣服功能
    public void washing() {
        System.out.println("洗衣服");
    }
}

class WashMachine {
    public String brand = "美的";//就地初始化
    public int size;//  默认初始化
    public String color;// 默认初始化

    //洗衣服功能
    public void washing() {
        System.out.println("洗衣服");
    }

    public WashMachine() {
        //该方法即使用户没定义,编译器也会帮助用户定义
        //所以这个代码和上面没有构造方法的代码是一致的
    }
}

public class Test {
    public static void main(String[] args) {
        WashMachine washMachine = new WashMachine();//创建对象的同时调用构造方法
    }
}

构造方法重载:修改构造方法的参数列表。(参数的个数,顺序,类型)

    public WashMachine() {
        System.out.println("没有参数的构造方法");
    }

    public WashMachine(String brand, int size, String color) {
        this.brand = brand;
        this.size = size;
        this.color = color;
        System.out.println("三个参数的构造方法");
    }

    public WashMachine(String brand, int size) {
        this.brand = brand;
        this.size = size;
        System.out.println("两个参数的构造方法");
    }

    public WashMachine(String brand) {
        this.brand = brand;
        System.out.println("一个参数的构造方法");
    }

构造方法注意事项

  • 方法名和类名保持一致
  • 如果用户没有定义,则由编译器帮助用户隐式定义一个没有参数的构造方法
  • 如果用户自己定义了,则编译器不会帮助用户定义

  • 构造方法默认没有返回值,默认不加void
  • 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次
  • 构造方法可以调用构造方法。只有在构造方法内部才能调用构造方法,普通方法不能调用构造方法,而且this()必须放在构造方法第一行。

 


今日份分享就到这里啦,如果各位小伙伴有什么疑问的话可以在评论区或者私聊提问哦❤

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值