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

【Java基础知识 17】面向对象编程

文章目录

  • 一、对象
    • 1. 为什么需要对象?
    • 2. 类与对象的关系
      • 2.1 定义类
      • 2.2 创建和使用对象
    • 3. 对象的内存模型
      • 定义明星类(Star.java)
    • 4. 对象的默认值
    • 5. 对象的意义与优势


一、对象

对象是面向对象编程的核心概念,它是一种特殊的数据结构,能够封装一个事物的属性(数据)和行为(操作),从而在程序中完整地代表现实世界中的事物。

1. 为什么需要对象?

编程的本质是解决现实世界的问题,而现实世界是由无数相互关联的事物组成的。传统的变量和数组在描述复杂事物时存在明显局限:

  • 变量:仅能存储单一数据,如int max = 15;只能表示一个分数,无法关联到具体的人。
  • 数组:虽能存储多个数据,但要求数据类型统一,如String[] names = {"小明","小红","小蓝"};无法区分每个元素的实际含义,也不能直接对数据进行逻辑操作。


    对象的出现正是为了弥补这些不足,它可以:
  • 同时存储不同类型的关联数据(如一个学生的姓名、年龄、成绩等)
  • 为数据绑定专属的操作方法(如学生可以有 “考试”、“选课” 等行为)
  • 使程序结构更贴近现实世界的逻辑关系

例如,要表示一个人,需要同时记录姓名、年龄、性别、身高这些不同类型的信息:

public class Demo {public static void main(String[] args) {// 创建小明的People对象并设置属性People xm = new People();xm.name = "小明";  // 字符串类型xm.age = 18;       // 整数类型xm.sex = "男";     // 字符串类型xm.height = 180;   // 整数类型// 创建小红的People对象并设置属性People xh = new People();xh.name = "小红";xh.age = 19;xh.sex = "女";xh.height = 170;}
}

注意:上述代码直接运行会报错,因为对象不能凭空创建,必须先定义对象的结构(即类),就像盖房子需要先设计图纸一样。


2. 类与对象的关系

对象的创建依赖于 “类”(Class),二者的关系如同:

  • 类 = 建筑图纸(定义了事物的结构和功能)
  • 对象 = 按图纸建造的房子(根据定义创建的具体实例)

一个类可以创建多个对象,就像一张图纸可以建造多栋相同结构的房子。

2.1 定义类

类是对象的模板,定义了对象应包含的属性(数据)和方法(行为)。语法结构:

修饰符 class 类名 {// 定义属性(成员变量)数据类型 属性名1;数据类型 属性名2;// 定义方法(行为)修饰符 返回值类型 方法名() {// 方法体}
}

示例:定义一个 “手机” 类

/*** 手机类:描述手机的属性和功能*/
public class Phone {// 属性(成员变量)String brand;  // 品牌String color;  // 颜色double price;  // 价格int storage;   // 存储容量(GB)// 方法(行为)// 打电话public void makeCall(String number) {System.out.println(brand + "手机正在拨打:" + number);}// 发送短信public void sendMessage(String number, String content) {System.out.println("向" + number + "发送短信:" + content);}
}

2.2 创建和使用对象

创建对象的过程称为 “实例化”,通过new关键字实现,语法:

// 创建对象
类名 对象名 = new 类名();// 访问属性
对象名.属性名 =;  // 赋值
数据类型 变量 = 对象名.属性名;  // 取值// 调用方法
对象名.方法名(参数);

示例:使用 Phone 类创建对象

public class TestPhone {public static void main(String[] args) {// 创建第一个手机对象(华为)Phone huawei = new Phone();huawei.brand = "华为";huawei.color = "黑色";huawei.price = 5999;huawei.storage = 256;// 使用手机功能huawei.makeCall("13800138000");huawei.sendMessage("13900139000", "晚上一起吃饭吧");// 创建第二个手机对象(苹果)Phone iphone = new Phone();iphone.brand = "苹果";iphone.color = "白色";iphone.price = 7999;iphone.storage = 512;// 使用手机功能iphone.makeCall("13700137000");iphone.sendMessage("13600136000", "这手机真好用");}
}

3. 对象的内存模型

定义明星类(Star.java)

对象在内存中占据独立的存储空间,主要分为三个部分:

  • 栈内存:存储对象的引用(即对象在堆内存中的地址)
  • 堆内存:存储对象的实际数据(属性值)
  • 方法区:存储类的模板信息(属性定义、方法定义等)

重要特性:每个对象拥有独立的堆内存空间,修改一个对象的属性不会影响其他对象。


4. 对象的默认值

当创建对象但未给属性赋值时,Java 会自动为属性分配默认值,规则如下:

示例验证:

public class DefaultValueDemo {public static void main(String[] args) {Person p = new Person();System.out.println("姓名:" + p.name);       // nullSystem.out.println("年龄:" + p.age);        // 0System.out.println("身高:" + p.height);     // 0.0System.out.println("是否学生:" + p.isStudent); // false}
}class Person {String name;      // 引用类型int age;          // 整数类型double height;    // 浮点类型boolean isStudent;// 布尔类型
}

5. 对象的意义与优势

对象作为面向对象编程的核心,带来了诸多优势:

  • 现实映射:通过对象直接映射现实事物,使程序设计更符合人类思维模式
  • 封装性:将数据和操作数据的方法捆绑在一起,避免外部错误修改,提高代码安全性
  • 可维护性:一个对象的修改不会影响其他对象,降低代码耦合度
  • 可扩展性:可以通过继承(后续讲解)基于现有类创建新类,实现代码复用
  • 模块化:每个对象可视为独立模块,便于多人协作开发大型项目

理解对象的核心概念,是掌握面向对象编程的基础。在此之上,还需深入学习构造方法、封装、继承、多态等核心特性,以此搭建完整的面向对象知识体系,最终掌握用其解决复杂问题的能力。

http://www.lryc.cn/news/610096.html

相关文章:

  • Adobe Experience Manager (AEM) Assets|企业级数字资产管理平台(DAM)
  • javacc学习笔记 01、JavaCC本地安装与测试
  • TorchDynamo源码解析:从字节码拦截到性能优化的设计与实践
  • 厄米系统(Hermitian System)
  • Go 函数选项模式
  • 模型学习系列之考试
  • day15 SPI
  • 疏老师-python训练营-Day35模型可视化推理
  • Golang中的`io.Copy()`使用场景
  • #C语言——刷题攻略:牛客编程入门训练(四):运算(二)
  • 网站从HTTP升级到HTTPS网址方法
  • 北京JAVA基础面试30天打卡01
  • 【多智能体cooragent】CoorAgent 系统中 5 个核心系统组件分析
  • 力扣-1.两数之和
  • 腾讯混元重磅开源:四款小尺寸模型全面发布
  • Git如何为多平台配置密钥和用户信息?
  • 互联网医院整体项目套表整理过程文档全流程分析
  • 【MySQL基础篇】:MySQL常用内置函数以及实用示例
  • Flask + HTML 项目开发思路
  • MySQL中COUNT(\*)、COUNT(1)和COUNT(column),到底用哪个?
  • 从零认识OpenFlow
  • 【SAM】Segment Anything 论文翻译笔记
  • opencv引入libavif
  • 模拟IC设计提高系列8-运算跨导放大器OTA Operational Transconduct Amplifiers
  • 家事速配西安项目启动会圆满举行,开启社区服务新篇章
  • 决策树(回归树)全解析:原理、实践与应用
  • 【动态规划 | 回文字串问题】动态规划解回文问题的核心套路
  • 打卡day28
  • Memcached缓存与Redis缓存的区别、优缺点和适用场景
  • Java 大视界 -- Java 大数据在智能交通智能停车诱导与车位共享优化中的应用(381)