11 面向对象思想入门 目录 11 面向对象思想入门11.1 为什么需要面向对象11.2 面向过程 vs 面向对象11.3 类与对象的概念11.3.1 什么是类Class11.3.2 什么是对象Object11.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(){isOntrue;System.out.println(brand model 已开机);}publicvoidturnOff(){isOnfalse;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){// 创建第一个学生对象Studentstu1newStudent();stu1.name张三;stu1.age20;stu1.studentId2026001;stu1.score92.5;stu1.introduce();stu1.study();stu1.showScore();System.out.println(------------);// 创建第二个学生对象Studentstu2newStudent();stu2.name李四;stu2.age21;stu2.studentId2026002;stu2.score88.0;stu2.introduce();stu2.study();stu2.showScore();}}输出结果大家好我叫张三今年20岁学号是2026001 张三正在学习Java... 张三的成绩是92.5分 ------------ 大家好我叫李四今年21岁学号是2026002 李四正在学习Java... 李四的成绩是88.0分11.5.4 手机对象示例publicclassPhoneTest{publicstaticvoidmain(String[]args){Phonep1newPhone();p1.brand华为;p1.modelMate 70;p1.price5999.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 内存分析示例StudentstunewStudent();stu.name张三;stu.age20;stu.study();执行过程┌──────────── 栈 ────────────┐ ┌──────────── 堆 ────────────┐ │ │ │ │ │ stu (引用变量) │───→│ Student对象 │ │ 地址: 0x001 │ │ name 张三 │ │ │ │ age 20 │ │ │ │ studentId null │ │ │ │ score 0.0 │ └─────────────────────────────┘ └─────────────────────────────┘步骤分解new Student()→ 在堆内存中分配空间创建对象成员变量赋默认值Student stu ...→ 在栈内存中声明引用变量stu存储堆中对象的地址stu.name 张三→ 通过地址找到堆中的对象给name赋值stu.study()→ 通过地址找到对象调用其study()方法11.6.3 多个对象的内存Students1newStudent();Students2newStudent();s1.name张三;s2.name李四;栈 堆 ┌──────────┐ ┌──────────────────┐ │ s1: 0x001│──────→ │ Student对象 │ │ │ │ name张三 │ │ s2: 0x002│──┐ │ age0 │ └──────────┘ │ └──────────────────┘ │ │ ┌──────────────────┐ └──→ │ Student对象 │ │ name李四 │ │ age0 │ └──────────────────┘ 每个new出来的对象都有自己独立的一份成员变量互不影响。11.7 成员变量与局部变量对比维度成员变量局部变量定义位置类中方法外方法内部或方法参数默认值有0、null、false等无必须先赋值再使用内存位置堆内存栈内存生命周期随对象创建而生随对象回收而亡随方法调用而生方法结束即亡作用范围整个类所在方法或代码块内publicclassVariableDemo{// 成员变量 —— 有默认值inta;// 默认 0Strings;// 默认 nullbooleanflag;// 默认 falsepublicvoidtest(){// 局部变量 —— 没有默认值必须赋值intb10;System.out.println(a);// 0System.out.println(b);// 10// int c; // 编译错误未初始化// System.out.println(c);}}成员变量与局部变量同名publicclassSameNameDemo{intnum10;// 成员变量publicvoidshow(){intnum20;// 局部变量就近原则System.out.println(num);// 20局部变量优先}}11.8 本章总结知识回顾知识点核心内容面向对象思想以对象为核心组织代码提高复用性和可维护性类与对象类是模板对象是实例类的定义成员变量 成员方法对象创建类名 对象名 new 类名()内存分析栈存引用堆存对象方法区存类信息成员变量 vs 局部变量位置、默认值、内存、生命周期、作用范围练习题定义一个Dog类包含属性name、age、breed和方法bark、eat并在测试类中创建两个对象调用方法。画出以下代码的内存图Dogd1newDog();Dogd2d1;d1.name旺财;System.out.println(d2.name);// 输出什么为什么 互动时间你理解的面向对象和面向过程最大的区别是什么在你的日常开发中用过哪些面向对象的特性下篇预告[12-封装与构造方法] —— 学习如何用private保护数据安全以及构造方法的妙用 参考资料Oracle Java 官方文档 - Classes and ObjectsJava 面向对象编程菜鸟教程《Java核心技术 卷I》第4章