【Java|基础篇】类和对象

1. 前言

本篇文章主要讲解了下面三个问题

  • 类的定义和实例化
  • 构造方法
  • this关键字

2. 什么是面向对象

众所周知面向过程和面向对象是两种重要的编程思想,而Java是属于面向对象一类的语言.面向对象(Object Oriented Programming,简称 “oop”).
面向对象有三大特性:封装 继承和多态.这些内容后面会详细介绍.
在面向对象的世界里,一切皆为对象。对象就是问题中面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情.,因此在Java中,我们是对一个一个的对象进行的操作.通过实例化对象,调用对象的方法实现相应的功能.面向对象中,我们不必关注对象是如何实现相应的功能的.

例如有一个空调,空调可以进行室内温度的调节(制热或制冷),除湿等功能.这里空调就是一个对象,我们只需要调用空调的制热制冷等功能,就可以实现我们想要的结果.

3. 类的定义

类是用来对一个实体(对象)来进行描述的.类的定义要使用class关键字

// 语法格式为:
class 类名{
    
    
	// 成员变量
	// 成员方法
}

与上述的空调为例,我们要通过定义空调类来描述空调这个对象.空调有颜色,尺寸和型号等信息,空调有制冷制热等功能.
定义空调这个类:

class AirConditioner{
    
    
	// 成员变量
    String colour; // 颜色
    double size; // 尺寸
    String model; // 型号
	// 成员方法
    void heating(){
    
    
        System.out.println("开启制热功能");
    }
    void refrigeration(){
    
    
        System.out.println("开启制冷功能");
    }
}

定义类时,类的成员变量和成员方法可以根据需求进行定义. 下面讲解中的类皆是上述的这个空调类

4. 类的实例化

定义类对象之后,我们要如何使用类呢? 这就需要去进行类的实例化.定义类就相当于在计算机中定义了一种新的类型.用类类型创建对象的过程,称为类的实例化.使用new关键字进行类的实例化

// 语法
类名 对象名 = new 类名();

例如

    public static void main(String[] args) {
    
    
    	// 类名 对象名 = new 类名(); 
        AirConditioner airConditioner = new AirConditioner();
    }

实例化好类对象之后,我们可以通过 实例化对象的对象名加.的方式进行类的成员变量和成员方法的访问.

扫描二维码关注公众号,回复: 15131690 查看本文章
    public static void main(String[] args) {
    
    
        AirConditioner airConditioner = new AirConditioner();
        System.out.println("颜色: "+ airConditioner.colour);
        System.out.println("尺寸: "+ airConditioner.size);
        System.out.println("型号: "+ airConditioner.model);
        airConditioner.heating();
        airConditioner.refrigeration();
    }
    // 输出结果:
    // 颜色: null
	// 尺寸: 0.0
	// 型号: null
	// 开启制热功能
	// 开启制冷功能

这里需要注意在main方法中,如果定义了变量,而不进行初始化,就使用时是会报错的.
例如:
在这里插入图片描述
在这里插入图片描述
但是类中的成员变量则不会出现这个问题,类中的成员变量是有默认值的.
基本数据类型:

数据类型 默认值
int 0
short 0
long 0
byte 0
float 0.0f
double 0.0
char /u0000
boolean false

注:引用数据类型的默认值为null.

既然可以通过实例对象的对象名+.的方式访问对象的成员变量,就可以通过这种方式来初始化对象的成员变量.
例如:

    public static void main(String[] args) {
    
    
        AirConditioner airConditioner = new AirConditioner();
        airConditioner.colour = "白色";
        System.out.println("颜色: "+ airConditioner.colour);
    }
    // 输出结果:
    // 颜色: 白色

类可以理解为是一个"模型". 同一个类可以创建多个实例对象
例如:

    public static void main(String[] args) {
    
    
        AirConditioner airConditioner1 = new AirConditioner();
        AirConditioner airConditioner2 = new AirConditioner();
        AirConditioner airConditioner3 = new AirConditioner();
    }

5. 对象的构造及初始化

上面谈到我们可以通过实例对象的对象名+.的方式进行成员变量的初始化,但是如果类很多,实例的对象也很多,那么这个时候使用这种方式进行成员变量的初始化就会很麻烦. 因此Java给我们提供了一个叫做 "构造方法" 这样的方法帮我们对成员变量进行的初始化

构造方法: 也称为构造器,是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且
在整个对象的生命周期内只调用一次

构造方法:

  • 名字与类名相同,没有返回值类型,设置为void也不行
  • 一般情况下使用public修饰
    在创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次

在这里插入图片描述
上述就是默认的,无参的构造方法. 也是在没有构造方法时,编译器自动调用的构造方法
当我在构造方法中添加一个输出语句时:
在这里插入图片描述
可以看到,我并没有去调用构造方法,却还是输出了构造方法中的语句. 这也验证了构造方法会在实例化对象时自动调用. 因此我们可以传入参数让构造方法帮我们进行成员变量的初始化.

    public AirConditioner() {
    
    
        System.out.println("执行了 无参 的构造方法");
    }

    public AirConditioner(String a) {
    
    
        colour = a;
        System.out.println("执行了 一个参数 的构造方法");
    }

    public AirConditioner(String a, double b, String c) {
    
    
        colour = a;
        size = b;
        model = c;
        System.out.println("执行了 三个参数 的构造方法");
    }

在这里插入图片描述
在讲方法时,说到过"重载"这个概念.
方法的重载有三个注意的地方: 1. 方法的重载与返回值无关 2. 参数列表不能相同(形参的个数 顺序 类型等) 3.方法名必须相同
构造方法也是可以重载的.上述三个构造方法就构成了方法的重载.

使用构造方法,我们就可以对成员变量进行初始化了. 根据我们传入实参的数量,会自动调用对应参数的构造方法.
在这里插入图片描述

我们来打印一下这些类中的成员变量的内容.在IDEA中可以右键 选择Generate
在这里插入图片描述
选择这里的toString()
在这里插入图片描述
IDEA就会给我们生成好一个这样的方法.
在这里插入图片描述

接下来我们来打印实例好的实例对象
在这里插入图片描述

6. this引用

上述代码中,其实有一个问题,就是构造方法中的形参变量名是随便写的. 如果要初始化的成员变量非常多,且又不是按照顺序写的(doge) 是不是看着就很头疼.
在这里插入图片描述
这个时候可能有些聪明的同学就会说,把形参的名字设置成与成员变量相同不就可以了. 接下来我们来试试

    public AirConditioner(String colour, double size, String model) {
    
    
        colour = colour;
        size = size;
        model = model;
        System.out.println("执行了 三个参数 的构造方法");
    }

在这里插入图片描述
可以看到虽然是调用了构造方法,但是并没有进行初始化.
这个主要的原因就是在构造方法中,编译器并不知道谁给谁赋值?成员变量给成员变量?参数给参数?参数给成员变量?成员变量参数?
在这里插入图片描述
为了解决这个问题,Java可以给我们提供了一个"this"这样的关键字

this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该
引用去访问

对上述代码进行修改
在这里插入图片描述
在这里插入图片描述
此时就可以正确进行初始化完成了.
使用this之后就是告诉了编译器前面的是当前类的成员变量,而后面的是形参.

关于构造方法,也可以使用IDEA帮助我们自动生成. 与toString相同
在这里插入图片描述
在这里插入图片描述
可以选择想要初始化的成员变量进行对应构造方法的生成. 选择多个成员变量可以按住CTRL 进行选择.

this的特性

    1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
    1. this只能在"成员方法"中使用
    1. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象

补充: 在类中也可以进行初始化

class AirConditioner{
    
    
    String colour = "白色"; // 颜色
    double size; // 尺寸
    String model; // 型号

    public AirConditioner() {
    
    
        System.out.println("执行了 无参 的构造方法");
    }
}

在这里插入图片描述
这种初始化的方法通常会搭配 "final"关键字进行使用,后面会详细的介绍

7. 总结

文章到这里就结束了.文章的内容虽然不难,但是需要注意的地方还是特别多的.类和对象是学习Java中最基础的,务必要掌握

感谢你的观看!希望这篇文章能帮到你!
《Java专栏》在不断更新中,欢迎订阅!
“愿与君共勉,携手共进!”
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_63463510/article/details/129199159
今日推荐