前言

在JAVA的学习过程中,类和对象一直是新手小白的痛难点,今天结合我的学习经验,从 “想吃火锅” 到 “彻底理解类与对象” 事不宜迟,让我们直接发车~~


什么是类

  • 类是用来对一个实体进行描述的,来描述这个实体(火锅店)有什么属性(菜单),有哪些功能(运营手册),描述完计算机就可以识别了。

类的定义格式

在java中需要用到class关键字。具体如下

class HotpotRestaurant {
	field;//属性
	method;//行为 
}

类中包括什么?

  • 从上面的定义格式可以看出一个类中包括属性和行为,他们又叫成员变量和成员方法。
public class HotpotRestaurant {

//成员变量
	public String meat;//肉类
	public String soup;//锅底
	public String vegetable;//蔬菜
	public int people;//人数
	
//成员方法
	public void act(){
	System.out.println("吃火锅")
	}
}
  • 注意事项
  • 类名使用大驼峰进进行定义。
  • 成员前面统一使用public,后面会详细解释。 方法不带用static,我们后面会详细解释。
  • 一般一个文件中自定义一个类
  • 类名要与文件名字相同

对象

什么是对象?

  • 对象就像是一家 “正在营业的具体餐厅”,这家餐厅具有我们上面说的类的菜单和运营手册,也就是成员变量和成员方法。

比喻理解

  • 我们可以通过类来创建一个对象。就像是连锁点一样。类就像是总部,一个提供菜单,运营的指挥官。创建出来的对象就像是我们到店的加盟店了,在这里我们才可以享受美味~~,如果想吃新品和更好的体验,必须总部,也就是类中进行定义新的菜单和运营策略(成员变量和成员方法)

类的实例化

  • 定义一个类,就相当于在计算机中定义了一个新的类型(火锅店实体),用类这个类型创建对象的过程,成为类的实例化。
  • 同一个类(总部)可以实例化多个对象(实体店)

代码如下(示例):


public class test {
    public static void main(String[] args) {
        //类的创建/实例化
        HotpotRestaurant hotpotRestaurant= new HotpotRestaurant();
        //访问对象中的变量
        hotpotRestaurant.meat="麻辣牛肉";
        hotpotRestaurant.soup="红汤锅";
        hotpotRestaurant.people =6;
        hotpotRestaurant.act();

        HotpotRestaurant hotpotRestaurant2= new HotpotRestaurant();
        hotpotRestaurant2.meat="鲜鱼丸";
        hotpotRestaurant2.soup="番茄锅";
        hotpotRestaurant2.people =4;
        hotpotRestaurant2.act();

    }
}

简单小结

  • 类只是一个类似模型的东西,用来对实体进行描述,限定了成员变量。对象就是在这种模型下实例用交互的。
  • 类是一种自定义的类型。

this关键字

下面我定义一个date类来记录我吃火锅的时间,并进行初始化。

public class Date {
    public int year;
    public int month;
    public int day;
    public void setDay(int y,int m,int d){
        year = y;
        month =m;
        day = d;
    }
    public void print(){
        System.out.println(year+"/"+month+"/"+day);
    }

    public static void main(String[] args) {
        Date date1 =new Date();
        date1.setDay(2025,7,22);
        date1.print();
    }
}
  • 思考:当我的形参和成员变量相同时候,会怎么样呢?为了避免这样的问题,我们需要在指向当前对象,也就是成员方法中对每个成员变量用this引用。
  • 就像是菜单中的菜品,在实体店A中有,在B中也有,用this来明确是我正在吃的这家店的菜。
public void setDay(int y,int m,int d){
        this.year = y;
        this.month =m;
        this.day = d;
    }
    public void print(){
        System.out.println(this.year+"/"+this.month+"/"+this.day);
    }

对象的构造

通过上面date的类,我们不难看出类中的成员变量通过set成员方法进行了初始化,一个一个写当然不方便,下面让我们一一介绍。

默认初始化

  • 不同数据类型类型都有自己的默认值

在这里插入图片描述

就地初始化

  • 就是在声明成员变量直接初始化

构造方法初始化

又称为构造器

  • 名字和类名相同,创建对象时编译器自动调用,在整个对象的生命周期中只调一次。
  • 基本格式:public + 类名
  • 调用时new后(直接初始化变量)
    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public void print(){
        System.out.println(this.year+"/"+this.month+"/"+this.day);
    }

    public static void main(String[] args) {
        Date date1 =new Date(2025,7,22);
        date1.print();
  • 注意!!
  • 如果用户没有显示定义,编译器会默认生成一份没有参数的构造方法。但是一旦定义显示构造方法就不再默认提供。
  • this()在构造函数中调用
public class HotpotRestaurant {

        // 成员变量:火锅店的基础属性
        private String name;      // 店名
        private int tableCount;   // 桌数
        private String signaturePot; // 招牌锅底

        // 构造方法1:最基础的构造(只需要店名)
        public HotpotRestaurant(String name) {
            this.name = name;
            this.tableCount = 10; // 默认10张桌
            this.signaturePot = "经典麻辣锅"; // 默认招牌锅底
        }

        // 构造方法2:需要店名+桌数(调用构造方法1简化代码)
        public HotpotRestaurant(String name, int tableCount) {
            this(name); // 调用上面的构造方法,传入店名,复用默认的锅底和桌数逻辑
            this.tableCount = tableCount; // 单独修改桌数
        }

        // 构造方法3:需要店名+桌数+招牌锅底(调用构造方法2进一步简化)
        public HotpotRestaurant(String name, int tableCount, String signaturePot) {
            this(name, tableCount); // 调用构造方法2,传入店名和桌数
            this.signaturePot = signaturePot; // 单独修改招牌锅底
        }

对象的打印

  • 如果直接打印对象的引用,输出的为地址。需要我们重写toString方法。

在这里插入图片描述toString方法

在这里插入图片描述打印结果

结语

好啦~~,上半部分的内容就告一段落了,这是类和对象的基础,相当重要呢,我们下半部分再见啦,如有问题,欢迎指正,共同进步!!

  • 我是Dylan,下期见~
Logo

欢迎加入西安开发者社区!我们致力于为西安地区的开发者提供学习、合作和成长的机会。参与我们的活动,与专家分享最新技术趋势,解决挑战,探索创新。加入我们,共同打造技术社区!

更多推荐