




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章 面向对象基础 本章要点 类和对象的关系构造器的特征和作用对象创建的内存模型访问权限修饰符简介this关键字 面向对象编程思想 面向对象编程 Object OrientedProgrammingOOP 它比面向过程更加先进 能够大幅度的提高项目的成功率 降低后期的维护成本 提高软件的可靠性和可伸缩性 它其实也是一种新的思维方式 从一个新的角度考虑问题 以认知论为基础 使用对象的概念来理解和问题分析 然后设计和开发由对象构成的软件系统 实际上 面向对象就是人类认识客观世界的方式 比如 我们在设计一个系统时必定要分析组成该系统的对象有哪些 找出其中有相同特征的对象 利用这些特征创建一个蓝图 这个蓝图就是类 它是面向对象的核心概念 它应该描述了对象的特征 注意 任何对象的特征都可以分成两个方面 一个是描述对象包含的数据特征 实例变量一个是描述对象表现的行为特征 函数 方法所以类由两部分组成 即实例变量和函数 在面向对象学中称为属性和方法 类是具有相同属性和方法的一组对象的集合 它为属于该类的全部对象提供了统一的抽象描述 其内部包括属性和方法两个主要部分 说明同类对象具有相同的属性和方法 是指它们的定义形式相同 而不是说每个对象的属性值都相同 类是静态的 类的存在 语义和关系在程序执行前就已经定义好了 对象是动态的 对象在程序执行时可以被创建和删除 类的定义 类的格式 修饰符一般为public 也可以没有修饰符 注意类名的命名规范 类的成员 变量成员函数成员 修饰符class类名 类的成员 类的举例 01publicclassCar 02Stringcolor 03intdoorNumber 04doubletopSpeed 0506publicvoidspeedUp 07 08publicvoidspeedDown 09 10publicvoidbrake 11 12 类的举例 01publicclassPerson 02Stringname 03intage 04doubleheight 0506publicvoidsayHello 07System out println Hello 08 09 创建对象 之前我们仅仅是定义一个类 它只是静态存在的类代码 然而 程序的运行不是依靠类的 而是对象 我们应该利用这些类 创建出对象 然后使用对象的属性和方法让程序运行 对象是动态的 只有代码通过虚拟机运行之后才能产生 虚拟机停止时对象则消失 而类是静态的 程序运行之前即存在了 比如 汽车类 具体的一辆汽车的区别 可见 类是个抽象的概念 对象却是具体的 类只是规定了将来要产生出来的对象应该具备哪些属性和方法 就像一个模板 由类产生的对象必定拥有类中定义的属性和方法 其中 由类生成实例的过程 我们称之为 实例化 实例化是把抽象的类转换为具体的对象 实例 相当于把人类这个抽象的概念转化为具体的某个人 张三 对象是系统中用来描述客观事物的一个实体 它是构成系统的一个基本单位 一个对象由一组属性和对这组属性进行操作的一组方法组成 说明 对象只描述客观事物本质的 与系统目标有关的特征 创建对象 创建Person类的一个对象p再创建Person类对象q Personp newPerson 类名 对象名 内存分配操作符 与类同名 Personq newPerson 创建对象举例 01publicclassTest 02publicstaticvoidmain String args 03Personp newPerson 04p name zhangsan 05p age 33 06p height 1 73 07p sayHello 08Personq newPerson 09q name lisi 10q age 44 11q height 1 74 12q sayHello 13 14 构造器Constructor 构造器 也称为构造方法 构造函数 它在类里起着至关重要的作用 有参数构造器和无参数构造器 类中特殊的方法一般情况权限为public 没有返回值类型 不要写void 方法名称与类名完全一致 作用 完成对象的创建 即完成对象的实例化 不能直接调用 只能由内存分配操作符 new 来调用 构造器举例 01publicclassPerson01 02Stringname 03intage 04doubleheight 0506publicPerson Stringn inta doubleh 07name n 08age a 09height h 10 1112publicvoidsayHello 13System out println Hello mynameis name 14 构造器续 通过实例Person 可以看到使用带参数的构造器进行实例化简化了代码 在创建对象的同时给对象的属性赋值 此时 类由一个抽象的蓝图变化为一个具体的对象 同时对象的属性已经赋值 通过多次调用构造器 一个类可以实例化出多个对象 构造器也是函数 方法 但是它是特殊的方法而已 它也可以像普通函数一样发生重载 通常一个类中不止一个构造函数 而是有多个不同参数的构造器 用户可以根据需要选择不同的构造器创建对象 注意在开发中 我们在编写自己的类时 应该根据需要提供相应的构造器 保证在使用这个类时 能够选择到合适的构造函数 所有的对象都是通过构造器来创建的 也可以说任何对象都是通过内存分配操作符new创建和开辟内存空间的 如果在开发时 没有明确的写出构造函数 在编译时编译器会发现该类没有构造器 这时编译器会自动的给这个类增加一个构造器 该构造器没有任何参数 我们称之为 默认的空构造器 相反 如果我们在编写时 手写了一个或是若干个带参的构造器 那么 这个不带参的空构造器就不会再自动产生并存在 在这样的情况下 如果在某些情况下还想使用这样的无参数默认构造器的话 最好还是养成手写出这个无参数的构造器来 以备后用 否则在这个类中 将不再存在这个默认的构造器 默认构造器 默认的空构造器 对象创建的内存模型 在java中所有的变量 数组 对象都是分配在内存中的 根据变量类型的不同分配的内存也有所不同 Java中主要有3种类型的变量 局部变量 定义在方法体中的变量 或是方法的形参 实例变量 即类的属性 也是全局变量 静态变量 在类中声明为static的属性 内存的类别栈stack 栈的存取速度比堆快 效率高 在栈内保存基本数据类型的局部变量和对象的引用值 堆heap 堆可以保存那些对空间要求较大的变量 如对象的属性和数组的元素 在堆内存中开辟空间 只能通过内存分配操作符号new 凡是出现关键字new的地方必定分配了一个堆内存 我们在实例化一个对象时 同时操作了栈内存和堆内存 在栈内保存对象的首地址 即引用 在堆内存中保存了对象的属性 对对象的所有操作只能通过引用完成 一旦引用出栈释放没有任何引用指向该对象 对象就变成垃圾失效 堆和栈分别存储哪些变量 对象创建的内存模型 续 Personp newPerson lisi 44 1 74 0 x8000 1 74 44 lisi Personp 0 x8000 name age height 对象创建的内存模型 续 Personp newPerson zhang 33 1 73 Personq newPerson lisi 44 1 74 0 x8000 0 x3000 1 74 44 lisi Personp 0 x3000 name age height 1 73 33 zhang name age height Personq 0 x8000 对象创建的内存模型 续 如上所示 对象的属性name age height都分配在堆内存中 但是对象名p q都分配在栈内存中 p q也称为对象的引用 reference 引用在java中是地址的同义词 访问对象 在其他类中或main方法中 若想访问对象的属性或是方法必须先实例化这个类 然后通过对象名 引用 和点操作符来完成 对象名 属性名 对象名 方法名 如果在类内的方法中 访问本类的属性和方法就可以直接访问了 匿名对象 有时候为了方便起见 我们直接使用匿名对象 所谓匿名对象就是没有对象名 对它的使用时一次性的 使用完毕它马上就称为垃圾 publicclassTest publicstaticvoidmain String args newPerson zhangsan 33 1 83 sayHello 练习 设计一个类 描述矩形Rectangle的特征widthheight包含一个drawRect 方法 在屏幕上使用 画出矩形 访问权限修饰符简介 最好记忆的两个权限修饰符是public和private 前者权限最大 后者最小 public修饰的属性和方法在任何位置都可以访问 不受任何限制 private修饰的属性和方法只有在类内部才能够访问 在其他类不能被访问 public protected friendly privatefriendly不是java的关键字 public权限最大的权限 没有任何限制private权限最小的权限 只限类内部访问见示例 this关键字 代表对象自身的引用一个引用指向调用该方法的当前对象形参名与属性名相同时必须使用this this关键字举例 01publicclassPerson 02privateStringname 03privateintage 04privatedoubleheight 0506publicPerson Stringname intage 07this name name 08this age age 09 10publicvoidsayHello 11System out println Hello mynameis name 12 13 垃圾回收机制 Java的垃圾回收机制是自动的 它保证程序健壮的主要手段 避免了由于程序员忘记回收内存而引起的内存泄漏 同时也避免了回收内存带来的代码繁琐 垃圾回收机制实际上是JVM内部运行的一个优先级比较低的后台线程 这种多线程的模式使得java具有更好的性能 完全不用程序员参与 垃圾回收机制仅仅作用于堆内存 于栈内存无关 对于程序员来说 对象何时变成垃圾呢 对象的引用被赋值为null Personp newPerson p null 一次性使用的匿名对象 newPerson sayHello 超出生命周期的 如 for intI 0 i 100 i Personp newPerson 这里 变量p被实例
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能网联传感器及控制器生产线项目环境影响报告书
- 深海养殖系统设计与优化方案
- 2025年电大社会保障学试题及答案
- 2025年外贸相关英语题库及答案
- 2025年高考电表改装真题及答案
- 市政供热老旧管网改造工程施工方案
- 离婚协议中双方个人隐私保护及信息共享限制样本
- 离婚协议子女抚养及财产分割法律依据范本
- 自然保护区生态环境保护方案
- 动力电池系统生产线项目技术方案
- 部编版2025-2026学年三年级上册语文期中测试情境卷A卷(含答案)
- 做更好的自己课件-2025-2026学年统编版道德与法治七年级上册
- 2023年贵州贵州贵安发展集团有限公司招聘考试真题及答案详解(夺冠)
- 移动照明车夜间施工租赁协议
- 重庆西南大学附中2025-2026学年九年级上学期开学考试语文试题
- 2025年大宗商品贸易业务流程优化计划
- 情感表达+课件+2025-2026学年人教版(2024)初中美术七年级上册
- 借名购车协议贷款协议书
- 2025年小升初数学考试试题(附答案)
- 2025年6月四川省高中学业水平合格性考试地理试题(解析版)
- 2024年北京事业编笔试题(附答案)
评论
0/150
提交评论