news 2026/6/3 0:09:59

11 面向对象思想入门

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
11 面向对象思想入门

目录

  • 🔵 11 面向对象思想入门
    • 11.1 为什么需要面向对象
    • 11.2 面向过程 vs 面向对象
    • 11.3 类与对象的概念
      • 11.3.1 什么是类(Class)
      • 11.3.2 什么是对象(Object)
      • 11.3.3 类与对象的关系
    • 11.4 类的定义
      • 11.4.1 语法格式
      • 11.4.2 定义一个学生类
      • 11.4.3 定义一个手机类
    • 11.5 对象的创建与使用
      • 11.5.1 创建对象的语法
      • 11.5.2 使用对象
      • 11.5.3 完整示例
      • 11.5.4 手机对象示例
    • 11.6 对象的内存分析
      • 11.6.1 Java内存区域
      • 11.6.2 内存分析示例
      • 11.6.3 多个对象的内存
    • 11.7 成员变量与局部变量
      • 成员变量与局部变量同名
    • 11.8 本章总结
      • 知识回顾
      • 练习题
    • 💬 互动时间
    • 📚 参考资料

🔵 11 面向对象思想入门

更新日期:2026年5月
版权声明:本文为原创内容,转载请注明出处。
系列:Java入门到精通系列 · 第二阶段 · 面向对象



11.1 为什么需要面向对象

在前面的学习中,我们用面向过程的方式写了很多程序:定义变量、写方法、调用方法。但当程序变得越来越复杂,代码量从几百行增长到几千行甚至上万行时,面向过程的方式会出现以下问题:

  • 代码重复:相似逻辑到处复制粘贴
  • 难以维护:牵一发而动全身
  • 无法复用:模块之间耦合度高

面向对象编程(Object-Oriented Programming, OOP)正是为了解决这些问题而诞生的编程思想。


11.2 面向过程 vs 面向对象

对比维度面向过程面向对象
思考方式以"步骤"为中心以"对象"为中心
程序结构函数的集合对象的协作
代码复用较低较高
适用场景简单任务、脚本复杂系统、大型项目
可维护性
典型语言CJava、C++、Python

比喻理解

  • 面向过程:“我要做一道番茄炒蛋” → 第一步切番茄 → 第二步打蛋 → 第三步炒……
  • 面向对象:“我请厨师做饭” → 厨师知道怎么做 → 我只需要告诉他"做番茄炒蛋"

11.3 类与对象的概念

11.3.1 什么是类(Class)

是对一类事物的抽象描述,它定义了这类事物共有的属性行为

类 = 属性(特征) + 行为(方法)

11.3.2 什么是对象(Object)

对象是类的一个具体实例,是真实存在的个体。

11.3.3 类与对象的关系

概念说明举例
模板/蓝图汽车设计图纸
对象实体/实例按图纸造出来的一辆辆汽车

📌一句话总结:类是模板,对象是产品。一个类可以创建无数个对象。


11.4 类的定义

11.4.1 语法格式

publicclass类名{// 成员变量(属性/字段)数据类型 变量名;// 成员方法(行为)返回值类型 方法名(参数列表){方法体;}}

11.4.2 定义一个学生类

publicclassStudent{// ---- 成员变量(属性)----Stringname;// 姓名intage;// 年龄StringstudentId;// 学号doublescore;// 成绩// ---- 成员方法(行为)----publicvoidstudy(){System.out.println(name+"正在学习Java...");}publicvoidintroduce(){System.out.println("大家好,我叫"+name+",今年"+age+"岁,学号是"+studentId);}publicvoidshowScore(){System.out.println(name+"的成绩是:"+score+"分");}}

11.4.3 定义一个手机类

publicclassPhone{// 成员变量Stringbrand;// 品牌Stringmodel;// 型号doubleprice;// 价格booleanisOn;// 是否开机// 成员方法publicvoidturnOn(){isOn=true;System.out.println(brand+" "+model+" 已开机");}publicvoidturnOff(){isOn=false;System.out.println(brand+" "+model+" 已关机");}publicvoidcall(StringphoneNumber){if(isOn){System.out.println("正在拨打:"+phoneNumber);}else{System.out.println("手机已关机,无法拨打电话");}}}

11.5 对象的创建与使用

11.5.1 创建对象的语法

类名 对象名=new类名();

11.5.2 使用对象

// 访问属性:对象名.属性名// 调用方法:对象名.方法名(参数)

11.5.3 完整示例

publicclassStudentTest{publicstaticvoidmain(String[]args){// 创建第一个学生对象Studentstu1=newStudent();stu1.name="张三";stu1.age=20;stu1.studentId="2026001";stu1.score=92.5;stu1.introduce();stu1.study();stu1.showScore();System.out.println("------------");// 创建第二个学生对象Studentstu2=newStudent();stu2.name="李四";stu2.age=21;stu2.studentId="2026002";stu2.score=88.0;stu2.introduce();stu2.study();stu2.showScore();}}

输出结果

大家好,我叫张三,今年20岁,学号是2026001 张三正在学习Java... 张三的成绩是:92.5分 ------------ 大家好,我叫李四,今年21岁,学号是2026002 李四正在学习Java... 李四的成绩是:88.0分

11.5.4 手机对象示例

publicclassPhoneTest{publicstaticvoidmain(String[]args){Phonep1=newPhone();p1.brand="华为";p1.model="Mate 70";p1.price=5999.0;p1.turnOn();p1.call("13800138000");p1.turnOff();}}

输出结果

华为 Mate 70 已开机 正在拨打:13800138000 华为 Mate 70 已关机

11.6 对象的内存分析

理解对象在内存中的存储方式,是深入学习Java的关键。

11.6.1 Java内存区域

内存区域作用存放内容
栈(Stack)方法调用局部变量、方法参数
堆(Heap)对象存储new出来的对象、成员变量
方法区(Method Area)类信息存储类的字节码、静态变量、常量

11.6.2 内存分析示例

Studentstu=newStudent();stu.name="张三";stu.age=20;stu.study();

执行过程

┌──────────── 栈 ────────────┐ ┌──────────── 堆 ────────────┐ │ │ │ │ │ stu (引用变量) │───→│ Student对象 │ │ 地址: 0x001 │ │ name = "张三" │ │ │ │ age = 20 │ │ │ │ studentId = null │ │ │ │ score = 0.0 │ └─────────────────────────────┘ └─────────────────────────────┘

步骤分解

  1. new Student()→ 在内存中分配空间,创建对象,成员变量赋默认值
  2. Student stu = ...→ 在内存中声明引用变量stu,存储堆中对象的地址
  3. stu.name = "张三"→ 通过地址找到堆中的对象,给name赋值
  4. stu.study()→ 通过地址找到对象,调用其study()方法

11.6.3 多个对象的内存

Students1=newStudent();Students2=newStudent();s1.name="张三";s2.name="李四";
栈 堆 ┌──────────┐ ┌──────────────────┐ │ s1: 0x001│──────→ │ Student对象 │ │ │ │ name="张三" │ │ s2: 0x002│──┐ │ age=0 │ └──────────┘ │ └──────────────────┘ │ │ ┌──────────────────┐ └──→ │ Student对象 │ │ name="李四" │ │ age=0 │ └──────────────────┘

📌 每个new出来的对象都有自己独立的一份成员变量,互不影响。


11.7 成员变量与局部变量

对比维度成员变量局部变量
定义位置类中,方法外方法内部或方法参数
默认值有(0、null、false等)无,必须先赋值再使用
内存位置堆内存栈内存
生命周期随对象创建而生,随对象回收而亡随方法调用而生,方法结束即亡
作用范围整个类所在方法或代码块内
publicclassVariableDemo{// 成员变量 —— 有默认值inta;// 默认 0Strings;// 默认 nullbooleanflag;// 默认 falsepublicvoidtest(){// 局部变量 —— 没有默认值,必须赋值intb=10;System.out.println(a);// 0System.out.println(b);// 10// int c; // 编译错误!未初始化// System.out.println(c);}}

成员变量与局部变量同名

publicclassSameNameDemo{intnum=10;// 成员变量publicvoidshow(){intnum=20;// 局部变量(就近原则)System.out.println(num);// 20(局部变量优先)}}

11.8 本章总结

知识回顾

知识点核心内容
面向对象思想以对象为核心组织代码,提高复用性和可维护性
类与对象类是模板,对象是实例
类的定义成员变量 + 成员方法
对象创建类名 对象名 = new 类名()
内存分析栈存引用,堆存对象,方法区存类信息
成员变量 vs 局部变量位置、默认值、内存、生命周期、作用范围

练习题

  1. 定义一个Dog类,包含属性(name、age、breed)和方法(bark、eat),并在测试类中创建两个对象调用方法。
  2. 画出以下代码的内存图:
Dogd1=newDog();Dogd2=d1;d1.name="旺财";System.out.println(d2.name);// 输出什么?为什么?

💬 互动时间

  • 你理解的面向对象和面向过程最大的区别是什么?
  • 在你的日常开发中,用过哪些面向对象的特性?

📢下篇预告:[12-封装与构造方法] —— 学习如何用private保护数据安全,以及构造方法的妙用!


📚 参考资料

  • Oracle Java 官方文档 - Classes and Objects
  • Java 面向对象编程(菜鸟教程)
  • 《Java核心技术 卷I》第4章
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/3 0:08:46

终极Audacity音频编辑完整指南:从零开始制作专业音频

终极Audacity音频编辑完整指南:从零开始制作专业音频 【免费下载链接】audacity Audio Editor 项目地址: https://gitcode.com/GitHub_Trending/au/audacity Audacity是一款功能强大的免费开源音频编辑工具,无论你是播客创作者、音乐制作人还是音…

作者头像 李华
网站建设 2026/6/3 0:06:44

2026年手机阅读新趋势:如何选择最适合你的阅读器服务?

随着科技的进步和用户需求的多样化,2026年的手机阅读市场迎来了新的发展趋势。南京金合捷网络科技有限公司自主研发的Kred阅读器,在这一波创新浪潮中表现出色,成为众多追求纯净、便捷以及个性化阅读体验用户的首选。接下来,我们将…

作者头像 李华
网站建设 2026/6/3 0:00:44

基于Arduino与超声波传感器的DIY无人机计时门设计与实现

1. 项目概述:为FPV竞速增添专业感的DIY计时门如果你和我一样,家里有个对FPV无人机着迷的孩子,或者你自己就是个竞速爱好者,那你肯定理解那种想给自家的小型无人机赛道增加点“专业感”的冲动。我们在地下室用纸箱、呼啦圈搭过各种…

作者头像 李华
网站建设 2026/6/2 23:50:17

4.前后置处理:setup_class/setup_method 详

承接上一篇 Pytest 入门:用例命名规则 命令行 pytest.ini 配置,本篇专门解决遗留问题:Pytest 测试类禁止__init__构造方法,如何实现用例数据 / 环境初始化?一、什么是前后置(setup/teardown)自…

作者头像 李华