Java-面向对象编程-1.ppt_第1页
Java-面向对象编程-1.ppt_第2页
Java-面向对象编程-1.ppt_第3页
Java-面向对象编程-1.ppt_第4页
Java-面向对象编程-1.ppt_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

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

文档简介

Java程序设计 基本内容 1 类与对象的概念 2 Java语言的特点 3 Java语法特性 4 Java运行系统和开发工具 5 Java的现状 3 什么是对象 首先直观的了解一个对象 状态特性 filament 灯丝 lightness 亮度 行为特性 on 开灯 off 关灯 bright 变亮 dim 变暗 4 什么是对象 对象是面向对象软件系统中的基本构成单位 代表问题域中的客观事物的抽象表示 在面向对象中 对象是基本的运行实体 包括属性和行为 将属性和行为封装成一个独立的实体 5 属性和方法 属性描述对象的状态 即表示客观事物的静态特性 数据 方法描述对象的动作 即表示客观事物的动态特性 对数据的操作集合 6 什么是类 把前面提到的灯泡对象抽象成一个类 类名 属性 UML UnifiedModelLanguage 类图 7 什么是类 再直观的了解一个类 Data aspect Function aspect 8 什么是类 类是对象之上的抽象 类与对象 类的实例 之间的关系是抽象与具体的关系 可以说 类是创建对象的模板 9 类的定义 类的一般定义形式类的定义举例 类的一般定义形式 修饰符class类名 extends父类名 implements接口1 接口2 修饰符类型成员变量1 修饰符类型成员变量2 修饰符类型成员方法1 参数列表 类型局部变量 方法体 修饰符类型成员方法1 参数列表 类型局部变量 方法体 11 类的定义举例 classStudent privatechargender privateStringname privateintage publicchargetGender returngender publicvoidsetGender charsex gender sex publicStringgetName returnname publicvoidsetAge intnewAge age newAge Student Stringsn name sn Method 方法体的定义 在方法中定义的变量称为局部变量 其生命周期 执行进入方法体时建立 退出方法时撤消 局部变量使用之前必须初始化 在方法体中可以访问所有的实例变量和类变量 可以调用类中定义的实例成员方法和类方法 变量的作用域 方法的参数 形参与实参方法的参数要有名有型 参数的作用域在本方法中 在方法体中可以象方法体自己定义的变量一样使用 基本类型参数是值传递 值拷贝 抽象数据类型 引用类型 是地址传递定义 voidmethod Aa 调用 Aa newA method a 引用类型地址传递 基本类型值传递 值传递与地址传递 3 14 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 0f publicstaticvoidmain String args PassTestpt newPassTest inti 22 pt change1 i System out println ivalueis i Strings newString Hello pt 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 程序运行结果 ivalueis22svalueisHelloCurrentpt m floatis100 0 21 对象创建 定义一个对象引用例如 Strings1 创建一个对象实例使用关键字new例如 Strings1 newString asdf 例如 Strings2 newString asdf 22 Strings newString asdf Strings1 Hello s1holdsanobjectreferenceStrings2 null 对象引用 Hello s1 s2 s1 23 对象实例VS 对象引用 通过引用操纵对象引用不等于对象引用保存在堆栈里面 对象保存到堆里面对于引用 一种安全的方法是创建一个引用时就进行初始化 24 对象的初始化 显示成员初始化调用构造方法执行初始化什么是构造方法构造方法的特点什么是方法重载怎样才能实现方法重载构造方法重载默认构造方法 25 显示成员初始化 classStudent privatechargender F privateStringname Lee privateintage 22 publicchargetGender publicvoidsetGender charsex publicStringgetName publicvoidsetAge intnewAge Student Stringsn name sn 26 通过构造方法执行初始化 什么是构造方法 在Java中 通过new创建一个类的实例 通过调用构造方法执行初始化操作 Studentc newStudent 27 构造方法特点 构造方法名字和类名完全相同 构造方法没有返回值 不需要用void 构造方法可以重载 28 什么是方法重载 C语言中 每个方法必须有唯一的名字intabs int doubleflabs double longlabs long Java中引入重载方法 使得一个方法名可以对应不同的实现 intabs int longabs long doubleabs double 29 怎样才能实现方法重载 要求方法参数的类型 方法参数个数 方法参数的顺序不同仅仅返回值类型不同是不能实现方法重载的在编译时根据方法调用的形式选择适当的重载方法 intadd inta intb doubleadd inta doubleb intadd inta intb intc intadd inta intb 重载 非重载 doubleadd inta intb intadd inta intc add 3 2 doubleadd doublea intb 30 构造方法重载举例 classStudent privatechargender privateStringname privateintage publicStudent publicStudent Strings publicStudent Strings intn publicStudent intm intn 31 构造方法重载 构造方法重载 Studentc newStudent Studentc newStudent Mr Smith Studentc newStudent Mr Smith 47 Studentc newStudent 6002372 47 publicStudent Strings publicStudent Strings intn 32 构造方法举例 classRock Rock ThisistheconstructorSystem out println CreatingRock publicclassSimpleConstructor publicstaticvoidmain String args for inti 0 i 10 i newRock 33 默认构造方法 每个类都至少有一个构造方法 如果程序员没有为类定义构造方法 系统会自动为该类生成一个默认的构造方法 默认构造方法的参数列表及方法体均为空 classStudent 没有定义一个具体的构造方法 系统自动生成 Student Studentstu1 newStudent 要特别注意的是 如果程序员定义了一个或多个构造方法 则自动屏蔽掉默认的构造方法 34 默认构造方法举例 classBird inti publicclassDefaultConstructor publicstaticvoidmain String args Birdnc newBird default 35 this关键字 publicclassTestThis privateinti 0 TestThisincrement i returnthis voidprint System out println i publicstaticvoidmain String args TestThisx newTestThis x increment increment increment increment print 结果 4 这里的i可以写成this i 36 对象的清除 为什么要清除对象 Java的垃圾回收机制 37 为什么要清除对象 回顾C语言 如果你使用了malloc 那么你必须记住free 释放内存 38 Java中对象的清除 Java引入了新的内存管理机制 由Java虚拟机担当垃圾收集器的工作 你可以任意创建对象而不用担心如何清除它们 垃圾收集器会自动清除它们 39 垃圾回收机制 使用new操作符创建对象后 Java虚拟机自动为该对象分配内存并保持跟踪 Java虚拟机能判断出对象是否还被引用 对不再被引用的对象释放其占用的内存 这种定期寻找不再使用的对象并自动释放对象占用内存的过程称为垃圾收集 40 static关键字 为什么引入static关键字 static关键字用法 41 关于static关键字 为什么使用static关键字 42 类变量 ClassVariables 类变量被该类实例化出来的所有对象共享 classStudent privatechargender F privateStringname Lee privateintage 22 publicstaticintcount 0 publicchargetGender returngender Student Stringn name n count 43 类变量举例 classtest publicstaticvoidmain String arg Students1 newStudent John Students2 newStudent Lee Students3 newStudent Smith System out println s3 count System out println s2 count 输出多少 Student Stringn name n count 静态成员变量一般用类名 变量名直接访问 输出 3 44 类方法 ClassMethods 类方法举例 staticintmax intarg1 intarg2 bodyofthemethod 类方法可以通过一个类进行调用 而不需要进行实例化出一个对象 doubleroot Math sqrt 453 0 45 在哪里使用static关键字 static关键字常用在 MainmethodsLibrarymethodsLibraryconstants publicstaticvoidmain Stringargs Math sqrt 类的初始化 类中可以包含静态代码块 它不存在于任何方法体中 在Java虚拟机加载类时会执行这些静态代码块 如果类中包含多个静态代码块 那么Java虚拟机将按照它们在类中出现的顺序依次执行它们 每个静态代码块只会被执行一次 示例定义了两个静态代码块和一个构造方法 Java虚拟机先执行静态代码块 后才调用构造方法 Java语言的包 引入的原因 容易找到和使用类避免名称冲突控制访问定义 包是一个相关的类和接口的集合 它可以提供访问保护和名称空间管理 Java语言的包 Java平台中的类和接口是各种包的成员 这些类和接口是按照功能绑定的 例如 基本的类在java lang中 再例如 用于输入和输出的类在java io中 Java语言的包 包是一种松散的类的集合 通常把需要在一起工作的类 互相访问 放入一个包 在Java语言程序设计中 通常需要定义许多类 就像利用 文件夹 把许多文件组织在一起 使硬盘管理的文件更清晰 更有条理一样 Java利用 包 把一些需要在一起操作的类组织在一起 以便程序员更好地管理操作这些类 无名包 系统自动建立 无名包 也就是默认包或缺省包在缺省情况下 系统会为每一个 java 源文件创建一个无名 noname 包 这个源文件中定义的所有类都隶属于这个无名包 它们之间可以相互引用非private 私有 的域或方法 无名包中的类不能被其它包中的类所引用或复用 无名包 缺省包一般只用于临时程序或测试程序 建议在实际系统开发中 为每个类指定有名的包 Java使用文件系统来存储包 包的名称必须和程序文件所在目录名完全一样 大小写敏感 如果定义了一个多级结构的包 其结构也必须和文件系统的目录结构完全一致 有名包 创建有名包的语句格式为package 语句功能 该语句将创建一个具有指定名字的包 该包将把当前 java文件中的所有类集合到这个包内 创建有名包 应该先创建一个子文件夹 同包名 以便存放当前 java文件和对应的 class文件 有名包 例如 packagecardclasses 该语句是将当前类置于包cardclassess中 需要在当前文件夹下创建一个名为cardclasses的子文件夹 再例如 packagecardsystem cardclasses 该语句将当前类置于cardsystem cardclasses中 需要在当前文件夹下创建子文件cardsystem并在cardsystem下再创建的子文件cardclasses 当前类存放在这个文件夹里 使用包成员 只有公共的包成员可以从定义它们的包外访问 要从包外访问公共的包成员 必须采用以下的方法 用成员的限定名引用 导入包成员 导入成员所属的整个包 使用包成员 使用包名作为类名前缀 java util Vectorvc newjava util Vector 导入需要使用的类importjava util Vector Vectorvc newVector 注意 import语句放在package语句之后 任何class定义之前 使用包成员 导入整个包importjava util Vectorvc newVector 消除名称的二义性使用成员的限定名 使用环境变量classpathsetclasspath javac classpath MyClass javajava classpath MyClass 使用包成员 在使用import语句的时候 可以使用通配符一次导入一个包中的所有类 如 importjava util 这样 我们在使用java util包中的任何类时 就可以直接使用简单类名 需要注意的是 import语句要么导入一个类 要么导入一个完整包 不能使用通配符标记包的子集或多个包 下面三条语句均无法通过编译 importjava applet A importjava importjava io 使用包成员 为了简化代码 Java语言规定在以下情况时无需使用import语句导入包 使用缺省包中的类使用java lang包中的类使用和当前类在同一个包中的其他类 管理源代码文件 将类或者接口的源代码放在一个文本文件中 文件名为类或者接口的简单名 将源代码文件放在一个目录中 目录名反映的是类或者接口所属的包的名称 例如 管理源代码文件 包成员的限定名称与文件的路径是对应的 它们的对应关系为 管理类文件 与源代码文件一样 字节码文件也可以通过包来进行管理 字节码文件不必和源代码文件位与相同的目录中 可以单独管理 这样做的目的可以隐藏源代码文件 类路径 定义 类路径是一个目录或zip文件的有序列表 用于搜索类文件 类路径中列出的每个目录都是包含包目录的顶层目录 编译器和解释器可以根据类的包名称和类名从顶层目录开始构造路径的其余部分 例如 上图所示的目录结构的类路径项目包含classes 但是不包含com或者com以下的任何目录 编译器和解释器用 class文件的完整包名构造它的路径名 问题 假设你已经写了一些类 并且需要将这些类放进三个包中 如下所示 为了将这些类放到正确的包中 需要在每个源代码中增加什么代码 问题 InClient javaadd packagemygame client InServer javaadd packagemygame server InUtilities javaadd packagemygame shared 65 理解包的层次 理解 的含义 不包括子包 例如 awt包下面还有一个子包event 区分下面两条语句的含义 importjava awt importjava awt event 66 例 如何运行带有包的程序 packagemyfirstpackage classStudent publicclasstest publicstaticvoidmain String arg System out println hello 67 如何运行带有包的程序 静态导入 从JDK5 0开始 import语句不仅可以导入类 还增加了导入静态方法和静态变量的功能 Math类中的所有方法都是静态方法 如果对Math类使用静态导入 就可以采用更加自然的方式使用算术方法 例如下面的代码片段中的第一句比第二句要清晰的多 sqrt pow x 2 pow y 2 Math sqrt Math pow x 2 Math pow y 2 静态导入Math类中的所有static成员 语句为 importstaticjava lang Math 静态导入Math类中的sqrt方法 语句为 importstaticjava lang Math sqrt 静态导入语句看起来和普通的import语句非常相似 但是 普通import语句从某个包中导入了一个或所有的类 而静态import语句从某个类中导入一个类的一个或所有的静态方法以及静态变量 使得导入类的所有静态变量和静态方法在当前类直接可见 使用这些静态成员无需再给出它们的类名 见P59 例3 15 内部类 在一个类内部定义的类叫做内部类或内置类 innerclass 内部类可以将逻辑上相关的一组类组织起来 并由外部类来控制内部类的可见性 当建立一个内部类时 其对象就拥有了与外部类对象之间的一种关系 这是通过this引用形成的 使得内部类对象可以随意访问外部类中的所有成员 把包含内部类的类称为外部类 在图3 6中 类Outer是外部类 类Inner是类Outer的内部类 Test类会访问类Outer及它的内部类 可把Test类称为客户类 外部类只能处于public和默认访问级别 而成员内部类可以处于public protected private和默认这四种访问级别 类的关系 实例内部类 1 在创建实例内部类的实例时 外部类的实例必须已经存在 例如想创建内部类Inner类的实例 必须先创建外部类Outer类的实例 例如下面的语句 Outerouter newOuter 创建外部类Outer Innerinner outer newInner 创建内部类等价于 Outer Innerinner newOuter newInner 2 实例内部类的实例自动持有外部类的实例的引用 这个引用形式是 外部类名字 this 在内部类中 可以直接访问外部类的所有成员 包括成员变量和成员方法 3 外部类实例与内部类实例之间是一对多的关系 一个内部类实例只会引用一个外部类实例 而一个外部类实例对应零个或多个内部类实例 在外部类中不能直接访问内部类的成员 必须通过内部类的实例去访问 4 在实例内部类中不能定义静态成员 而只能定义实例成员

温馨提示

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

评论

0/150

提交评论