当前位置: 首页 > news >正文

七. JAVA类和对象(一)

        hello!这里是敲代码的小董,很荣幸您阅读此文,本文只是自己在学习JAVA过程中的笔记,如有不足,期待您的评论指点和关注,欢迎欢迎~~

✨✨个人主页:敲代码的小董

💗💗系列专栏:JAVA

目录

1. 面向对象的初步认知

1.1 什么是面向对象

1.2 面向对象与面向过程

2. 类定义和使用

2.1 简单认识类 

2.2 类的定义格式 

2.3 类的练习

2.3.1 定义一个狗类

2.3.2 定义一个学生类

3. 类的实例化

3.1 什么是实例化

3.2 类和对象的说明 

4. this引用 

4.1 为什么要有this引用 

4.2 什么是this引用


上一节:六. JAVA数组的定义与使用-CSDN博客 

1. 面向对象的初步认知

1.1 什么是面向对象

        Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。

        面向对象编程(OOP)​ 是一种以“对象”为核心的编程范式,将现实事物抽象为包含数据(属性)和行为(方法)的独立单元,通过封装隐藏内部细节、继承复用代码逻辑、多态实现灵活扩展、抽象简化复杂性,最终以对象间的协作模拟真实世界的交互关系,使代码更模块化、易维护且贴近人类思维模式。

 

1.2 面向对象与面向过程

        面向对象像组建足球队:每个球员(对象)有自己的特长(属性)和技能(方法),前锋负责射门、守门员专注扑救,他们通过传球协作完成比赛。​

        面向过程则像独自踢毽子:你只能按固定步骤(函数)操作——抬腿→踢→接住,所有动作都得自己控制。

        前者强调整体协作,后者专注步骤顺序,就像团队配合与单人表演的区别。面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。


2. 类定义和使用

         面相对象程序设计关注的是对象,而对象是现实生活中的实体,比如:洗衣机。但是洗衣机计算机并不认识,需要开发人员告诉给计算机什么是洗衣机。

        上图左侧就是对洗衣机简单的描述,该过程称为对洗衣机对象(实体)进行抽象(对一个复杂事物的重新认知),但是这些简化的抽象结果计算机也不能识别,开发人员可以采用某种面相对象的编程语言来进行描述,比如:Java语言。 

2.1 简单认识类 

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

        类就像工厂的「产品设计图纸」,它不指某个具体物品,而是定义了某类事物的共同特征行为规范。比如「汽车设计图」规定了一辆汽车应有的属性(颜色、排量)和功能(加速、刹车),但图纸本身不能开动,只有按图纸造出的具体汽车(对象)才能使用。 

2.2 类的定义格式 

        在java中定义类时需要用到class关键字,具体语法如下 :

// 创建类
class ClassName{
field;      // 字段(属性) 或者 成员变量
method;     // 行为 或者 成员方法
}

        class为定义类的关键字,ClassName为类的名字,{}中为类的主体。 类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法。

标准语法结构:

[访问修饰符] class 类名 {
    // 成员变量(属性)
    数据类型 变量名;  
    
    // 构造方法(初始化对象)
    类名(参数列表) { 
        // 初始化代码
    }
    
    // 成员方法(行为)
    返回类型 方法名(参数列表) {
        // 方法体
    }
}

定义一个类: 

public class MobilePhone {
    // 成员变量(私有化封装)
    private String color;
    private String model;

    // 构造方法(初始化必备参数)
    public MobilePhone(String color, String model) {
        this.color = color;
        this.model = model;
    }

    // 成员方法1:拨打电话
    public void call(String number) {
        System.out.println(model + "正在呼叫:" + number);
    }

    // 成员方法2:查看设备信息
    public String getDeviceInfo() {
        return color + "色 " + model;
    }
}

命名规范:

类名  →  大驼峰 ( MobilePhone )
变量/方法名  →  小驼峰 ( getDeviceInfo)

常量  →   全大写 ( MAX_SPEED)

2.3 类的练习

2.3.1 定义一个狗类

class PetDog {
    public String name;//名字
    public String color;//颜色
    // 狗的属性
    public void barks() {
        System.out.println(name + ": 旺旺旺~~~");
    }
    // 狗的行为
    public void wag() {
        System.out.println(name + ": 摇尾巴~~~");
    }
}

2.3.2 定义一个学生类

public class Student{
    public String name;
    public String gender;
    public short age;
    public double score;

    public void DoClass(){}
    public void DoHomework(){}
    public void Exam(){}
}

 注意事项:
1. 一般一个文件当中只定义一个类。
2. main方法所在的类一般要使用public修饰。
3. public修饰的类必须要和文件名相同。
4. 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改。


3. 类的实例化

3.1 什么是实例化

        定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似,只不过int和double是java语言自带的内置类型,而类是用户自定义了一个新的类型,比如上述的:PetDog类和Student类。它们都是类(一种新定义的类型)有了这些自定义的类型之后,就可以使用这些类来定义实例(或者称为对象)。

        用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。实例化就像根据建筑设计图(类)盖出真实的房子(对象)。当你在Java中写下 new PetDog() 时,相当于施工队按照PetDog设计图,在内存中"建造"出一只具体的狗,这只狗可以拥有独立的名字、颜色,并表现出叫唤、摇尾巴等行为。

注意事项:

  • new 关键字用于创建一个对象的实例。
  • 使用 . 来访问对象中的属性和方法。
  • 同一个类可以创建多个实例。

  

3.2 类和对象的说明 

  1. 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员。
  2. 类是一种自定义的类型,可以用来定义变量。
  3. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
  4. 做个比方:类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间 。


4. this引用 

4.1 为什么要有this引用 

场景一:成员变量与局部变量同名冲突 

未使用 this 的灾难代码:

class Student {
    String name; // 成员变量
    
    // 构造方法参数名与成员变量同名
    public Student(String name) { 
        name = name; // 这两个name都是局部变量参数!成员变量未被赋值!
    }
}

// 测试结果
Student stu = new Student("张三");
System.out.println(stu.name); // 输出 null(而非"张三")

问题根源
成员变量方法内的变量(参数/局部变量)同名时,Java 会优先使用局部变量(就近原则),导致成员变量无法被正确访问。 

场景二:对象需要自我指涉

无法明确调用者的窘境:

class BankAccount {
    double balance; // 成员变量:账户余额

    // 构造方法参数名与成员变量同名(但未用this)
    public BankAccount(double balance) {
        balance = balance; // 危险操作!实际是局部变量赋值给自己!
    }

    void showBalance() {
        System.out.println("当前余额:" + balance);
    }
}

// 测试代码
BankAccount acc = new BankAccount(1000.0);
acc.showBalance(); // 输出:当前余额:0.0(而不是1000)

 为什么要有 this 引用?

1. 消除命名歧义

this.balance = balance; // 左边是成员变量,右边是参数

 当参数/局部变量与成员变量同名时,this是唯一能明确指向对象成员的方式。

2. 明确对象身份

class BankAccount {
    void transferTo(BankAccount other, double money) {
        this.balance -= money; // 当前账户扣款
        other.balance += money; // 对方账户收款
    }
}

在涉及多个对象交互时(如转账),this能清晰标识"当前操作的主体对象"。

4.2 什么是this引用

        this 是 Java 中指向当前对象实例的隐式引用,其本质是正在执行方法的对象的内存地址。它像对象的"自拍杆",让对象能在方法内部访问自己的属性和方法。this 是 Java 为每个对象实例内置的「自我指针」,用于在对象的方法中精准访问自己的成员变量和方法,解决代码歧义性问题,是面向对象编程中实现对象自治的关键机制。

this引用的特性:

  • this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型。
  • this只能在"成员方法"中使用。
  • 在"成员方法"中,this只能引用当前对象,不能再引用其他对象。
  • this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收。
  • 静态方法中无法使用this,静态方法属于类,不属于对象。

下一节:七. JAVA类和对象(二)

相关文章:

  • 权限框架SpringSecurity介绍
  • 【功能开发】DSP F2837x 检测中断所有函数运行一次的时间
  • 多模态大语言模型arxiv论文略读(二)
  • 基于Edge-TTS的OpenAI兼容文本转语音API实战指南
  • QwQ-32B-GGUF模型部署
  • 快速入手-基于DRF的过滤、分页、查询配置(十五)
  • 2025年渗透测试面试题总结-某 携程旅游-基础安全工程师(题目+回答)
  • 41、当你在 index.html 中引用了一个公共文件(比如 common.js),修改这个文件后,用户访问页面时仍然看到旧内容,因为浏览器缓存了旧版本
  • 人工智能-LangGraph+ChatUI+DeepSeek API搭建本地智能助手
  • 搭建开源笔记平台:outline
  • 如何在 Unity3D 导入 Spine 动画
  • 【NLP】15. NLP推理方法详解 --- 动态规划:序列标注,语法解析,共同指代
  • JavaScript 库:全面解析与推荐
  • 13-SpringBoot3入门-整合MyBatis-Plus
  • 【Docker镜像】Python项目之使用Dockerfile构建镜像(一)
  • 如何用Postman实现自动化测试?
  • 【Jira 查询与 JQL 使用详解】
  • 【数据结构】导航
  • Ubuntu 24.04.2 LTS 系统安装python,创建虚拟环境
  • 解决 CMS Old GC 频繁触发线上问题技术方案
  • 水利部:山西、陕西等地旱情将持续
  • 优化网络营商环境,上海严厉打击涉企网络谣言、黑灰产等违法犯罪
  • 加力、攻坚、借力、问效,上海为优化营商环境推出增量举措
  • 首批18位!苏联籍抗日航空英烈信息更新
  • 小米回应SU7Ultra排位模式限制车辆动力:暂停推送更新
  • 又一日军“慰安妇”制度受害者去世,大陆在世幸存者仅7人