【java】类和对象

类的定义

类的语法格式

复制代码
   class ClassName{
       field;    // 字段/属性 /成员变量,描述事物特征
       method;   // 行为 /成员方法,描述事物功能
   }
  1. class:定义类的关键字
    ClassName类名,大驼峰命名 (单词首字母大写,如WashMachineStudent
    {}:类的主体,存放成员变量(属性)成员方法(行为)

类和实例化

实例化

  1. 实例化

    :是用户自定义的一种新数据类型(类似 intdouble,只不过int是 Java 内置类型),用来描述一类事物的特征和行为

    实例化 :使用类来创建对象的过程 , Java 中用 new + 类名 () 创建对象

  2. 同一个类,可以创建多个对象

访问对象的成员(属性 / 方法)

  1. 使用 . 点运算符对象.属性对象.方法()

  2. 注意事项

    a)new:用来创建对象实例

    b).:访问对象里面的属性和方法

    c)一个类可以实例化多个独立对象,对象之间数据互不干扰

this关键字

为什么要有 this 引用

形参名和成员变量名相同会发生什么?

  1. Java 遵循就近原则:局部变量 / 形参会屏蔽同名成员变量

复制代码
      public int year;
      public int month;
      public int day;

      //this 关键字的作用
      //谁调用方法谁就是this
      //当形参和成员变量同名时,只是自己赋值给自己,
      public void setDate(int year,int month,int day)
      {
          year=year;
          month=month;
          day=day;

          System.out.println("方法内year/month/day值:"
                  +year+"/"+month+"/"+day);
      }

多个对象调用同一个成员方法,方法怎么知道操作的是哪个对象

  1. 成员方法有一个隐藏参数 this,哪个对象调用方法,this 就指向谁
    例如:d1.setDay()的时候,编译器自动把d1这个对象引用传给 this;d2.setDay(),this 就指向 d2

复制代码
      //this 强制访问对象的成员变量,不在使用就近的形参
      public void setDate(int year,int month,int day)
      {
          this.year=year;
          this.month=month;
          this.day=day;

          System.out.println("方法内year/month/day值:"
                  +year+"/"+month+"/"+day);
      }
  • 强制访问对象的成员变量,不再使用就近的形参
    总结

  • 没有this.时,方法内变量名优先匹配局部 / 形参

  • this.变量名,代表对象的成员变量,不受就近原则影响


this 是什么

  1. this:指向当前对象的引用,当前对象 = 调用这个成员方法的对象
  2. 在成员方法中访问成员变量,本质都是this.成员变量,编译器默认帮你省略了 this

this 引用的特性

  1. this 的类型:当前类的引用类型,哪个对象调用,就代表哪个对象
  2. this只能在成员方法 / 构造方法中使用,静态方法 static 里面不能用 this
  3. 在成员方法里,this 只能代表当前调用的对象,不能引用别的对象
  4. this 是成员方法第一个隐藏参数
    a) 编译器编译代码时自动加上 this;
    b)调用方法时,自动把调用方法的对象引用传给 this。
    c)例如:d.setDay(y,m,d)编译后等价于 setDay(d, y,m,d),方法内用 this 接收 d

this 的使用总结

  • this.成员变量:访问当前对象的成员变量(用来区分同名形参)
  • this.成员方法:调用当前对象的成员方法
  • this(...):调用本类的其他构造方法(写在构造方法第一行)

对象的构造及初始化

成员变量初始化引出的问题

  1. 局部变量:方法内部定义,必须手动初始化,不赋值直接使用编译报错

  2. 对象成员变量

    对象的成员变量没有手动赋值也能直接访问

    复制代码
            Date1 d1=new Date1();
            d1.printDate();
            d1.setDate(2026,9,15);
            d1.printDate();
  3. 问题 1: 每次创建完对象,还要额外调用setDate()方法赋值,比较麻烦,有没有办法在创建对象的时候就直接完成初始化?

    答:使用构造方法,new对象的时候自动完成成员变量初始化

  4. 问题 2:局部变量必须手动初始化才能使用,为什么类的字段(成员变量)不赋值也可以直接使用?

    答:成员变量有 JVM 提供的默认初始化值,对象在堆内存创建的时候,JVM 自动给所 有成员变量赋默认值。局部变量在栈上,没有默认值。

  5. 区分局部变量,对象成员变量

默认初始化

  1. 类的成员变量(字段),如果代码没有手动赋值,JVM 会自动给它分配一个默认值,这个过程就叫默认初始化

    对比:方法里的局部变量 没有默认值,不赋值直接使用编译报错

  2. Java成员变量默认值表

相关推荐
草莓熊Lotso1 小时前
【Redis 进阶】主从复制深度解析:从配置落地到 PSYNC 同步原理
linux·开发语言·网络·数据库·redis·缓存·php
Joy T1 小时前
Spring AI 2.0 进阶入门:Workflow、Routing、Task State 与可控 Agent
开发语言·人工智能·workflow·routing·springai·orchestrator·evaluator
重生之小比特1 小时前
【Java SE】抽象类和接口
java·开发语言
传奇开心果编程1 小时前
【Rust入门知识点学与练】第33课:异步编程入门(async/await)强化
开发语言·学习·rust
Lyyaoo.1 小时前
【设计模型】策略模式
java
譕痕2 小时前
Idea 集成 智能体开发工具“千问(qwen)”
java·ide·spring·语言模型
传奇开心果编程2 小时前
【Rust入门知识点学与练】第34课:所有权与借用
开发语言·学习·rust
用户8181870627462 小时前
第27章 消息丢失/重复消费的全链路排查(生产者→Broker→消费者)
java·后端
索隆zoro2 小时前
Army 对 jOOQ
java·后端