Java语言基础培训材料.ppt_第1页
Java语言基础培训材料.ppt_第2页
Java语言基础培训材料.ppt_第3页
Java语言基础培训材料.ppt_第4页
Java语言基础培训材料.ppt_第5页
已阅读5页,还剩361页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JAVA Java2Platform StandardEdition 课程内容 JAVA JAVA概述 JAVA的起源 1990年Green项目成立Oak语言1995年JAVA诞生 Java的现状1 1 J2SE Java2Platform StandardEdition标准版J2SE含有基本的Java2SDK 工具 运行时系统 Runtime 和API 开发者可以用来编写 部署和运行Java应用程序和Applet 当前J2SE的最新版本是JDSE1 5update4 Java的现状2 2 J2EE Java2Platform EnterpriseEdition企业版J2EE建立在J2SE的基础之上 他是JSP JavaServerPage Servlet EJB EnterpriseJavaBean JTS JavaTransactionService Javamail以及JMS JavaMessageService 等多项技术混合体 并且还含有兼容性测试套件 主要用于开发分布式的 服务器端的多层结构的应用系统 例如电子商务网站 Java的现状3 3 J2M Java2Platform MicroEdition领域应用版J2ME主要用于开发电子产品 例如 移动电话 数字机顶盒 汽车导航系统等 JAVA术语 名词解释 名词解释JVM JRE JVM javavirtualmachineJVM虚拟机将java字节码程序翻译成机器语言 然后有计算机执行 JVM没有其他相关的文件 JVM本身不足以支持javaapplication和applet的运行 JRE java运行环境 JRE是由JVM和javaplatform核心类以及相关支撑文件组成 API Applicationprogramminginterface API是rules syntax 在java技术中如何编程 API包括数千个类 公司预先编好的代码 你可以在编程中充分利用它们的功能 JDK J2SDK JDK javadeveloper skit java开发工具包 JDK包含JVM和其他工具 以及所有的API和相关文件 JDK是java技术的旧名 1999 11以前 JDK1 1是最后版本 Java2 Java2Platform J2SDK java技术的新名称SDK SoftwareDevelopmentKit JVM JRE J2SDK的关系 JVMplusbasicAPIs whatyouneedtodistributetopeoplewhowillrunyourJavaprograms JVMplusallAPIs compilers tools anddocumentation whatyouneedinordertowritejavatechnologyprograms Java开发工具 J2SDK系列 Sun 命令行方式SunOneStudioJBuilder Borland VisualJ Microsoft EclipseIDEAWASDJCreator 程序基本结构 由一个或多个 类 组成 其中必须有一个 类 定义了main 方法 该方法是自动执行的类方法 是Java应用运行的起始点 而这个类也就称之为 主类 HelloApplication javapublicclassHelloApplication publicstaticvoidmain Stringargs System out println Hello Javaworld 编译与执行 编译 javacjavacHelloApplication java产生HelloApplication class文件解释执行 javajavaHelloApplication 隐含 class文件 Java程序文件源文件名要与主类名同名 包括大小写 一个类产生一个 class文件 编译 运行程序 Application D javacHelloApplication javaD javaHelloApplicationHello JavaWorld 程序设计方法学 面向过程的程序设计面向过程的程序遵循面向过程的问题求解方法其中心思想是用计算机能够理解的逻辑来描述和表达待解决的问题及其具体的解决过程 算法 数据结构数据结构利用计算机的离散逻辑来量化表达需要解决的问题 而算法则研究如何快捷 高效地组织解决问题的具体过程 面向过程 面向机器 程序设计方法学 面向对象的程序设计面向对象问题求解关心的不仅仅是孤立的单个过程 而是孕育所有这些过程的母体系统它能够用计算机逻辑来模拟 描述系统本身 包括系统的组成 系统的各种可能状态 以及系统中可能产生的各种过程与过程引起的系统状态切换 面向对象的程序设计是以要解决的问题中所涉及到的各种对象为主要考虑因素 对象是一种看问题的观点 是对现实世界各种元素的一种抽象 对象既含数据又含功能 因此具有自身处理数据的能力 对象被认为是迄今为止最接近真实事物的数据抽象 现实中的对象 现实世界中对象有两个共同的特点 一方面 它们都有自己的状态 如一台电视机有自己的摆放位置 有关机和开机状态 此刻正在播放某一频道的电视节目等另一方面 它们又都有自己的行为或功能 如电视机的开机 关机 调台等 对象的属性与方法 面向对象程序设计中的对象是现实世界对象的模型化 它同样具有状态和行为 对象的状态用属性来维护 对象的行为用方法来实现 因此可以简单地讲 对象是面向对象的程序设计模式 它由描述状态的属性 变量 和用来实现对象行为的方法 代码 组成 几种叫法属性 静态属性 域 成员变量状态方法 动态属性 成员方法行为 对象与类 什么是类 类是描述对象的 基本原型 它定义一种对象所能拥有的数据和能完成的操作 在面向对象的程序设计中 类是程序的基本单元 子类 什么是子类 子类是作为另一个类的扩充或修正所定义的一个类 bicycle superclass Mountainbikes Racingbikes Tandembikes subclass 属性 方法和消息传递 属性 即指对象的所知道的状态方法 指对象的功能单元 什么是消息 软件对象通过相互间传递消息来相互作用和通信一个消息由三部分组成 1 接受消息的对象2 要完成方法的名字3 方法需要的参数 建立开发环境Eclipse JAVA语言基础 程序结构 java的名字空间和包 作为一种在整个Internet上动态装载模块的语言 Java特别注意避免名字空间的冲突 全局变量不再是语言的组成部分 没有全局的属性与方法 所有的方法和属性都在类中定义 是类的组成部分 每个类又是包的组成部分 全限定名 包名 类名 方法名import打开一个包后 可直接指定该包中的类名 在本类中 可以直接使用方法名及属性名 包的概述 一个包是一组相关类的集合 类库由若干包组成 java lang语言核心类 StringIntegerMath java awt图形用户界面java appletapplet小程序java io文件与输入输出网络编程java util实用程序类 随机数 日期 系统属性 JavaAPI文档 语句规则 语句种类说明语句如属性说明 变量说明等表达式语句控制语句 条件 循环 转移 异常处理语句块语句 代码块 一组语句用花括号括起来 注释 只限于行内 一段注释文本基本语句用分号结束 数据类型 数据 Java程序中所处理的数据是将各种数据类型实例化后的数据 数据类型实例化的方法 说明语句实例化数据的两中形式 变量与常量 数据类型与说明语句 基本数据类型说明语句 booleanb true shortsi 128 inti j k 99 longl 123456789 charch J charchc 中 floatf 3 1415926f doubled 1 04E 5 Java几乎是将字符串视为基本数据类型Strings 你好 Java标识符 区分大小写组成 字母数字 开头 字母 常量 布尔常量truefalse整型常量一般常量 32bit长整型常量 64bit 88L 十进制数 非0开头的正负整数105 23八进制数 0开头的正负整数017 15 023 19 十六进制 0 x开头的正负整数0 x2F 47 0 xa8 168 浮点常量一般浮点常量 32bit 3 14F6 18E3F双精度浮点数 64bit 7 56D6 02E23 D可省 数据类型转换 importjava io publicclassTest publicstaticvoidmain Stringargs inti 65 charc a cc 王 System out println i 65System out println char i ASystem out println c aSystem out println int c 97System out println cc 王System out println int cc 29579System out println char 35328 言 Wrapper类 基本数据类型 Wrapper类 boolean Character char Boolean Byte byte Short short Integer int Long long Float float Double double Integer 属性staticintMAX VALUE返回int型数据的最大值staticintMIN VALUE返回int型数据的最小值构造器Integer intvalue Integer Strings 方法intintValue doubledoubleValue StringtoString staticStringtoString inti staticIntparseInt Strings staticIntegervalueOf Strings 类型转换 利用类 对象方法 利用类方法 静态方法 staticintInteger parseInt 23 staticStringInteger toString 23 staticdoubleDouble parseDouble 12 3 staticStringDouble toString 12 3 利用对象方法Doubled Strings d newDouble 12 3 构造s d toString Double valueOf 12 3 doubleValue 返回 引用类型 类 定义类 新的数据类型 classMyDate intday intmonth intyear 基本数据类型 直接分配内存空间 inti j k 引用类型 MyDated1 d1 newMyDate 引用类型 类 MyDated1 newMyDate d1 day 28 d1 month 12 d1 year 70 引用类型 数组 在Java中 数组是独立的类 有自身的方法 不是变量的集合 一个数组是数组类的一个对象 一维数组定义int IntArray newint 5 数组类对象引用说明 IntArray 动态分配空间 newint 5 int IntArray 提倡格式 类型变量名 引用类型 数组 int intArray 11 47 93 26 38 分配空间 赋初值静态初始化必须与数组定义放在一个语句中 intArray newint 10 原数组丢失 XXXX intArray 11 47 93 38 26 数组类 intm1 m2 int a m1 5 m2 10 a newint m1 m2 for inti 0 i 5 i for intj 0 j 10 j a i j i j for inti 0 i a length i for intj 0 j a i length j System out print a i j System out println 引用类型 字符串类 字符串类代表字符串 每一个字符串常量是该类的一个实例 构造函数Strings new Strings new abc char data a b c Strings newString data Strings abc 自动为该字符串常量创建一个String类的实例 引用类型 字符串类 intx 123 inty x Strings1 abc Strings2 s1 123 123 0 x01234567 null xys1s2 abc s2 def 引用类型 字符串 Strings1 newString abc Strings2 newString abc 0 x01234567 0 x12345678 s1s2 abc abc s1 s2falses1 equals s2 true 引用类型 字符串 Strings1 abc s1 s1 def XXXXX abc s1 字符串类 String 方法intlength 返回字符串长度例 Java与面向对象程序设计 length 的值为13charcharAt intindex 返回指定位置的字符例 Java与面向对象程序设计 charAt 2 intcompareTo Strings2 字符串比较intcompareToIgnoreCase Strings2 booleanequals Objectobj 判断字符串相等StringtoLowerCase 将字符串转换为小写StringtoUpperCase 将字符串转换为大写 返回新串 不改变原字符串 字符串类 String Stringsubstring intbeginIndex 取子串Stringsubstring intbeginIndex intendIndex intindexOf Strings 返回串s在当前串中位置intindexOf Strings intfromIndex booleanstartsWith Stringprefix 判断该字符串是否以prefix为前缀 booleanendsWith Stringsuffix 判断该字符串是否以suffix为后缀 char toCharArray 将字符串转为字符数组 字符串类 Java的字符串连接运算符 Object的方法toString 实现其他对象向字符串的转换main方法的参数classa publicstaticvoidmain String args intx Integer parseInt args 0 inty Integer parseInt args 1 System out println x y x y 字符串类 StringBuffer String类对象是不可变的字符串StringBuffer类对象是可变的字符串 有改变字符串的若干方法 构造函数StringBuffer StringBuffer intlength 设置初始容量StringBuffer Strings 方法StringtoString voidsetCharAt intindex charc 修改字符 表达式语句 表达式是变量 常量及运算符的组合 表达式既可单独组成语句 也可出现在条件测试 变量说明 方法调用的参数等场合在表达式构件中 运算符起到关键作用 运算符 实现操作 运算元 操作对象 二元运算符 一元运算符 三元运算符表达式的结果是一个右值 即不能出现在赋值运算的左边 结果类型由参与运算的数据类型确定 赋值是一种运算符 为编程带来灵活性 如对循环变量进行初始化 Java运算符 一般运算是把运算对象作为一个整体处理 而位运算是把整型数运算对象拆开 以位 bit 作为运算对象 运算符例 移位 移位 带符号右移 左侧空出位全用符号位填充 不带符号右移 左侧空出位用0填充 2x 23000011110011110000000011100000111 1711101111101111001111101100111011128 1128 21 64256 4256 24 16 256 4 256 24 16128 1128 21 25616 216 22 64 运算符例 自运算符 j j j j运算符的位置决定了自运算的顺序 在表达式运算之前或在表达式运算之后 a 3b 5c a ba 4c 15a 3b 5c a ba 4c 20三目条件运算符 D 表达式A 表达式B 表达式CA为真 返回表达式BA为假 返回表达式C总是返回B C中的长类型例 intx 5 y 8 longz 2 longk x 3 y z k 8 条件语句 if 条件表达式 语句块 else语句块 多重嵌套的if语句if 条件1 语句块1 elseif 条件2 语句块2 elseif 条件3 else语句块n switch开关语句 switch 表达式 case判断值1 语句组1 case判断值2 语句组2break default 语句组n switch的常量和表达式可以是整型 字符型及byte型任何两个case常量不可以有相同的值 只能对等式进行测试 根据表达式取值的不同转向不同的分支 每个case分支中的语句块无须用花括号括起来 每个case分支都只是入口点break语句是转移语句 转出switch Java的循环语句 while 表达式 do 语句组 语句组 while 表达式 for 表达式1 表达式2 表达式3 语句组 表达式1 循环变量赋初值 可使用外部没有定义的循环变量表达式2 循环条件表达式3 循环变量修正 Java的转移语句 没有goto语句break从一个封闭的语句 如switch for循环中跳出来break标号从包含本break语句的标号指示的封闭语句中跳出来 while e1 aaa while e1 while e2 while e2 break breakaaa Java的转移语句 continue 用在循环体中 提前结束本次循环 即跳过后面的循环体语句 回到循环的条件测试部分继续执行 continue标号提前结束标号所指循环 通常是某外层循环 continue不是goto语句 标号不能指向与本循环并列的循环或其他循环 也不可指向非循环语句 Application程序人口点 publicclassHelloWorldApp publicstaticvoidmain String args javaHelloWorldApp执行包括main方法的主类javaHelloWorldAppargs 0 args 1 例 求2 100的素数 每行打印5个数字 importjava io publicclassprime publicstaticvoidmain Stringargs First Loop for inti 2 k 0 i 100 i for intj 2 j Math sqrt i j if i j 0 continueFirst Loop System out print i t k if k 5 0 System out println for main class 面向对象程序设计 对象 对象 object 客观对象现实生活中的对象可以是任何物体 例如 一台计算机 人或动植物 从最简单的整数到复杂的航天飞机等 都是现实生活中的对象 另外 一些看不见的事务 规则也是客观存在的对象 客观对象的两个基本特点任何一个物体都包括两个基本特点 一个是物体的内部构成 或属性 例如汽车的轮子 门和发动机等 另一个是物体的行为 或方式 既对该物体内部构成成分的操作或与外界信息的交换 例如汽车的发动 鸣号 行使和停车等 Java的对象OOP用对象表示现实中的物体 客观对象 有两个基本的成分与客观对象的两个基本特点相对应 属性 data 表示对象的属性 方法 method 表示对象的行为 对象与过程 考虑对象 考虑过程 前者更有意义设计对象 设计过程 前者更富挑战性 尤其是设计可重用的对象 面向对象的程序设计和问题求解力求符合人们日常自然的思维习惯 降低分解问题的难度和复杂性 提高整个求解过程的可控制性 可监测性和可维护性 从而达到以较小的代价和较高的效率获得较满意效果的目的 封装 信息隐藏 封装 是一种组织软件的方法 其基本思想是把客观世界中联系紧密的元素及相关操作组织在一起 使其相互关系隐藏在内部 而对外仅仅表现为与其他封装体间的接口 从而构造出具有独立含义的软件实现 封装并不是一个新的概念 但在面向对象的程序设计中提出了一种全新的封装方法 类 封装 信息隐藏 每个类里都封装了相关的数据和操作 在实际的开发过程中 类多用来构建系统内部的模块 由于封装特性把类内的数据保护得很严密 模块与模块间仅通过严格控制的界面进行交互 使它们之间耦合和交叉大大减少 从而降低了开发过程的复杂性 提高了效率和质量 减少了可能的错误 同时也保证了程序中数据的完整性和安全性 封装 软件复用 封装使得对象 对内成为一个结构完整 可自我管理 自我平衡 高度集中的整体 对外则是一个功能明确 接口单一 可在各种合适的环境下都能独立工作的有机的单元 类的封装特性使得类可重用性大为提高 这样的有机单元特别适宜构建大型标准化的应用软件系统 可以大幅度地提高生产效率 在程序中定义你抽象出的类 新类必须在已有类的基础上构造 在已有类的基础上构造新类的过程称为派生 派生出的新类称为已有类的子类 已有类称为超类 父类 子类继承父类的方法和属性 当没有显式指定父类时 父类隐含为java lang包中的Object类 类的继承 类继承类继承是指一个新的类继承原有类的基本特性 原来的类称为父类 超类 superclass 或基类 新的类称为原来类的子类或派生类 在子类中 不仅包含有父类的属性 数据 和方法 还可增加新的属性和功能 这种子类继承父类的方法也被称为类的派生 deriving 也就是由父类派生出子类 子类还可以派生新的子类 这种派生过程可以进行多次 形成不同层次的类 例如 人类可分为工人 农民 学生和教师等 学生又分为大学生 中学生和小学生 教师又分为小学教师 中学教师和大学教帅 大学教师又分为助教 讲师 教授 人类的这种划分就形成了不同层次的类 类的继承提高了程序的可复用性 根据类的继承机制 在父类中只定义各层子类都需要的属性和功能 类派生时 只增加新的属性和功能 因此父类的基本特征可被所有子类的对象共享 提高了类的重复利用率 这样 也极大地简化了软件的开发 有利于提高软件开发的效率 Java系统已开发了许多实用类库 如输入输出类 java io 用户利用它们派生自己所需要的类 实现特定的输入输出功能 对于Java而言 类的声明是使用extends子句来继承类 并且 只能继承一个类 类的多态性 类的多态性类的多态性 polymophism 是指一个名称有多种功能 或者相同的接口有多种实现的方法 在Java编程语言中 类的多态性通过方法的重载 overloading 覆盖 overriding 和接口来实现 类的声明 类声明的完整格式为 类修饰符 class新类名 extends超类名 implement接口名 其中 内的内容为可选项 类修饰符 类修饰符类修饰符决定了类在程序运行中被处理的方式 创建类时 可以接受缺省的修饰符 也可以根据需要指定一个或多个修饰符 这些修饰符可以是一个访问修饰符 public protected private 加上一个或多个类型修饰符 abstract static final strictfp 类名 与Java的其他标识符一样 类名有如下设置 1 以字母 字符 或 开头 2 只能含有大于十六进制00C0以上的Unicode字符 3 不能使用与Java关键字相同的类名 4 类名通常以大写字母开头 如果类名由多个单词组成 则每一个单词的开头字母也大写 实例 abstractclassPoint intx 1 y 1 voidmove intdx intdy x dx y dy alert abstractvoidalert classSimplePointextendsPoint voidalert 实例 classEmployee Stringname intage floatsalary Employeee newEmployee e name 张立 e age 21 e salary 528 37F 类定义 方法说明 为Employee类增加打印方法 将数据和代码封装在一个单一的实体中 classEmployee Stringname intage floatsalary voidprint System out println name 年龄为 age 月薪为 salary class 对象方法的含义 Employeeemp newEmployee emp name 张立 emp age 21 emp salary 528 37F 一旦对象被建立并被初始化 就可以调用该方法打印这个对象的数据 emp print 对象emp执行print方法操作自己的数据 而不是从外部操作对象的数据 向对象发消息 让对象做某件事 数据的隐藏 封装 属性的访问权限privatepublic默认 相当于package 使用private修饰符修饰属性后 就不能从对象的外部直访问这些属性 类内方法仍可以访问 而只能通过该类的方法来操作这些属性 私有属性 公有方法方法可以保护数据 做各种合法性检查 使得代码可维护性好 代码可变 接口不变 类方法的定义规则 修饰符 返回类型方法名 参数列表 throws异常 方法名后的小括号是方法的标志 形式参数是方法从调用它的环境输入的数据 返回值是方法在操作完成后返还给调用它的环境的数据 要指定方法返回值类型 如没有返回值 类型要写void方法名相同 但参数不同 是不同的方法 与类名相同的所有方法都是类的构造方法 方法体的定义 在方法中定义的变量称为局部变量 其生命周期 执行进入方法体时建立 退出方法时撤消 局部变量使用之前必须初始化 在方法体中可以访问所有的类属性 可以调用所有类中定义的方法 方法可以递归调用 引用类型值传送 基本类型值传送 地址传送 值传送与地址传送 3 14 3 14 A B 3 14 A B 0 x2F 0 x2F A B 参数传递例 publicclassPassTest floatm float voidchange1 intpi pi 100 voidchange2 Stringps ps newString Right voidchange3 PassTestpo po m float 100 0 publicstaticvoidmain String args PassTestpt newPassTest 参数传递例 inti 22 pt change1 i System out println ivalueis i Strings newString Hello pr change2 s System out println svalueis s pt m float 22 0F pt change3 pt System out println Currentpt m floatis pt m float main class 实参 形参 copy 方法中使用 this classBanana voidf inti Bananaa newBanana b newBanana a f 1 b f 2 方法如何知道是处理哪个对象 编译做了一些内部处理 Banana f a 1 Banana f b 2 把一个隐含的参数传给了方法 指向被操作对象的引用 因为是内部处理 引用没有标识名 如果你在方法中想拿到这个引用 this this classBanana voidpick voidpit this pick pick publicclassMyDate intday month year publicvoidtomorrow this day this day 1 day day 1 this this只能在方法中使用 表示当前对象 或类的当前实例 this适用用于一些特殊的场合 例 publicclassMyDate intday month year publicvoidborn Birthdaybd newBirthday this this例 classLeaf privateinti 0 Leafincrement i returnthis voidprint System out println i i publicclassa publicstaticvoidmain String args Leafx newLeaf x increment increment increment print Overloding重载方法名 用同一个名字来表示不同的方法 这些方法同名的原因 是因为它们的最终功能和目的都相同 但由于在完成同一功能时 可能遇到不同的具体情况 所以需要定义含不同的具体内容的方法 方法名必须相同 是同一类中定义同名方法的情况 方法的参数必须不同 同名不同方法是靠不同形式的参数列表来区分 包括形式参数的个数 类型 顺序的不同 返回类型可以不同 但不是重载的标志 利用 重名 现象提高程序的抽象度和简洁性 方法的重载 例 相同类型的工作 不同的参数 publicvoidprintln inti publicvoidprintln floatf publicvoidprintln Strings Integer类 StringtoString staticStringtoString inti staticStringtoString inti intradix Double类 StringtoString staticStringtoString doubled 构造方法 实例化对象 初始化对象类名对象引用名 new构造方法 Employeeemp newEmployee new运算符的参数就是调用类的构造方法 初始化新建的对象 new运算符为对象分配内存空间 并返回对该对象的一个引用 构造方法的名字必须是类的名字 构造方法没有返回类型说明 当没定义任何构造方法时 系统配一个隐含的构造方法 如 Employee 里面没有内容 一旦定义了一个构造方法 隐含构造方法失效 定义构造方法 Employee Stringn inta floats name n if a 18 对象初始化三步曲 当为对象分配内存空间后 首先将属性单元置为 0 数值型 字符型 false 逻辑型 null 引用型 对象建立后 有明确的状态 属性都有值 执行显式初始化classa privateintx 10 privateStrings newString first privateMyTimemt newMyTime 执行构造方法 构造方法之间的调用 publicclassEmployee Employee Stringn inta floats name n if a 18 构造方法之间的调用 在一个构造方法中 当使用this并给它一个参数列表时 this显式调用参数匹配的另一个构造方法 在一个构造方法中 不能象调用一般方法那样调用另一个构造方法 构造方法不是用来调用的 而是new算符的参数 继承 继承是一种由已有的类创建新类的机制 是面向对象程序设计的基石之一 子类继承父类的非私有属性和方法 还可以定义新的属性和方法 改写父类的方法 继承实际上是存在于面向对象程序中的两个类之间的一种关系 Java要求每个类都有父类 隐含为java lang包中的Object类 super是对父类的引用 引用父类的构造方法 父类成员属性和方法 继承 属性 nameagesalary方法 upSalarygetInfo Employee Engineer Manager Secretary Director 属性 allowance方法 setAllowancegetInfo 属性 telephonedepartment方法 setTelgetInfo 增加属性和方法 classEmployee Stringname intage floatsalary voidupSalary floatinc salary salary inc classManagerextendsEmployee floatallowance voidsetAllowance floata allowance a classDireatorextendsManager Stringtelephone department voidsetTel Stringtel telephone tel 调用父类的构造方法 子类继承父类所有的属性和方法 非private 但不继承构造方法 子类或定义自己的构造方法 或使用隐含构造方法 为了保证安全性 在子类的所有构造方法中 必须首先调用一个父类的构造方法 子类可在自己的构造方法中使用super 来调用父类带参数的构造方法 super 调用语句必须是子类构造方法中的第一个可执行语句 若子类的构造方法中没有super 语句 系统将隐含调用父类无参数构造方法 调用父类构造方法 在继承情况下的对象初始化 为对象分配内存并初始化 0 null false 执行每一层的类的显式初始化 执行每一层的类的构造方法 由于显式或隐式调用 抽象与抽象类 程序员可以先创建一个定义共有属性和方法的一般类 再从一般类派生出具有特性的新类 抽象类实际上是所有子类的公共域和公共方法的集合 而每一个子类则是父类的特殊化 是对公共域和方法在功能 内涵方面的扩展和延伸 类继承树 Object class abstractclass class finalclass class java 单重继承 抽象类与最终类 abstract抽象类 没有具体对象的概念类较高层次的概括抽象类的作用是让其他类来继承它的抽象化的特征 在程序中不能用抽象类作为模板来创建对象 final最终类 该类不能有子类 抽象类与最终类 abstractclassPhoneCard classNumber PhoneCardextendsPhoneCard finalclassD200 CardextendsNumber PhoneCard 抽象类经常要包含某些抽象方法 方法的具体实现要在子类中实现 final可以与abstract一起使用吗 抽象方法 abstract抽象方法仅有方法头而没有方法体的方法 为该类的子类定义一个方法的接口标准 abstractvoidperformDial 一个抽象类的子类如果不是抽象类 则它必须为父类中的所有抽象方法书写方法体 最终方法 final最终方法不能被当前类的子类重新定义的方法 子类不能再重新定义与此方法同名的自己的方法 而仅能使用从父类继承来的方法 只能继承但不能修改 固定了这个方法所对应的具体操作 可以防止子类对父类关键方法的错误的重定义 保证了程序的安全性和正确性 方法覆盖 overriding 在面向对象的程序设计中 子类可以把从父类那里继承来的某个方法改写 形成同父类方法同名 解决的问题也相似 但具体实现和功能却不尽一致的新方法 定义与父类完全相同的方法 实现对父类方法的覆盖 完全相同的方法名完全相同的参数列表完全相同类型的返回值注意 在满足上述三个条件同时 还必须保证 访问权限不能缩小 抛出的例外要相同三个条件有一个不满足 就不是方法的覆盖 而是子类自己定义与父类无关的方法 父类的方法未被覆盖 因而仍然存在 调用父类被覆盖的方法 super 方法名 方法覆盖 抽象方法的实现 PhoneCard类抽象了一个其子类共有的方法 abstractbooleanperformDial 这个方法代表的相同功能 拨打电话 但在不同种类的电话卡中 其具体实现是不同的 不同的子类可以重新定义该方法 但是所有的类中 凡是实现拨打电话这种功能的方法 尽管内容不同 却共享相同的名字 performDial由于同名的不同方法是属于不同的类 所以只需在调用方法时指明是哪个类的方法即可区分 类名 方法名或对象名 方法名 方法的覆盖 abstractPhoneCard类 abstractbooleanperformDial doublegetBalance abstractNumber PhoneCard类 abstractbooleanperformDial doublegetBalance booleanperformConnection longcn intpw finalD200 Card类 booleanperformDial 覆盖实现抽象方法doublegetBalance 覆盖实现细节不同booleanperformConnection longcn intpw 系统类中方法覆盖例 java lang Object方法1 publicbooleanequals Objectobj 比较引用型变量 引用同一个对象时为真 classMyclass 继承了equals方法Stringm s Myclass Strings m s s 而类StringDateFileInteger 都覆盖了equals方法 当对象的类型和内容相同时为真 系统类中方法覆盖例 classtest staticvoidmain String args Myclassmc1 newMyclass wang Myclassmc2 newMyclass wang if mc1 equals mc2 System out println true elseSystem out println false Strings1 newString wang Strings2 newString wang if s1 equals s2 System out println true elseSystem out println false 系统类中方法覆盖例 Object定义的方法 toString 将一个对象转换为一个字符串表示 返回对象类型及引用地址 System out println mc1 toString Myclass 7a52dd00System out println mc1 隐含调用toString 很多类覆盖了该方法 如基本类型封装类将该方法改为 返回对象表示的数据的字符串形式 Integeri1 newInteger 123 System out println i1 方法重载 方法覆盖 域隐藏 方法的覆盖与方法重载的区别重载 一个类中 同名方法 参数不同 覆盖 子类对父类方法的覆盖 不同类的同名方法 方法的覆盖与域的隐藏的区别 子类隐藏父类的域只是使之不可见 父类的同名域在子类对象中仍然占有自己独立的内存空间 而子类方法对父类同名方法的覆盖将清除父类方法占用的内存 从而使父类方法在子类对象中不复存在 多态 Polymorphism 一个对象只有一种形式 构造函数确定的 一个对象引用是多态的 因为它可以指向不同形式的对象 Employeee1 newManager e1 allowance 300 0F e1 setAllowance 500 0F e1 upSalary 200 0F e1 getInfo 子类具有父类的所有方法和属性 任何对于父类合法的操作对于子类也是合法的 只限于父类定义的方法和域 但实际对象决定访问的属性和调用的方法 多态应用 同质收集 collection Employee staff newEmployee 100 staff 0 newManager staff 1 newDirector 多态参数 接收通配对象 classEmployee staticfloatfindTax Employeee Managerm newManager System out println Employee findTax m 实例类型的判断与转换 publicvoidmethod Employeee if einstanceofManager Managerm Manager e m setAllowance 500 0F elseif einstanceofDirector Directord Director e d department d02 d setTel 9999 else employee 实例类型转换规则 按类层次向上转换 castupward 总是允许的 且不用转换 只需直接赋值即可 Managerm newManager Employeee Employee m Employeee m System out println e getInfo 按类层次向下转换 castdownwand 编译会首先检查是否可能 如果编译允许 运行时还要看实际的情况 在没有使用instanceof做检查的时候 对象正好不是要转换的类型 出运行错误 类变量 静态变量 类变量 为类的各实例共享的变量 static静态变量 位于类的内存区域中 为该类的各个对象共享 无此限定符的变量是实例变量 classex inti staticintj staticfinalintk 10 为节省空间 final常量可同时定义为static 类exjk 10 对象1i 3 对象2i 5 类变量 静态变量 实现各实例之间的通讯 跟踪创建的实例数 publicclassCount privateintserial 成员变量privatestaticintcounter 0 类变量publicCount counter serial counter 静态变量类似于某些语言中的全局变量 类变量 静态变量 非private的静态变量无须创建实例就可以从类的外部访问 publicclassStaticVar publicstaticintx publicclasstest publicvoidm intm StaticVar x 类方法 静态方法 类方法 static方法名 使用类方法不用创建类的对象 调用这个方法时 应该使用类名做前缀 而不是某一个具体的对象名 非static的方法是对象方法 或称实例方法 类方法中不能访问实例变量 而只能访问类变量 static方法 static域 和自己的方法参数 类方法中不能直接使用本类中的实例方法 只能使用其他的static方法 类方法中没有this值 类方法 静态方法 publicclassa publicstaticvoidmain String args System out println Math round 3 54 Strings to char 2 718 System out println e s staticStringto char doublex returnDouble toString x 类方法 静态方法 main方法是静态方法 这是为了系统在没有任何实例化对象之前可以运行一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论