【Java|基础篇】类和对象

简介: 本篇文章主要讲解了下面三个问题类的定义和实例化构造方法this关键字

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();
    }

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

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方法中,如果定义了变量,而不进行初始化,就使用时是会报错的.

例如:

image.png

image.png

但是类中的成员变量则不会出现这个问题,类中的成员变量是有默认值的.

基本数据类型:


数据类型 默认值

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给我们提供了一个叫做 "构造方法" 这样的方法帮我们对成员变量进行的初始化


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

在整个对象的生命周期内只调用一次。

image.png

构造方法:


名字与类名相同,没有返回值类型,设置为void也不行

一般情况下使用public修饰

在创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次


上述就是默认的,无参的构造方法. 也是在没有构造方法时,编译器自动调用的构造方法

当我在构造方法中添加一个输出语句时:

image.png

可以看到,我并没有去调用构造方法,却还是输出了构造方法中的语句. 这也验证了构造方法会在实例化对象时自动调用. 因此我们可以传入参数让构造方法帮我们进行成员变量的初始化.


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("执行了 三个参数 的构造方法");
    }

image.png

在讲方法时,说到过"重载"这个概念.

方法的重载有三个注意的地方: 1. 方法的重载与返回值无关 2. 参数列表不能相同(形参的个数 顺序 类型等) 3.方法名必须相同

构造方法也是可以重载的.上述三个构造方法就构成了方法的重载.


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


image.png

我们来打印一下这些类中的成员变量的内容.在IDEA中可以右键 选择Generate

image.png

选择这里的toString()

image.png

IDEA就会给我们生成好一个这样的方法.

image.png


接下来我们来打印实例好的实例对象

image.png


6. this引用

上述代码中,其实有一个问题,就是构造方法中的形参变量名是随便写的. 如果要初始化的成员变量非常多,且又不是按照顺序写的(doge) 是不是看着就很头疼.

image.png

这个时候可能有些聪明的同学就会说,把形参的名字设置成与成员变量相同不就可以了. 接下来我们来试试


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


image.png

可以看到虽然是调用了构造方法,但是并没有进行初始化.

这个主要的原因就是在构造方法中,编译器并不知道谁给谁赋值?成员变量给成员变量?参数给参数?参数给成员变量?成员变量参数?

image.png

为了解决这个问题,Java可以给我们提供了一个"this"这样的关键字


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

引用去访问


对上述代码进行修改

image.png

image.png

此时就可以正确进行初始化完成了.

使用this之后就是告诉了编译器前面的是当前类的成员变量,而后面的是形参.


关于构造方法,也可以使用IDEA帮助我们自动生成. 与toString相同

image.png

image.png

可以选择想要初始化的成员变量进行对应构造方法的生成. 选择多个成员变量可以按住CTRL 进行选择.


this的特性


this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型

this只能在"成员方法"中使用

在"成员方法"中,this只能引用当前对象,不能再引用其他对象

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


class AirConditioner{
    String colour = "白色"; // 颜色
    double size; // 尺寸
    String model; // 型号
    public AirConditioner() {
        System.out.println("执行了 无参 的构造方法");
    }
}


image.png

这种初始化的方法通常会搭配 "final"关键字进行使用,后面会详细的介绍


7. 总结

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


相关文章
|
2月前
|
Java 编译器 API
Java 密封类:精细化控制继承关系
Java 密封类:精细化控制继承关系
269 83
|
30天前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
279 120
|
3月前
|
IDE Java 数据挖掘
Java 基础类从入门到精通实操指南
这份指南专注于**Java 17+**的新特性和基础类库的现代化用法,涵盖开发环境配置、数据类型增强(如文本块)、字符串与集合处理进阶、异常改进(如密封类)、IO操作及实战案例。通过具体代码示例,如CSV数据分析工具,帮助开发者掌握高效编程技巧。同时提供性能优化建议和常用第三方库推荐,适合从入门到精通的Java学习者。资源链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
179 35
|
2天前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
|
2天前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
|
4月前
|
存储 安全 Java
【高薪程序员必看】万字长文拆解Java并发编程!(7):不可变类设计指南
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中Java不可变类设计指南,废话不多说让我们直接开始。
76 0
|
28天前
|
缓存 安全 Java
Java反射机制:动态操作类与对象
Java反射机制是运行时动态操作类与对象的强大工具,支持获取类信息、动态创建实例、调用方法、访问字段等。它在框架开发、依赖注入、动态代理等方面有广泛应用,但也存在性能开销和安全风险。本文详解反射核心API、实战案例及性能优化策略,助你掌握Java动态编程精髓。
|
29天前
|
存储 安全 Java
Java集合框架(一):List接口及其实现类剖析
本文深入解析Java中List集合的实现原理,涵盖ArrayList的动态数组机制、LinkedList的链表结构、Vector与Stack的线程安全性及其不推荐使用的原因,对比了不同实现的性能与适用场景,帮助开发者根据实际需求选择合适的List实现。
|
2月前
|
Java API
Java API中Math类功能全景扫描
在实际使用时,这些方法的精确度和性能得到了良好的优化。当处理复杂数学运算或高精度计算时,`Math`类通常是足够的。然而,对于非常精细或特殊的数学运算,可能需要考虑使用 `java.math`包中的 `BigDecimal`类或其他专业的数学库。
88 11