JAVA学习-第6章高级类特性.ppt

上传人:max****ui 文档编号:6360164 上传时间:2020-02-23 格式:PPT 页数:48 大小:491.05KB
返回 下载 相关 举报
JAVA学习-第6章高级类特性.ppt_第1页
第1页 / 共48页
JAVA学习-第6章高级类特性.ppt_第2页
第2页 / 共48页
JAVA学习-第6章高级类特性.ppt_第3页
第3页 / 共48页
点击查看更多>>
资源描述
江苏大学计算机学院Version2 0 第6章高级类特性 Page2 本章内容 Static关键字创建final类 方法和变量创建和使用枚举的类型使用静态导入语句创建抽象类和方法创建和使用接字符串相关类 String StringBuffer StringBuilder Math类 不重要 File类Date类 Calendar类 Page3 static关键字 在类中 用static声明的成员变量为静态成员变量 它为该类的公用变量 在第一次使用时被初始化 对于该类的所以对象来说 static成员变量只有一份 publicclassCount privateintserialNumber publicstaticintcounter 0 publicCount counter serialNumber counter publicclassTestCounter publicstaticvoidmain String args Count counter 100 CountC1 newCount CountC2 newCount static变量在某些方面与其他语言的全局变量类似 Java编程语言中没有全局变量 但是static变量是一个可以被类的任何实例访问的变量 Page4 static关键字 用static声明的方法为静态方法 又称类方法 在调用该方法时 不会将对象的引用传递给它 所以在static方法中不可访问非static的成员 静态的方法不再是针对某个对象调用 所以不能访问非静态成员classCount privateintserialNumber publicstaticintcounter 0 publicCount counter serialNumber counter publicstaticintgetCounter returncounter publicclassTestCounter publicstaticvoidmain String args System out println Count getCounter CountC1 newCount System out println Count getCounter 可以通过对象引用或类名 不需要实例化 访问静态成员 Page5 Static属性 publicstaticclass属性可没有类的实例从类的外部进行访问 Static方法 Static方法无需创建类的实例即可被调用 Static方法不能访问实例变量 Static初始化程序 类可在static块中包含在方法主体中不存在的代码 Static块代码在类被加载时仅执行一次 通常 static块用来初始化static 类 属性 static关键字 续 Page6 final关键字 final关键字用于安全性原因 它用来创建充当标准的类 它实现了以下限制 不能获取final类的子类 即final类不能被继承 不能覆盖final方法 final变量是常量 在final类中的所有方法和数据成员是显式的 引用类型的final变量 不能引用任何其他变量 Page7 空final变量 final变量不在其声明中被初始化 其初始化被延迟 空final实例变量必须在构建器中被赋值 空final本地变量可在方法的主体内随时被设置 它仅可设置一次 Page8 枚举的类型 enum类型字段由一组固定的常量组成 可使用enum关键字来定义enum类型 例如 指定一周每一天的enum类型 publicenumDay SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY enum类型只能取特定值的一个 所有enums从java lang Enum显示扩展 因为Java不支持多重继承 enum不能扩展为任何别的内容 Page9 静态导入 J2SE5 0提供静态导入功能 能够不受限制的访问静态成员 而不必使用类的名字限制它们 从类中导入静态成员 importstatic 或importstatic 单个或集中导入成员 importstaticcards domain Suit SPADES 或importstaticcards domain Suit 无需确定静态常量的资格 PlayingCardcard1 newPlayingCard SPADES 2 过度使用静态导入功能 使程序不可读或者无法维持 而且会破坏其命名空间和所有导入的静态成员 Page10 抽象类 用abstract关键字来修饰一个类时 这个类叫做抽象类 abstractclassclassname 成员变量 成员方法 用abstract来修饰一个方法时 该方法叫做抽象方法 是只声明首部没有方法体的成员方法abstractreturnTypeabstractMethod paramlist 含有抽象方法的类必须被声明为抽象类 抽象类必须被继承 抽象方法必须被重写 如果重写不了 应该声明自己为抽象 抽象方法只需声明 而不需实现 而且不允许使用final修饰abstract方法抽象类不能被实例化 但是它们可以被子类化 Page11 抽象类 抽象类定义其他类的通用属性和行为 它用作基类来获取相同类型的特定类 例如 abstractclassAnimal privateStringname Animal Stringname this name name publicabstractvoidenjoy AbstactclassCatextendsAnimal privateStringeyesColor Cat Stringn Stringc super n eyesColor c publicAbstactvoidenjoy 上述抽象方法enjoy由Animal类的子类来继承 子类Cat Dog和Monkey以不同的方式实现此方法 enjoy方法在Cat类中已被覆盖 classDogextendsAnimal privateStringfurColor Dog Stringn Stringc super n furColor c publicvoidenjoy System out println 狗叫声 classMonkeyextendsAnimal privateStringhead Monkey Stringn Stringc super n head c publicvoidenjoy System out println 猴叫声 abstract类不能用new运算创建对象对于abstract类 我们不能使用new运算符创建该类的对象 需产生其子类 由子类创建对象 如果一个类是abstract类的子类 它必须具体实现父类的abstract方法 这就是为什么不允许使用final修饰abstract方法的原因 一个abstract类只关心它的子类是否具有某种功能 并不关心功能的具体行为 功能的具体行为由子类负责实现 抽象类中的抽象方法可以强制子类必须给出这些方法的具体实现 抽象类 Page13 接口 接口 interface 是抽象方法和常量值的定义的集合 公共接口是在客户端代码和实现该接口的类之间的一种约定 从本质上讲 接口是一种特殊的抽象类 这种抽象类中只包含常量和方法的定义 而没有变量和方法的实现 抽象类仅用于在类之间有一种关系的情况 接口定义举例 publicinterfaceRunner publicstaticfinalintid 1 publicvoidstart publicvoidrun publicvoidstop Page14 接口特性 接口可以多重实现 接口中声明的属性默认为publicstaticfinal的 也只能是publicstaticfinal的 接口中只能定义抽象方法 而且这些方法默认为public的 也只能是public的 接口可以继承其它的接口 并添加新的属性和抽象方法 Page15 接口 多个无关的类可以实现同一个接口 一个类可以实现多个无关的接口 与继承关系类似 接口与实现类之间存在多态性 定义Java类的语法格式 class extends implements Page16 接口举例 interfaceSinger publicvoidsing publicvoidsleep classStudentimplementsSinger privateStringname Student Stringname this name name publicvoidstudy System out println studying publicStringgetName returnname publicvoidsing System out println studentissinging publicvoidsleep System out println studentissleeping Page17 接口举例 interfaceSinger publicvoidsing publicvoidsleep interfacePainter publicvoidpaint publicvoideat classStudentimplementsSinger privateStringname Student Stringname this name name publicvoidstudy System out println studying publicStringgetName returnname publicvoidsing System out println studentissinging publicvoidsleep System out println studentissleeping Page18 接口举例 classTeacherextendsObjectimplementsSinger Painter privateStringname publicStringgetString returnname Teacher Stringname this name name publicvoidteach System out println teaching publicvoidsing System out println teacherissinging publicvoidsleep System out println teacherissleeping publicvoidpaint System out println teacherispainting publicvoideat System out println teacheriseating Page19 接口举例 publicclassTest publicstaticvoidmain Stringargs Singers1 newStudent le s1 sing s1 sleep Singers2 newTeacher steven s2 sing s2 sleep Painterp1 Painter s2 也可以当作Painter来看p1 paint p1 eat 输出结果 studentissingingstudentissleepingteacherissingingteacherissleepingteacherispaintingteacheriseating testI Test java 接口回调 接口回调是指 可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中 那么该接口变量就可以调用被类实现的接口中的方法 实际上 当接口变量调用被类实现的接口中的方法时 就是通知相应的对象调用接口的方法 InterfaceShowMassage voidshowInfo Strings classTVimplementsShowMassage publicvoidshowInfo Strings System out println s PublicclassTest publicstaticvoidmain String args ShowMassagem 声明接口m newTV 接口变量中存放对象的引用m showInfo 长虹电视机 接口回调 Page21 接口的使用 声明期望实现一个或更多的类的方法确定对象的编程接口而无需显示类的实际主体捕捉非相关类之间的相似性而无需强制类的关系通过声明实现几个接口的类来模拟多重继承 接口 Page22 接口用法总结 通过接口可以实现不相关类的相同行为 而不需要考虑这些类之间的层次关系 就像人拥有一项本领 通过接口可以指明多个类需要实现的方法 描述这项本领的共同接口 通过接口可以了解对象的交互界面 而不需了解对象所对应的类 使用接口 还是抽象类 interface同时赋予了接口和抽象类的好处如果父类可以不带任何函数定义 或任何成员变量 那么优先使用接口 内部类 Java支持在一个类中声明另一个类 这样的类称作内部类 而包含内部类的类称为外部类 内部类可以有自己的成员变量和方法使用内部类必须先了解内部类与包围它的外部类之间的关系 以及它们的成员之间如何实现相互访问内部类的类体中不可以声明类变量 静态成员变量 和类方法 静态成员方法 外嵌类的类体中可以用内部类声明对象 作为外嵌类的成员 在内部类中访问外部类 外部类把内部类看做它的一个成员 内部类的身份如同外部类的其他成员变量和成员方法一样 内部类如同外部类的其他成员一样可以用public private protected和default修饰 一个类内部的内部成员之间可以相互访问 由于外部类把内部类看做它的一个成员 所以内部类也可以可以访问外部类的所有成员变量和成员方法 包括外部类的private成员和private方法 外部类通过创建内部类对象访问内部类的成员 外部类的main方法或者其他类中引用内部类必须使用内部类完整的类标识 在外部类中访问内部类 定义内部类的目的之一是为了实现封装 实现信息的隐藏 因为内部类的类名只能出现在外部类中 或者外部类方法的语句块内 内部类隐藏于外部类内 外部类的方法可以通过创建内部类对象来引用内部类成员 publicclassOuterClass 外部类classGetYear 内部类privateinti 2008 publicvoidshowYear System out println i classGetInfor 内部类privateStringinf GetInfor Stringinf this inf inf publicvoidshowInfor System out println Welcomto inf publicvoiduserOuter Stringinformation 外部类方法GetYeary newGetYear 创建内部类对象y showYear GetInford newGetInfor information 创建内部类对象d showInfor publicstaticvoidmain String args OuterClassu newOuterClass u useOuter Beijing 静态内部类的应用 如果一个内部类是静态的 那么这个类就自动成为顶级类 没有父类静态内部类的方法 不管是静态方法还是非静态方法 只能直接访问外部类中静态成员 要访问外部类中非静态成员则必须在内部类创建外部类对象 通过对象名访问外部静态成员 而且非静态内部类不能声明静态成员 由于内部类被声明为静态后无法正常访问外部类非静态成员 这收到了很大的限制 一般情况下 当一个内部类不需要访问外部类成员 或者是需要声明静态成员 或者是仅仅为了隐藏在外部类内时 可以把内部类声明为静态的 静态内部类的使用主要有几个方面原因 需要在内部类定义静态成员希望隐藏内部类避免类名重复 在开发大型的应用程序的时候需要设计大量的类 类存在重名的可能 为了避免这种情况 可以把可能重名的类设置为static public的内部类 其他类在引用的时候要是有完整的内部类名标识 外部类名 内部类名 这样就可以避免重复 静态内部类的应用 publicclassstaticInclass publicstaticclassPerson privateintage privateStringname staticintcount 0 Person Stringn inta name n age a count publicvoiddis System out println count count t name t age publicstaticvoidmain Stringargs staticInclass Personp1 newstaticInclass Person John 20 p1 dis staticInclass Personp2 newstaticInclass Person Jone 22 p2 dis staticInclass Personp3 newstaticInclass Person Jim 21 p3 dis 静态内部类的特殊用处 在开发应用程序的时候要编写大量的类 并需要对类进行调试 根据静态内部类的特点 编写一个类时 在类中可以定义一个静态内部类以提供一个独立的 可选的辅助功能 如用在代码测试和演示 这个方便而有效 publicclassOuter 外部类privateinti j staticints 1 Outer inta intb i a j b publicvoiddis System out println i j publicstaticclassTestOuter 含有静态main方法的静态内部类publicstaticvoidmain String args 测试外部类Outert newOuter 10 100 创建外部类对象t dis System out println s 静态内部类可以访问外部类的静态成员 为了测试外部类而定义的内部类必须是静态的 因为只有静态内部类才可以定义静态的main方法 在该方法完成对外部类的测试 String类 java lang String类代表不可变的字符序列 xxxxx 为该类的一个对象 String类的常见构造方法 String Stringoriginal 创建一个String对象为original的拷贝 String char value 用一个字符数组创建一个String对象String char value intoffset intcount 用一个字符数组从offset项开始的count个字符序列创建一个String对象 String类举例 1 publicclassTest publicstaticvoidmain String args Strings1 hello Strings2 world Strings3 hello System out println s1 s3 trues1 newString hello s2 newString hello System out println s1 s2 falseSystem out println s1 equals s2 truecharc s u n j a v a Strings4 newString c Strings5 newString c 4 4 System out println s4 sunjavaSystem out println s5 java String类常用方法 1 publiccharcharAt intindex 返回字符串中第index个字符 publicintlength 返回字符串的长度 publicintindexOf Stringstr 返回字符串中出现str的第一个位置publicintindexOf Stringstr intfromIndex 返回字符串中从fromIndex开始出现str的第一个位置publicbooleanequalsIgnoreCase Stringanother 比较字符串与another是否一样 忽略大小写 publicStringreplace charoldChar charnewChar 在字符串中用newChar字符替换oldChar字符 String类举例 2 publicclassTest publicstaticvoidmain String args Strings1 sunjava s2 SunJava System out println s1 charAt 1 uSystem out println s2 length 8System out println s1 indexOf java 4System out println s1 indexOf Java 1System out println s1 equals s2 falseSystem out println s1 equalsIgnoreCase s2 trueStrings 我是程序员 我在学java Stringsr s replace 我 你 System out println sr 你是程序员 你在学java String类常用方法 2 publicbooleanstartsWith Stringprefix 判断字符串是否以prefix字符串开头publicbooleanendsWith Stringsuffix 判断字符串是否以prefix字符串结尾publicStringtoUpperCase 返回一个字符串为该字符串的大写形式publicStringtoLowerCase 返回一个字符串为该字符串的小写形式publicStringsubstring intbeginIndex 返回该字符串从beginIndex开始到结尾的子字符串publicStringsubstring intbeginIndex intendIndex 返回该字符串从beginIndex开始到endIndex结尾的子字符串publicStringtrim 返回将该字符串去掉开头和结尾空格后的字符串 String类举例 3 publicclassTest publicstaticvoidmain String args Strings WelcometoJavaWorld Strings1 sunjava System out println s startsWith Welcome trueSystem out println s endsWith World falseStringsL s toLowerCase StringsU s toUpperCase System out println sL welcometojavaworld System out println sU WELCOMETOJAVAWORLD StringsubS s substring 11 System out println subS JavaWorld Stringsp s1 trim System out println sp sunjava String类常用方法 3 静态重载方法publicstaticStringvalueOf 可以将基本类型数据转换为字符串 例如 publicstaticStringvalueOf doubled publicstaticStringvalueOf inti b 方法publicString split Stringregex 可以将一个字符串按照指定的分隔符分隔 返回分隔后的字符串数组 String类举例 4 publicclassTest publicstaticvoidmain String args intj 1234567 StringsNumber String valueOf j j System out println j是 sNumber length 位数 Strings Mary F 1976 String sPlit s split for inti 0 i sPlit length i System out println sPlit i StringBuffer类 java lang StringBuffer代表可变的字符序列 StringBuffer和String类似 但StringBuffer可以对其字符串进行改变 StringBuffer类的常见构造方法 StringBuffer 创建一个不包含字符序列的 空 的StringBuffer对象 StringBuffer Stringstr 创建一个StringBuffer对象 包含与String对象str相同的字符序列 StringBuffer常用方法 1 重载方法publicStringBufferappend 可以为该StringBuffer对象添加字符序列 返回添加后的该StringBuffer对象引用 例如 publicStringBufferappend Stringstr publicStringBufferappend StringBuffersbuf publicStringBufferappend char str publicStringBufferappend char str intoffset intlen publicStringBufferappend doubled publicStringBufferappend Objectobj StringBuffer常用方法 2 重载方法publicStringBufferinsert 可以为该StringBuffer对象在指定位置插入字符序列 返回修改后的该StringBuffer对象引用 例如 publicStringBufferinsert intoffset Stringstr publicStringBufferinsert intoffset doubled 方法publicStringBufferdelete intstart intend 可以删除从start开始到end 1为止的一段字符序列 返回修改后的该StringBuffer对象引用 StringBuffer常用方法 3 和String类含义类似的方法 publicintindexOf Stringstr publicintindexOf Stringstr intfromIndex publicStringsubstring intstart publicStringsubstring intstart intend publicintlength 方法publicStringBufferreverse 用于将字符序列逆序 返回修改后的该StringBuffer对象引用 StringBuffer类举例 publicclassTest publicstaticvoidmain String args Strings Mircosoft char a a b c StringBuffersb1 newStringBuffer s sb1 append append IBM append append Sun System out println sb1 StringBuffersb2 newStringBuffer 数字 for inti 0 i 9 i sb2 append i System out println sb2 sb2 delete 8 sb2 length insert 0 a System out println sb2 System out println sb2 reverse 输出结果 Mircosoft IBM Sun数字0123456789abc数字012345543210字数cba Math类 java lang Math提供了一系列静态方法用于科学计算 其方法的参数和返回值类型一般为double型 abs绝对值acos asin atan cos sin tansqrt平方根pow doublea doubleb a的b次幂log自然对数expe为底指数max doublea doubleb min doublea doubleb random 返回0 0到1 0的随机数longround doublea double型的数据a转换为long型 四舍五入 toDegrees doubleangrad 弧度 角度toRadians doubleangdeg 角度 弧度 File类 java io File类代表系统文件名 路径或文件名 File类的常见构造方法 publicFile Stringpathname 以pathname为路径创建File对象 如果pathname是相对路径 则默认的当前路径在系统属性user dir中存储 File的静态属性Stringseparator存储了当前系统的路径分隔符 通过File对象可以访问文件的属性 publicbooleancanRead publicbooleancanWrite publicbooleanexists publicbooleanisDirectory publicbooleanisFile publicbooleanisHidden publiclonglastModified publiclonglength publicStringgetName publicStringgetPath 通过File对象创建空文件或目录 在该对象所指的文件或目录不存在的情况下 publicbooleancreateNewFile throwsIOExceptionpublicbooleandelete publicbooleanmkdir TestFile java ListFile java File类 Date类 Date类在java util包中 使用Date类的无参数构造方法创建的对象可以获取本地当前时间 Date对象表示时间的默认顺序是 星期 月 日 小时 分 秒 年 例如 SatApr2821 59 38CST2001 可以使用DataFormat的子类SimpleDateFormat来实现时期的格式化 SimpleDateFormat有一个常用构造方法 publicSimpleDateFormat Stringpattern 该构造方法可以用参数pattern指定的格式创建一个对象 pattern中应当含有一些特殊意义字符 这些特殊的字符被称做元字符 例如 y或yy表示用2位数字输出年份 yyyy表示用4为数字输出年份 M或MM表示用2为数字或文本输出月份 如果想用汉字输出月份 pattern中应连续包含至少3个M 如 MMM d或dd表示用2为数字输出日 H或HH表示用两位数字输出小时 m或mm表示用两位数字输出分 s或ss表示用两位数字输出秒 E表示用字符串输出星期 Date类 Calendar类 Calendar类在java util包中 使用Calendar类的static方法getInstance 可以初始化一个日历对象 如 Calendarcalendar calendar getInstance 然后 calendar对象可以调用方法 set intyear intmonth intdate set intyear intmonth intdate inthour intminute set intyear intmonth intdate inthour intminute intsecond 将日历翻到任何一个时间 当参数year取负数时表示公元前 calendar对象调用方法 publicintget intfield 可以获取有关年份 月份 小时 星期等信息 参数field的有效值由Calendar的静态常量指定 例如 calendar get Calendar MONTH 返回一个整数 如果该整数是0表示当前日历是在一月 该整数是1表示当前日历是在二月等 日历对象调用publiclonggetTimeInMillis 可以将时间表示为毫秒 Calendar类
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!