




已阅读5页,还剩144页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章类的重用 JAVA语言程序设计 2 目录 4 1类的继承4 2Object类4 3终结类与终结方法4 4抽象类4 5类的组合4 6包的应用4 7本章小结 3 4 1类的继承 继承是一种由已有的类创建新类的机制父类是所有子类的公共属性及方法的集合 子类则是父类的特殊化 子类根据需要增加它自己的新的状态和行为 Java只支持类的单继承 每个子类只能有一个直接父类继承机制可以提高程序的抽象程度 提高代码的可重用性在Java中每个类均为Object的子类 java lang 4 一 继承的概念 基类和派生类 基类 baseclass 也称超类 父类 superclass 是被直接或间接继承的类派生类 derived class 也称子类 subclass 继承其他类而得到的类继承所有祖先的状态和行为派生类可以增加变量和方法派生类也可以覆盖 override 继承的方法 5 一 继承的概念 is a关系 子类对象与父类对象存在 ISA 或 iskindof 的关系 6 动物类层次举例 一 继承的概念 举例 一般 具体 动物 蛇 蜥蜴 鲸 爬行动物 哺乳动物 狗 巨蜥 壁虎 壁虎 是一种 蜥蜴 爬行 动物是 动物的 一种 7 错误的基础关系 HASA 8 二 子类声明 在类的声明中 通过使用关键字extends来创建一个类的子类 格式如下 classchildClassextendsparentClass 类体 9 在一个公司中 有普通员工 Employees 及管理人员 Magagers 两类人员普通员工对象 Employees 可能有的属性信息包括员工号 employeeNumber 姓名 name 地址 address 电话号码 phoneNumber 管理人员 Managers 除具有普通员工的属性外 还可能具有下面的属性职责 responsibilities 所管理的职员 listOfEmployees 三 子类的继承性 类的设计举例 10 Employee与Manager的类图 三 子类的继承性 类的设计举例 父类子类 11 父类EmployeeclassEmployee intemployeeNumbe Stringname address phoneNumber publicvoidwork 子类ManagerclassManagerextendsEmployee 子类增加的成员变量Stringresponsibilities listOfEmployees EmployeeemployeeNumbe intaddress StringphoneNumber Stringwork void Managerresponsibilities Stringmanage void personName String 13 三 子类的继承性 类可以有两种重要的成员成员变量成员方法子类的成员中有一部分是子类自己声明定义的 另一部分是从它的父类继承的子类继承父类可分两种情况子类与父类同在一个包中子类与父类不在同一个包中 14 子类和父类在同一包中的继承性 如果子类和父类在同一个包中 那么 子类自然地继承了其父类中不是private的成员变量作为自己的成员变量 并且也自然地继承了父类中不是private的方法作为自己的方法 继承的成员变量或方法的访问权限保持不变 例子 workspace inherite Example4 15 java 15 publicclassFather privateintmoney floatweight height Stringhead hand foot voidspeak Strings System out println s publicclassSonextendsFather Stringhobby publicclassExample4 15 publicstaticvoidmain String args Sonboy boy newSon boy weight 1 80f boy height 120f boy head 一个头 boy hand 两只手 boy foot 两只脚 boy hobby 喜欢上网 有时上课还睡觉 boy speak 我是儿子 System out println boy hand n boy foot n boy head n 身高 boy weight boy height n boy hobby 我是儿子两只手两只脚一个头身高 1 8120喜欢上网 有时上课还睡觉 16 子类和父类不在同一包中的继承性 如果子类和父类不在同一个包中 子类可继承父类的protected public成员变量做为子类的成员变量 并且可继承父类的protected public方法为子类的方法 继承的成员变量或方法的访问权限保持不变 如果子类和父类不在同一个包中 子类不能继承父类的友好变量和友好方法 17 例子 Example4 inherite ABC javaExample4 DEF java packageinherite publicclassABC protectedintpro i 5 protectedvoidshow System out println pro i pro i importinherite ABC classDEFextendsABC publicstaticvoidmain Stringagrs DEFdef newDEF System out println def pro i def pro i 10 def show 如果变量pro i不加访问权限 会出现什么情况 Error pro i在ABC java中不是公共的 无法从外部软件包中进行访问 18 publicclassPerson publicStringname publicStringgetName returnname publicclassEmployeeextendsPerson publicintemployeeNumber publicintgetEmployeeNumber returnemployeeNumber publicclassManagerextendsEmployee publicStringresponsibilities publicStringgetResponsibilities returnresponsibilities 4 1 2继承的语法 续 例4 2 类的继承 19 publicclassExam4 2Test publicstaticvoidmain Stringargs Employeeli newEmployee li name LiMing li employeeNumber 123456 System out println li getName System out println li getEmployeeNumber Managerhe newManager he name HeXia he employeeNumber 543469 he responsibilities Internetproject System out println he getName System out println he getEmployeeNumber System out println he getResponsibilities 4 1 2继承的语法 续 例4 2测试 类的继承 20 运行结果LiMing123456HeXia543469Internetproject说明子类不能直接访问从父类中继承的私有属性及方法 但可使用公有 及保护 方法进行访问 4 1 2继承的语法 续 例4 2测试结果 类的继承 21 publicclassB publicinta 10 privateintb 20 protectedintc 30 publicintgetB returnb publicclassAextendsB publicintd publicvoidtryVariables System out println a 允许System out println b 不允许System out println getB 允许System out println c 允许 4 1 2继承的语法 续 例4 3 类的继承 22 4 1 3隐藏和覆盖 隐藏和覆盖子类对从父类继承来的属性变量及方法可以重新定义 类的继承 23 属性的隐藏子类中声明了与父类中相同的成员变量名 则从父类继承的变量将被隐藏子类拥有了两个相同名字的变量 一个继承至父类 另一个由自己声明当子类执行继承至父类的操作时 处理的是继承至父类的变量 而当子类执行它自己声明的方法时 所操作的就是它自己声明的变量 4 1 3隐藏和覆盖 续 属性的隐藏 classParent NumberaNumber classChildextendsParent FloataNumber 类的继承 24 如何访问被隐藏的父类属性调用从父类继承的方法 则操作的是从父类继承的属性使用super 属性 4 1 3隐藏和覆盖 续 访问被隐藏的父类属性 类的继承 25 属性的隐藏举例classA1 intx 2 publicvoidsetx inti x i voidprinta System out println x 4 1 3隐藏和覆盖 续 例4 4 classB1extendsA1 intx 100 voidprintb super x super x 10 System out println super x super x x x 类的继承 26 publicclassExam4 4Test publicstaticvoidmain String args A1a1 newA1 a1 setx 4 a1 printa B1b1 newB1 b1 printb b1 printa b1 setx 6 将继承来的x值设置为6b1 printb b1 printa a1 printa 4 1 3隐藏和覆盖 续 例4 4测试 类的继承 27 运行结果4super x 12x 10012super x 16x 100164 4 1 3隐藏和覆盖 续 例4 4运行结果 类的继承 28 注意 子类不能继承父类中的静态属性 但可以对父类中的静态属性进行操作 在上面的例子中 将 intx 2 改为 staticintx 2 再编译及运行程序 会得到什么结果 隐藏和覆盖 续 举例 返回 29 使用super调用父类的构造方法子类不继承父类的构造方法 因此 子类如果想使用父类的构造方法 必须在子类的构造方法中使用 并且必须使用关键字super来表示 而且super必须是子类构造方法中的头一条语句 注意 如果在子类的构造方法中没有使用super调用父类的某个构造方法 默认为调用父类不带参数的构造方法如果父类定义了多个构造方法 那么Java不提供默认构造方法 因此 当在父类中定义多个构造方法时 应包括一个无参构造方法例子 Example4 23 30 方法覆盖如果子类不需使用从父类继承来的方法的功能 则可以声明自己的同名方法 称为方法覆盖覆盖方法的返回类型 方法名称 参数的个数及类型必须和被覆盖的方法一样只需在方法名前面使用不同的类名或不同类的对象名即可区分覆盖方法和被覆盖方法SuperTest 见后 方法覆盖时 不能降低方法的访问权限 4 1 3隐藏和覆盖 续 方法覆盖 ClassChengji protectedfloatf floatx floaty returnx y ClassXiangjiaextendsChengji floatf floatx floaty returnx y 31 方法覆盖的应用场合子类中实现与父类相同的功能 但采用不同的算法或公式在名字相同的方法中 要做比父类更多的事情在子类中需要取消从父类继承的方法 隐藏和覆盖 续 方法覆盖的应用场合 32 容易混淆的概念方法的重载 methodoverloading 方法的覆盖 methodoverriding 方法覆盖 override 如果子类不需使用从父类继承来的方法的功能 则可以声明自己的同名方法 称为方法覆盖 覆盖方法的返回类型 方法名称 参数的个数及类型必须和被覆盖的方法一样 子类方法不能缩小父类方法的访问权限 不能抛出比subclass 父类 更多的异常 方法重载 overload 一个类中可以有多个方法具有相同的名字 但这些方法的参数必须不同 或者是参数的个数不同 或者是参数的类型不同 或者方法的返回类型不相同 访问修饰不同 重载的目的是允许通过使用一个方法名来访问多个方法 33 必须覆盖的方法派生类必须覆盖基类中的抽象的方法 否则派生类自身也成为抽象类 不能覆盖的方法基类中声明为final的终结方法 保持操作的稳定性 基类中声明为static的静态方法调用被覆盖的方法super overriddenMethodName 4 1 3隐藏和覆盖 续 方法覆盖的注意事项 类的继承 34 4 1 4有继承时的构造方法 略 有继承时的构造方法遵循以下的原则子类不能从父类继承构造方法好的程序设计方法是在子类的构造方法中调用某一个父类构造方法 调用语句必须出现在子类构造方法的第一行 可使用super关键字如子类构造方法的声明中没有明确调用父类构造方法 则系统在执行子类的构造方法时会自动调用父类的默认构造方法 即无参的构造方法 类的继承 35 publicclassPerson protectedStringname phoneNumber address publicPerson this publicPerson StringaName StringaPhoneNumber StringanAddress name aName phoneNumber aPhoneNumber address anAddress 4 1 4有继承时的构造方法 续 例4 5 类的继承 36 publicclassEmployeeextendsPerson protectedintemployeeNumber protectedStringworkPhoneNumber publicEmployee 此处隐含调用构造方法Person this 0 publicEmployee intaNumber StringaPhoneNumber 此处隐含调用构造方法Person employeeNumber aNumber workPhoneNumber aPhoneNumber 4 1 4有继承时的构造方法 续 例4 5 类的继承 37 publicclassProfessorextendsEmployee protectedStringresearch publicProfessor super research publicProfessor intaNumber StringaPhoneNumber StringaResearch super aNumber aPhoneNumber research aResearch 4 1 4有继承时的构造方法 续 例4 5 类的继承 38 在一个公司管理信息系统中 包括普通员工 Employees 其可能有的属性信息包括员工号 employeeNumber 姓名 name 地址 address 电话号码 phoneNumber 管理者 Magagers 除具有普通员工所具有的属性及行为外 还具有下面的属性和行为职责 responsibilities 所管理的职员 listOfEmployees 工资的计算方法与一般员工不同 福利与一般员工不同顾客 Customers 可能有的属性信息包括姓名 name 地址 address 电话号码 phoneNumber 4 1 5应用举例 例4 6 类的继承 39 类层次结构 4 1 5应用举例 续 例4 6 类的继承 40 4 2Object类 Object类Java库类是系统提供的已实现的标准类的集合 是Java的APIObject类是Java程序中所有类的直接或间接父类 类库中所有类的父类 处在类层次最高点包含了所有Java类的公共属性 其构造方法是Object 41 Object类定义了所有对象必须具有的状态和行为 较主要的方法如下publicfinalClassgetClass 获取当前对象所属的类信息 返回Class对象publicStringtoString 返回当前对象本身的有关信息 按字符串对象返回publicbooleanequals Objectobj 比较两个对象是否是同一对象 是则返回trueprotectedObjectclone 生成当前对象的一个拷贝 并返回这个复制对象PublicinthashCode 返回该对象的哈希代码值protectedvoidfinalize throwsThrowable定义回收当前对象时所需完成的资源释放工作 4 2Object类 续 包含的主要方法 Object类 42 相等与同一补充1 equals 和 的区别 可用于比较基本数据类型和引用型比较两个基本数据类型时 如果两个的值相同 则返回true比较两个引用类型时 如果两个引用的地址相同 则返回trueequals 用于比较两个对象的值是否相同 43 补充2 Stringstr1 aaa Stringstr1 newString aaa 的区别 常量池 constantpool 指的是在编译期被确定 并被保存在已编译的 class文件中的一些数据 它包括了关于类 方法 接口等中的常量 也包括字符串常量 str1属于字符串常量 被创建时的地址为常量池中 如果常量池中已有相同字符串常量 则新创建的常量将指向已有的引用 如果没有 则使用String中的intern 在常量池中增加一个Unicode等于str的字符串 并返回它的引用 注 于String类型 有一张固定长度的CONSTANT String info表用来存储文字字符串值 使用newString 创建的是对象 不同对象指向不同的内存地址 44 举例Stringstr1 aaa Stringstr2 aaa str1 str2 str1 equals str2 45 Stringstr3 newString aaa str1 str3 str1 equals str3 46 publicclassstrTest publicstaticvoidmain String args Stringstr1 aaa Stringstr2 aaa Stringstr3 newString aaa if str1 str2 System out println str1 str2 if str1 equals str2 System out println str1 equals str2 if str1 str3 System out println true elseSystem out println false if str1 equals str3 System out println true elseSystem out println false 47 先看两个例子 publicclassExam4 7 publicstaticvoidmain Stringargs BankAccounta newBankAccount Bob 123456 100 00f BankAccountb newBankAccount Bob 123456 100 00f if a b System out println YES elseSystem out println NO NO 48 publicclassEqualsTest publicstaticvoidmain Stringargs BankAccounta newBankAccount Bob 123456 100 00f BankAccountb newBankAccount Bob 123456 100 00f if a equals b System out println YES elseSystem out println NO NO 49 这两个例子equals 和前面的String类有何不同 到底是什么原因 50 相等和同一的概念两个对象具有相同的类型 及相同的属性值 则称二者相等 equal 如果两个引用变量指向的是同一个对象 则称这两个变量 对象 同一 identical 两个对象同一 则肯定相等两个对象相等 不一定同一比较运算符 判断的是这两个对象是否同一 即对象地址是否相同 4 2Object类 续 相等和同一 Object类 51 判断两个对象是否同一publicclassExam4 7 publicstaticvoidmain Stringargs BankAccounta newBankAccount Bob 123456 100 00f BankAccountb newBankAccount Bob 123456 100 00f if a b System out println YES elseSystem out println NO BankAccount类在2 5 1中声明 此程序运行的结果为 NO 原因是使用等号 判断的是两个对象是否同一 显然a和b是两个对象 4 2Object类 续 例4 7 Object类 52 修改刚才的程序publicclassExam4 7 publicstaticvoidmain Stringargs BankAccounta newBankAccount Bob 123456 100 00f BankAccountb a if a b System out println YES elseSystem out println NO 将a所指对象的引用赋给b 因此a与b指向的是同一个对象 a与b同一 输出结果为 YES 4 2Object类 续 例4 7 Object类 53 equals方法由于Object是类层次结构中的树根节点 因此所有其他类都继承了equals 方法Object类中的equals 方法的定义如下 publicbooleanequals Objectx returnthis x 4 2Object类 续 equals方法 Object类 比较接收对象与参数对象是否是同一个对象 即对象地址是否相同 因此 Object中的equals 方法判断的是两个对象是否同一 而不是属性值是否相同 可见 也是判断两个对象是否同一 54 Object类中equals方法的使用举例publicclassEqualsTest publicstaticvoidmain Stringargs BankAccounta newBankAccount Bob 123456 100 00f BankAccountb newBankAccount Bob 123456 100 00f if a equals b System out println YES elseSystem out println NO 由于不是同一对象 运行结果仍然是 NO 4 2Object类 续 例4 8 55 equlas方法的重写要判断两个对象各个属性域的值是否相同 则不能使用从Object类继承来的equals方法 而需要在类声明中对equals方法进行重写答案 String类中已经重写了Object类的equals方法 可以判别两个字符串是否内容相同 4 2Object类 续 equals方法的重写 Object类 56 在BankAccount类中增加equals方法 由于是对Object类中的equals方法进行重写 因此方法定义头必须与Object类中的equals方法完全相同 publicbooleanequals Objectx if this getClass x getClass returnfalse BankAccountb BankAccount x return this getOwnerName equals b getOwnerName 4 2Object类 续 equals方法的重写 Object类 57 equals方法的应用举例publicclassApple privateStringcolor privatebooleanripe publicApple StringaColor booleanisRipe color aColor ripe isRipe publicvoidsetColor StringaColor color aColor publicvoidsetRipe booleanisRipe ripe isRipe publicStringgetColor returncolor publicbooleangetRipe returnripe publicStringtoString if ripe return Aripe color apple elsereturn Anotsoripe color apple Object类 4 2Object类 续 例4 9 58 publicbooleanequals Objectobj if objinstanceofApple Applea Apple obj return color equals a getColor 4 2Object类 续 例4 9 Object类 59 运行结果AriperedappleisequaltoAriperedapple trueaisidenticaltob falseAriperedappleisequaltoAriperedapple trueaisidenticaltoc true 4 2Object类 续 例4 9运行结果 Object类 60 Clone方法根据已存在的对象构造一个新的对象在根类Object中被定义为protected 所以需要覆盖为public实现Cloneable接口 赋予一个对象被克隆的能力 cloneability classMyObjectimplementsCloneable Object类 4 2Object类 续 Clone方法 61 getClass方法final方法 返回一个Class对象 用来代表对象隶属的类通过Class对象 你可以查询Class对象的各种信息 比如它的名字 它的基类 它所实现接口的名字等 voidPrintClassName Objectobj System out println TheObject sclassis obj getClass getName 4 2Object类 续 getClass方法 Object类 62 notify notifyAll wait方法final方法 不能覆盖这三个方法主要用在多线程程序中 4 2Object类 续 notify notifyAll wait方法 Object类 63 4 3终结类与终结方法 终结类与终结方法被final修饰符修饰的类和方法终结类不能被继承终结方法不能被当前类的子类重写 64 4 3 1终结类 终结类的特点不能有派生类终结类存在的理由安全 黑客用来搅乱系统的一个手法是建立一个类的派生类 然后用他们的类代替原来的类设计 你认为你的类是最好的或从概念上你的类不应该有任何派生类 终结类与终结方法 65 声明ChessAlgorithm类为final类finalclassChessAlgorithm 如果写下如下程序 classBetterChessAlgorithmextendsChessAlgorithm 编译器将显示一个错误Chess java 6 Can tsubclassfinalclasses classChessAlgorithmclassBetterChessAlgorithmextendsChessAlgorithm 1error 4 3 1终结类 续 一个例子 终结类与终结方法 66 终结方法不能被当前类的子类所重载的方法终结方法的特点当前类的子类不能再重新声明与此方法同名的方法子类只能继承该方法终结方法存在的理由防止子类对父类重要方法的错误重写 4 3 2终结方法 终结类与终结方法 67 4 3 1终结方法 续 例4 10 final方法举例classParent publicParent 构造方法finalintgetPI returnMath PI 终结方法 说明getPI 是用final修饰符声明的终结方法 不能在子类中对该方法进行重载 因而如下声明是错的ClassChildextendsParent publicChild 构造方法intgetPI return3 14 重写父类中的终结方法 不允许 终结类与终结方法 68 4 4抽象类 抽象类代表一个抽象概念的类没有具体实例对象的类 不能使用new方法进行实例化类前需加修饰符abstract可包含常规类能够包含的任何东西 例如构造方法 非抽象方法 也可包含抽象方法 这种方法只有方法的声明 而没有方法的实现 69 存在意义抽象类是类层次中较高层次的概括 抽象类的作用是让其他类来继承它的抽象化的特征抽象类中可以包括被它的所有子类共享的公共行为抽象类可以包括被它的所有子类共享的公共属性在程序中不能用抽象类作为模板来创建对象 在用户生成实例时强迫用户生成更具体的实例 保证代码的安全性 抽象类 4 4抽象类 续 存在意义 70 将所有图形的公共属性及方法抽象到抽象类Shape 再将2D及3D对象的特性分别抽取出来 形成两个抽象类TwoDimensionalShape及ThreeDimensionalShape2D图形包括Circles Triangles Rectangles和Squares3D图形包括Cube Sphere 或Tetrahedron在UML中 抽象类的类名为斜体 以与具体类相区别 4 4抽象类 续 几何形状的例子 抽象类 71 例4 6中 如果在应用系统中涉及到的人员只包括 Customers Employees及Managers 则Person类的子类对象覆盖了应用中的对象 可以将Person类声明为抽象类 4 4抽象类 续 人员的例子 抽象类 72 4 4 1抽象类的声明 抽象类声明的语法形式为abstractclassNumber 如果写 newNumber 抽象类 不能用抽象类创建对象 73 4 4 2抽象方法 抽象方法声明的语法形式为publicabstract 仅有方法头 而没有方法体和操作实现具体实现由当前类的不同子类在它们各自的类声明中完成抽象类可以包含抽象方法 抽象类 74 abstractclassA publicabstractintmin intx inty intmax intx inty returnx y x y 使用final修饰abstract方法 为什么 75 abstractclassA abstractintmin intx inty intmax intx inty returnx y x y classBextendsA intmin intx inty returnx y x y publicclassExample4 21 publicstaticvoidmain Stringargs Aa Bb newB intmax b max 12 34 intmin b min 12 34 System out println max max min min a b max a max 12 34 System out println max max 运行结果max 34min 12max 34 76 需注意的问题一个抽象类的子类如果不是抽象类 则它必须为父类中的所有抽象方法书写方法体 即重写父类中的所有抽象方法只有抽象类才能具有抽象方法 即如果一个类中含有抽象方法 则必须将这个类声明为抽象类除了抽象方法 抽象类中还可以包括非抽象方法 4 4 2抽象方法 续 需注意的问题 抽象类 77 抽象方法的优点隐藏具体的细节信息 所有的子类使用的都是相同的方法头 其中包含了调用该方法时需要了解的全部信息强迫子类完成指定的行为 规定其子类需要用到的 标准 行为 4 4 2抽象方法 续 抽象方法的优点 抽象类 78 总结 final类 表示该类不能被继承 没有子类 final类中的方法也无法被继承 final方法 不能被子类的方法重载 但可以被继承 使用 抽象类中可以有具体的实现方法 也可以没有抽象方法 抽象类中的抽象方法必须被它的子类实现 如果子类没有实现 则该子类继续为抽象类抽象类不能被实例化要使用抽象类中的方法 必须有一个子类继承于这个抽象类 并实现抽象类中的抽象方法 79 各种图形都需要实现绘图方法 可在它们的抽象父类中声明一个draw抽象方法abstractclassGraphicObject intx y voidmoveTo intnewX intnewY abstractvoiddraw 4 4 2抽象方法 续 一个绘图的例子 抽象类 80 然后在每一个子类中重写draw方法 例如 classCircleextendsGraphicObject voiddraw classRectangleextendsGraphicObject voiddraw 4 4 2抽象方法 续 一个绘图的例子 抽象类 81 贷款 Loan 分为许多种类 如租借 Lease 抵押 Mortgage 房屋贷款 HouseLoan 汽车贷款 CarLoan 等将Loan声明为抽象类 并指定所有的子类对象都应具有的行为 如计算月还款值 calculateMonthlyPayment 还款 makePayment 取得客户信息 getClientInfo 其中前两个因贷款种类不同计算方法也不同 可声明为抽象方法 Loan的所有子类都必须对这两个抽象方法进行重写publicabstractclassLoan publicabstractfloatcalculateMonthlyPayment publicabstractvoidmakePayment floatamount publicClientgetClientInfo 4 4 2抽象方法 续 例4 11 抽象类 82 4 6包的应用 包为了解决类名冲突 Java提供包来管理类名空间Java利用包来组织相关的类 并控制访问权限包是一种松散的类的集合 利用包来管理类 可实现类的共享与复用同一包中的类在默认情况下可以互相访问 通常把需要在一起工作的类放在一个包里 83 4 6 1Java基础类库简介 Java基础类库Java提供了用于语言开发的类库 称为Java基础类库 JFC JavaFoundationalClass 也称应用程序编程接口 API ApplicationProgrammingInterface 分别放在不同的包中Java提供的包主要有java lang java io java math java utiljava applet java awt java awt datatransferjava awt event java awt image java rmi java security java sql等 包的应用 84 语言包 java lang 实用包 java util 文件包 java text 85 语言包 java lang 语言包java lang提供了Java语言最基础的类 包括Object类数据类型包裹类 theDataTypeWrapper 字符串类 String StringBuffer 数学类 Math 系统和运行时类 System Runtime 类操作类 4 6 1Java基础类库简介 续 语言包 包的应用 86 数据包裹类对应Java的每一个基本数据类型 primitivedatatype 都有一个数据包裹类每个包裹类都只有一个类型为对应的基本数据类型的属性域 4 6 1Java基础类库简介 续 数据类型包裹类 包的应用 87 问题 基本础数据类型和数据包裹类的不同用处在哪 如 intx 100和Integer valueOf 100 他们有什么区别 什么时候使用 使用原始数据类型声明的变量 如 intx 10 这里的x只是一个变量 而不是对象 在某些必须操作对象的场合 这样的变量就不能使用了 Java提供一系列包裹类 以便将原始数据类型当作对象进行操作 88 生成数据类型包裹类对象的方法 每个基本数据类型都有一个从基本数据类型的变量或常量生成包裹类对象的构造方法从基本数据类型的变量或常量生成包裹类对象doublex 1 2 Doublea newDouble x Doubleb newDouble 5 25 从字符串生成包裹类对象Doublec newDouble 2 34 Integeri newInteger 1234 已知字符串 可使用valueOf方法将其转换成包裹类对象 Integer valueOf 125 Double valueOf 5 15 4 6 1Java基础类库简介 续 生成数据类型包裹类对象的方法 包的应用 89 将包裹类转换为基本数据类型数据的方法anIntegerObject intValue 返回int类aCharacterObject charValue 返回char类型的数据aFloatObject floatValue 返回float类型的数据aDoubleObject doubleValue 返回double类型的数据aDoubleObject LongValue 返回long类型的数据Integer Float Double Long Byte及Short类提供了特殊的方法能够将字符串类型的对象直接转换成对相应的基本数据类型 int float double long byte或short Intger parseInt 123 返回int类型Double parseDouble 123 333333 返回double型Float parseFloat 123 11 返回float型Long parseLong 123456 返回long型 包的应用 4 6 1Java基础类库简介 续 得到基本数据类型数据的方法 90 String类该类字符串对象的值和长度都不变化称为常量字符串生成String类对象的方法可以这样生成一个常量字符串StringaString aString Thisisastring 调用构造方法生成字符串对象newString newString Stringvalue newString char value newString char value intoffset intcount newString StringBufferbuffer 4 6 1Java基础类库简介 续 参加补充章节 常量字符串类String 包的应用 91 4 6 1Java基础类库简介 续 String类的常用方法1 包的应用 92 4 6 1Java基础类库简介 续 String类的常用方法2 包的应用 93 StringBuffer类其对象是可以修改的字符串字符的个数称为对象的长度 length 分配的存储空间称为对象的容量 capacity 与String类的对象相比 执行效率要低一些该类的方法不能被用于String类的对象 4 6 1Java基础类库简介 续 变量字符串类StringBuffer 包的应用 94 生成StringBuffer类的对象newStringBuffer 生成容量为16的空字符串对象newStringBuffer intsize 生成容量为size的空字符串对象newStringBuffer StringaString 生成aString的一个备份 容量为其长度 16 4 6 1Java基础类库简介 续 生成StringBuffer类的对象 包的应用 95 4 6 1Java基础类库简介 续 StringBuffer类的常用方法1 包的应用 96 4 6 1Java基础类库简介 续 StringBuffer类的常用方法2 包的应用 97 已知一个字符串 返回将字符串中的非字母字符都删除后的字符串publicclassStringEditor publicstaticStringremoveNonLetters Stringoriginal StringBufferaBuffer newStringBuffer original length charaCharacter for inti 0 i original length i aCharacter original charAt i if Character isLetter aCharacter aBuffer append newCharacter aCharacter returnnewString aBuffer 4 6 1Java基础类库简介 续 例4 14 包的应用 98 publicclassStringEditorTester publicstaticvoidmain Stringargs Stringoriginal Hello123 MyNameisMark 234Ithinkyouaremyclassmate System out println StringEditor removeNonLetters original 运行结果HelloMyNameisMarkIthinkyouaremyclassmate 4 6 1Java基础类库简介 续 例4 14 包的应用 99 数学类提供一组常量和数学函数 例如E和PI常数求绝对值的abs方法计算三角函数的sin方法和cos方法求最小值 最大值的min方法和max方法求随机数的random方法等其中所有的变量和方法都是静态的 static 是终结类 final 不能从中派生其他的新类 4 6 1Java基础类库简介 续 数学类 Math 包的应用 100 System类访问系统资源arraycopy 复制一个数组exit 结束当前运行的程序currentTimeMillis 获得系统当前日期和时间等访问标准输入输出流System in标准输入 表示键盘System out标准输出 表示显示器Runtime类可直接访问运行时资源totalMemory 返回系统内存总量freeMemory 返回内存的剩余空间 4 6 1Java基础类库简介 续 系统和运行时类System Runtime 包的应用 101 Class类提供运行时信息 如名字 类型以及父类Object类中的getClass方法返回当前对象所在的类 返回类型是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 固控设备使用课件
- 2025年汽车行业智能驾驶系统应用前景报告
- 2025年激光双束光纤行业研究报告及未来发展趋势预测
- 2025年社区经济行业社区经济发展前景展望报告
- 2025年计算机行业量子计算技术应用与发展前景研究报告
- 商场卫生安全培训课件
- 2025年绿色建筑行业绿色建筑材料市场前景研究报告
- 左权县2025山西晋中左权县事业单位招聘22人笔试历年参考题库附带答案详解
- 国家事业单位招聘2025中国人民大学信息资源管理学院招聘1人笔试历年参考题库附带答案详解
- 哈尔滨市2025黑龙江哈尔滨工程大学机关直属单位专业技术岗位招聘1人笔试历年参考题库附带答案详解
- 2025鄂尔多斯市国源矿业开发有限责任公司社会招聘75人笔试参考题库附带答案详解
- 2025年解除租赁合同协议书
- 工业废水零排放技术解决方案创新创业项目商业计划书
- 黄冈市2025年高三年级9月调研考试(一模)生物试卷(含答案)
- 人工搬运培训课件
- 2025年高考英语新课标Ⅱ卷点评及2026备考方向 课件
- 2025年广东省中考语文试卷真题(含答案解析)
- 2025年学宪法、讲宪法知识竞赛题库及答案
- 可信数据空间解决方案星环科技
- 高中英语新课标3000词汇表(新高考)
- 【MOOC】《中国马克思主义与当代》(北京科技大学)中国大学MOOC慕课答案
评论
0/150
提交评论