




已阅读5页,还剩52页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三讲Java与面向对象技术 1 数组2 字符串3 面向对象的概念4 Java中的类 方法和变量 1 数组 一维数组 定义 一维数组的定义方式为 typearrayName type arrayName 指明该变量是一个数组类型变量 Java在数组的定义中并不为数组元素分配内存 因此 中不用指出数组中元素的个数 即数组长度 而且对于如上定义的一个数组是不能访问它的任何元素的 必须经过初始化后 才能应用数组的元素 例如 intintArray 声明了一个整型数组 数组中的每个元素为整型数据 一维数组定义之后 必须经过初始化才可以引用 数组的初始化分为静态初始化和动态初始化两种 静态初始化 在定义数组的同时对数组元素进行初始化 例如 intintArray 1 2 3 4 定义了一个含有4个 元素的int型数组 1 数组 一维数组 初始化 动态初始化 使用运算符new为数组分配空间 对于简单类型的数组 其格式如下 typearrayName newtype arraySize type arrayName newtype arraySize 对于复合类型的数组 需要经过两步空间分配 首先 typearrayName newtype arraySize 然后 arrayName 0 newtype paramList arrayName arraySize 1 newtype paramList 1 数组 一维数组 初始化 例如 StringstringArrar 定义一个String类型的数组stringArray newString 3 给数组stringArray分配3个应用 空间 初始化每个引用值为nullstringArray 0 newString how stringArray 1 newString are stringArray 2 newString you 初始化各数组元素 1 数组 一维数组 初始化 元素的引用方式为 arrayName index index为数组下标 可以是整型常数或表达式 如 arrayName 1 arrayName i arrayName 6 i 等 下标是0序的 即从0开始 一直到数组长度减1 另外 与C C 中不同 Java对数组元素要进行越界检查以保证安全性 同时 对于每个数组都有一个属性length指明它的长度 例如 intArray length指明数组intArray的长度 1 数组 一维数组 引用 publicclassArrayTest publicstaticvoidmain Stringargs inti inta newint 5 for i 0 i 0 i System out println a i a i 该程序对数组中的每个元素赋值 然后按逆序输出 1 数组 一维数组 示例 运行结果为 C javaArrayTesta 4 4a 3 3a 2 2a 1 1a 0 0 二维数组的定义方式typearrayName type arrayName 与一维数组一样 这时对数组元素也没有分配内存空间 同样要使用运算符new来分配内存 然后才可以访问每个元素 二维数组的初始化也分为静态和动态两种 静态初始化 在定义数组的同时为数组分配空间 intintArray 1 2 2 3 3 4 动态初始化 对高维数组来说 分配内存空间有下面两种方法 1 直接为每一维分配空间 如 inta newint 2 3 1 数组 二维数组 定义 2 从最高维开始 而且必须从最高维开始 分别为每一维分配空间 如 Strings newString 2 s 0 newString 2 s 1 newString 3 s 0 0 newString Good s 0 1 newString Luck s 1 0 newString to s 1 1 newString you s 1 2 newString 1 数组 二维数组 初始化 二维数组的引用对二维数组中每个元素 引用方式为 arrayName index1 index2 其中index1和index2为数组下标 为整型常数和表达式 都是0序的 思考练习 分别用一维数组和二维数组输出8行杨辉三角 1 数组 二维数组 引用及示例 数组是用来表达一组同类型数据的数据结构在Java中数组是定长的 数组的大小不会动态变化数组变量的值是数组对象实例的引用在java util包中的Arrays类提供了一些操作数组的方法在java util包中的Vector提供了动态变长数组的功能 Vector的容量可以随着需要变化 1 数组 java util Arrays intbinarySearch typea typekey 数组a必须已经排序 否则返回值无意义当数组a中有重复的值时 该方法返回的值不确定如果key存在 则返回它在数组a中的位置如果不存在 则返回它的 插入位置 1 voidfill typea typeval voidfill typea intfromIndx inttoIndex typeval 包括a fromIndx 但不包括a toIndex fromIndx toIndex时 范围是一个空的范围 1 数组 java util Arrays booleanequals typea typea2 两个数组大小相同 并且每一个元素相等两个null数组是相等的 1 数组 java util Arrays voidsort typea voidsort typea intfromIndx inttoIndex voidsort typea Comparatorc voidsort typea intfromIndx inttoIndex Comparatorc 包括a fromIndx 但不包括a toIndex fromIndx toIndex时 范围是一个空的范围排序算法都具有n log n 的计算复杂性 效率高排序算法都保证稳定 即排序算法不会改变相等元素的顺序对不同类型的数组 算法的实现并不完全相同可以用自己的Comparator对象声明自定义的顺序 1 数组 java util Arrays java lang Systemvoidarraycopy Objectsrc intsrc position Objectdst intdst position intlength 范围不能越界可对任何同类型的数组进行复制例 publicclassarrCopy publicstaticvoidmain Stringargs inti 1 数组 数组的复制 2 字符串 字符串是字符的序列 它是组织字符的基本数据结构 从某种程度上来说有些类似于字符的数组 在Java中 字符串被当作对象来处理 程序中需要用到的字符串可以分为两大类 一类是创建之后不会再做修改和变动的字符串常量 另一类是创建之后允许再做更改和变化的字符串变量 对于字符串常量 由于程序中经常需要对它做比较 搜索之类的操作 所以通常把它放在一个具有一定名称的对象之中 由程序对该对象完成上述操作 在Java中 存放字符串常量的对象用String类 对于字符串变量 由于程序中经常需要对它做添加 插入 修改等操作 一般存放在StringBuffer类的对象中 要创建类String的一个对象并进行初始化 需要调用类String的构造方法 类String中提供了下面的一些构造方法 String 无参数的缺省的构造方法用来创建一个空串 Strings newString String Stringvalue 利用常量创建一个新的String对象Strings hello String charvalue 由数组创建charchars a b c Strings newString chars String char intstartIndex intnumChars 这种方法用来创建一个非空串 并且指明所创建的字符串在字符数组中的起始地址以及所包含的字符个数 charchars a b c d e f Strings newString chars 2 3 该方法生成的串s为 cde 注意数组的下标从0开始 2 字符串 String 创建 1 length此方法返回字符串的字符个数 2 charAt intindex 该方法返回字符串中index位置上的字符 3 getChars intsrcbegin intend charbuf intdstbegin 从字符串中提取一个以上的字符 其中 srcbegin为要提取的第一个字符的位置 end为要提取的最后一个字符的位置 字符数组buf 存放目的字符串 dstbegin为提取的字符串在目的串中的起始位置 4 indexOf Stringstr 和lastIndexOf Stringstr 返回str在字符串中第一次和最后一次出现的位置 5 用来实现字符串的连接 2 字符串 String 基本方法 pareTo Stringstr 该方法依次比较两个字符串中每个字符的大小 如果源串较小 则返回一个小于0的值 如相等则返回0 否则返回一个大于0的值 7 equals objectstr 判断两个字符串是否相等 相等则返回true 不等则返回false 8 concat Stringstr 将当前字符串对象与给定的字符串str连接起来 9 replace charoldChar charnewChar 将串中出现的特定字符用新的字符代替 10 substring intbeginIndex intendIndex 用来得到字符串中指定范围内的子串 11 toLowerCase 把串中的所有字符转换成小写12 toUpperCase 把串中的所有字符转换成大写 2 字符串 String 基本方法 publicclassRotor publicstaticvoidmain Stringargs Stringstr rotor inti 0 n booleanyes true if args length 0 str args 0 System out println str str n str length charch1 ch2 while yes 2 字符串 String 示例 publicclassRotor publicstaticvoidmain Stringargs Stringstr rotor inti 0 n booleanyes true if args length 0 str args 0 System out println str str n str length Stringtemp sub1 for i 0 i n i sub1 str substring i i 1 temp sub1 temp System out println temp temp System out println 算法二 str equals temp 2 字符串 String 示例 运行javaRotor结果为 str rotorch1 rch2 r算法一 truetemp rotor算法二 true 运行javaRotor12345结果为 str 12345ch1 1ch2 5算法一 falsetemp 54321算法二 false main Stringargs 可以使用参数args 作为输入数据 包括 面向对象的分析 OOA Object OrientedAnalysis 面向对象的设计 OOD Object OrientedDesign 面向对象的程序设计 OOPL Object OrientedProgram 面向对象技术主要围绕以下几个概念 对象 抽象数据类型 类 类型层次 子类 继承性 多态性 3 面向对象的概念 对象有两个层次的概念 现实生活中对象指的是客观世界的实体 程序中对象就是一组变量和相关方法的集合 其中变量表明对象的状态 方法表明对象所具有的行为 3 面向对象的概念 对象 可以将现实生活中的对象经过抽象 映射为程序中的对象 对象在程序中是通过一种抽象数据类型来描述的 这种抽象数据类型称为类 Class 3 面向对象的概念 对象 类是描述对象的 基本原型 它定义一类对象所能拥有的数据和能完成的操作 在面向对象的程序设计中 类是程序的基本单元 相似的对象可以归并到同一个类中去 就像传统语言中的变量与类型关系一样 程序中的对象是类的一个实例 是一个软件单元 它由一组结构化的数据和在其上的一组操作构成 3 面向对象的概念 类 为什么要使用类 采用简单数据类型表示现实世界中概念的局存在很大的限性 例如 采用int型数据表示一个日期概念 需要使用3个变量 intday month year 表示2个人的生日 就要使用6个变量 并且在使用中必须时刻注意三者的联系和约束关系同时在使用日期概念时要同时对三个变量进行访问使用类可以把现实问题中的对象映射为程序中的一个整体 类 类的成员 变量 指对象的所知道的状态 方法 指对象的功能单元 3 面向对象的概念 类 类中不但有变量 还有与之相关的操作所定义的方法 将变量和方法封装在一个类中 可以对成员变量进行隐藏 外部对类成员的访问都通过方法进行 能够保护类成员不被非法修改 classBirthDate publicintday month year publicinttomorrow BirthDatemybirth yourbirth BirthDatedate 已知当前日期对象 求第2天的日期对象 date day date day 1 如果date day已经为31 操作结果是非法状态 可以定义一个成员方法tomorrow 求第2天的日期对象 外部要获得当前日期的后一天时 只要调用 date tomorrow 3 面向对象的概念 类 4 Java中的类 方法和变量 类定义的语法规范 类的严格定义及修饰字 类的修饰字 public abstract final 缺省方式为friendly 变量修饰字 变量数据类型变量名1 变量名2 变量初值 变量的定义及修饰字 public protected private static final transient volatile 成员变量的类型可以是Java中任意的数据类型 包括简单类型 类 接口 数组 修饰符 表示变量的访问权限 static 表示是一个类成员变量 静态 final 表示是常量 transient 表示是临时变量 3 Java中的类 方法和变量 变量定义的语法规范 类变量的生存期不依赖于对象 相当于C语言中全局变量的作用 其它类可以不用通过创建该类的实例 直接通过类名访问它们 publicclassStaticVar publicstaticintnumber 5 publicclassOtherClass publicvoidmethod intx StaticVar number 3 Java名字空间及访问规则 static 类变量和类方法 static number 5 3 Java中的类 方法和变量 变量定义的示例 PublicclassAm intx staticinty ClassBm publicstaticvoidmain Stringargs Amabc1 newAm Amabc2 newAm abc1 x 8 abc2 x 10 abc1 y 8 abc2 y 10 System out println abc1 x System out println abc2 x System out println abc1 y System out println abc2 y 运行结果 8101010 方法修饰字 返回类型方法名称 参数1 参数2 throwsexceptionList statements 方法体 方法的内容 方法的定义及修饰字 public protected private static final abstract native synchronized 返回类型可以是任意的Java数据类型 当一个方法不需要返回值时 返回类型为void 参数的类型可以是简单数据类型 也可以是引用数据类型 数组 类或接口 参数传递方式是值传递 方法体是对方法的实现 它包括局部变量的声明以及所有合法的Java指令 局部变量的作用域只在该方法内部 3 Java中的类 方法和变量 方法定义的语法规范 类方法则相当于C语言中的全局函数 其他的类也可以直接通过类名来访问类方法 Java程序的入口方法main 就是一个类方法 publicclassGeneralFunction publicstaticintaddUp intx inty returnx y publicclassUseGeneral publicvoidmethod inta 9 intb 10 intc GeneralFunction addUp a b 3 Java名字空间及访问规则 static 类变量和类方法 classA staticvoidchange Strings StringBuffersb s aaaa 此语句不起作用sb setLength 0 sb append aaaa publicstaticvoidmain Stringargs Strings bbbb StringBuffersb newStringBuffer bbbb change s sb System out println s System out println sb 输出结果 bbbbaaaa 3 Java中的类 方法和变量 参数的传递方式是值传递 不正确的引用classStaticError Stringmystring hello publicstaticvoidmain Stringargs System out println mystring 编译时错误信息 nonstaticvariablemystringcannotbereferencedfromastaticcontext System out println mystring 为什么不正确 只有对象的方法可以访问对象的变量 3 Java名字空间及访问规则 static 类变量和类方法 解决的办法1 将变量改成类变量classNoStaticError staticStringmystring hello publicstaticvoidmain Stringargs System out println mystring 3 Java名字空间及访问规则 static 类变量和类方法 解决的办法2 先创建一个类的实例classNoStaticError Stringmystring hello publicstaticvoidmain Stringargs NoStaticErrornoError noError newNoStaticError System out println noError mystring 3 Java名字空间及访问规则 static 类变量和类方法 一个简单的类 classCar intcar number voidset number intcar num car number car num voidshow number System out println MycarNo is car number classCarDemo publicstaticvoidmain Stringargs CarDemocar newCar DemoCar set number 3838 DemoCar show number MycarNo is 3838 3 Java中的类 方法和变量 一个简单的类 1 对象的生成通过new操作符生成一个对象 例如 CardemoCar demoCar newCar 2 对象的构造过程为对象开辟空间 并对对象的成员变量进行缺省的初始化 对成员变量进行指定的初始化 调用构造方法 构造方法的名字和类名相同 类似方法 没有返回值 在对象建立时为对象的成员变量赋予初始值 3 Java中的类 方法和变量 对象 3 对象的使用通过运算符 可以实现对变量的访问和方法的调用 例如 BirthDatedate intday day date day 引用date的成员变量daydate tomorrow 调用date的方法tomorrow 4 对象的销毁Java能自动判断对象是否在使用 自动销毁不使用的对象 收回对象所占的资源 也可使用析构方法finalize 随时销毁一个对象 没有参数 没有返回值 一个类只有一个finalize 方法 3 Java中的类 方法和变量 对象 封装把对象的所有组成部分组合在一起 1 封装的目的 隐藏类的实现细节 迫使用户通过接口去访问数据 增强代码的可维护性 2 设置访问权限 public protected private 默认类权限 public 默认类成员权限 四个 3 Java中的类 封装 当一个类可以被访问时 对类内的成员变量和成员方法而言 其应用范围可以通过施以一定的访问权限来限定 同一个类中同一个包中不同包中的子类不同包中的非子类 任意类 private default protected public 3 Java中的类 封装 3 Java名字空间及访问规则 public 任何其它类 对象只要可以看到这个类的话 那么它就可以存取变量的数据 或使用方法 protected 同一类 同一包可以使用 不同包的类要使用 必须是该类的子类 private 不允许任何其他类存取和调用 friendly default 前边没有修饰字的情况 在同一程序包中出现的类才可以直接使用它的数据和方法 继承是子类利用父类中定义的方法和变量 就像它们属于子类本身一样 classCar intcolor number intdoor number intspeed publicvoidpush break publicvoidadd oil classTrash CarextendsCar doubleamount publicvoidfill trash 3 Java中的类 继承 类的继承 classCar intcar number voidset number intcar num car number car num voidshow number System out println MycarNo is car number 3 Java中的类 继承 classTrashCarextendsCar intcapacity voidset capacity inttrash car capacity capacity trash car capacity voidshow capacity System out println Mycapacityis capacity 3 Java中的类 继承 Car是父类 TrashCar是子类 TrashCar中继承了Car中的两个方法 同时又增加了两个新方法 3 Java中的类 继承 子类是作为另一个类的扩充或修正而定义的一个类 3 Java中的类 子类 继承性是面向对象程序设计语言的另一基本特征 通过继承可以实现代码的复用 继承而得到的类为子类 被继承的类为父类 父类包括所有直接或间接被继承的类 Java中不支持多重继承 通过在类的声明中加入extends子句来创建一个类的子类 classSubClassextendsSuperClass 如果缺省extends子句 则该类为java lang Object的子类 子类可以继承父类中访问权限设定为public protected default的成员变量和方法 但是不能继承访问权限为private的成员变量和方法 同名的成员变量不能继承 同名的成员方法被覆盖 3 Java中的类 继承 当子类中的变量名与父类的相同 父类的变量被遮盖 3 Java名字空间及访问规则 何时选择继
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第三单元 运动之美-视觉传达设计-第2课 吉祥物设计(说课稿)-人教版(2024)初中美术七年级上册
- 2024-2025学年新教材高中数学 第八章 立体几何初步 8.1 基本立体图形(3)说课稿 新人教A版必修第二册
- 2025年新能源汽车生物质燃料储存技术挑战与对策报告
- 能源行业数字化转型智能电网优化:新能源接入与消纳技术报告
- 2025年新能源汽车充电服务行业发展趋势及竞争格局分析报告
- 2025年新能源商用车辆市场新能源公交车应用场景优化报告:市场研究
- 2025年储能电池梯次利用在通信基站智能调度管理报告
- 新能源行业企业能源互联网架构与技术变革报告
- 2024-2025学年七年级生物上册 第二单元 第一章 第二节 植物细胞的说课稿 (新版)新人教版
- 2025年中国感光材料行业市场分析及投资价值评估前景预测报告
- 2025年云南交投集团校园招聘管理人员86人笔试参考题库附带答案详解
- 2025年小学语文一年级第一学期期中测试试卷
- 2025年6月上海市高考语文试题卷(含答案)
- (2025年标准)篮球免责协议书
- 码头突发事件培训
- 2024年湖南省龙山县卫生系统招聘考试(护理学专业知识)题含答案
- 热点地区物种多样性保护-洞察及研究
- 2025菏投热电(巨野)有限公司面向市属企业(内部)选聘运维人员60人笔试参考题库附带答案详解(10套)
- 黑龙江介绍课件
- 2025至2030中国汽车A柱行业项目调研及市场前景预测评估报告
- 2026年高考英语专题复习:必背近10高考英语高频词汇表
评论
0/150
提交评论