




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA面向对象程序设计 沈傲东 东南大学影像科学与技术实验室 n n Email: Email: n n QQ: 8282149(QQ: 8282149(请注明学号、姓名请注明学号、姓名) ) 高级特性 特殊类 内部类 匿名类 静态 终止 接口编程 抽象类 接口 类集框架 2 内部类2-1 内部类为非静态的嵌套类。 在类中定义的类称为内部类。 内部类之外的类称为外部类。 内部类可以访问其外部类的所有变量和方 法,并能够以和外部类的其他非静态成员相 同的方式直接引用它们。 内部类完全在其包围类的范围之内。 内部类2-2 内层的类能够访问外层类的所有数据 和方法(即使它们是private的) 外层的类能够访问内层类的非 private数据和方法 编译器使用的命名规则:外层类名$ 内层类名 x$y.class 类的静态成员 类中的静态变量、方法或代码块属于类, 而不属于某个特定的对象。 类的静态成员可以与类的名称一起使用, 而无需创建类的对象。 静态变量或方法也称为类的变量或方法。 用static修饰符修饰, 可以是变量、方法或代 码块 实例成员 静态变量 不管创建了类的多少实例,整个类中静态变量 的副本只有一个。 引用静态变量的方法: - 通过引用类的任一实例 - 通过类的名称 class StaticDemo static int x = 0; StaticDemo()x+; StaticDemo d1 = new StaticDemo(); StaticDemo d2 = new StaticDemo(); d1.x = 100 ; d2.x = 200; testVariable = d1.x; 通过类实例访问 不是一个好方法 StaticDemo d1 = new StaticDemo(); StaticDemo d2 = new StaticDemo(); StaticDemo.x = 100; StaticDemo.x = 200; testVariable = StaticDemo.x; 声明为static的变量实质 上就是全局变量 通过类名访问 静态方法 与静态方法相关的几个要点: 类的静态方法只能访问其他的静态成员 静态方法没有this 静态方法不能被覆盖为非静态方法 class StaticFun static int i = 10; int j; static void setValue(int x) j=x;/出错 System.out.println(“ “+ i); 不能访问非静态变量j ,可以访问静态变量i class StaticTest static void test() class Staticex extends StaticTest void test() /出错 静态块 如果需要通过计算来初始化静态变量,可以 声明一个静态块。 静态块仅在该类被加载时执行一次。 只能初始化类的静态数据成员。 class TryInitialization static int values = new int10; /静态数组成员 static for(int i=0; ivalues.length; i+) valuesi = (int)(100.0*Math.random(); final 关键字/final类 final 修饰符可应用于类、方法和变量。 final在应用于类、方法和变量时意义是不同的 ,但本质是一样的:final表示不可改变。 声明为final的类不能被继承。 final 类示例: java.lang.String final class TestFinal int i = 7; int j = 1; void f() class Further extends TestFinal final类不能被继承 final 方法 在方法声明中使用 final 关键字向编译器表明 子类不能覆盖此方法。 在声明类中,一个 final 方法只被实现一次 如果一个类为 final 类,那么它的所有方法都 为隐式的 final 方法。 class TestFinal final void f() class Further extends TestFinal final void f() final方法不能 被覆盖 final 变量 一个变量可以声明为final,这样做的目的 是阻止它的内容被修改。 声明final变量后,只能被初始化一次,然 后就不能对其值进行修改。 一个final变量实质上是一个常量。 class FinalDemo public static void main(String args) final int noChange = 20; noChange = 30; final变量不能被 修改 抽象类 2-1 定义抽象类的目的是提供可由其子类共享 的一般形式。 子类可以根据自身需要扩展抽象类。 抽象类不能实例化。 抽象方法没有函数体。 抽象方法必须在子类中给出具体实现。 abstract 修饰符可 与类和方法一起 使用 抽象类2-2 在以下情况下,某个类将成为抽象类: 当一个类的一个或多个方法为抽象方法时。 当该类为一个抽象类的子类,并且没有为所有 抽象方法提供实现细节或方法主体时。 当一个类实现一个接口,并且没有为所有抽象 方法提供实现细节或方法主体时。 抽象类示例 abstract class Employee int basic = 2000; abstract void salary();/抽象方法 class Manager extends Employee void salary() System.out.println(“薪资等于 “+basic*5); class Worker extends Employee void salary() System.out.println(“薪资等于 “+basic*2); 抽象方法没有 方法主体 在子类中提供 实现 在子类中提供 实现 接口 一个接口允许一个类从几个接口继承而来。 Java 程序一次只能继承一个类但可以实现 几个接口。 接口不能有任何具体的方法。 接口也可用来定义可由类使用的一组常量。 接口提供“is a”关系。 例如: 类悟空 类悟能 类悟净 吃早餐(三明治); 吃早餐(喝咖啡); 吃早餐(三明治); 吃午餐(吃面条); 吃午餐(吃苹果); 吃午餐(吃西餐); 吃晚餐(吃牛排); 吃晚餐(麦当劳); 吃晚餐(自助餐); 接口是一组抽象行为,其可以结 合到任何类,可以把行为添加到 没有被超类提供的类中。 综合为接口: 接口 一日三餐 吃早餐(); 吃午餐(); 吃晚餐(); 创建接口的步骤2-1 / 有方法的接口 public interface myinterface public void add(int x, int y); public void volume(int x,int y, int z); / 定义程序使用的常量的接口 public interface myconstants public static final double price = 1450.00; public static final int counter = 5; 定义一个接口: 创建接口的步骤2-2 编译如下: javac myinterface.java 用关键字 implements 实现接口,例如: class demo implements myinterface 如果有一个以上接口被实现,则用逗号隔开 接口名称,如下所示: class demo implements Mycalc, Mycount 接口使用示例 interface A double g=9.8; void show( ); class InterfaceTest public static void main(String args ) B b=new B( ); b.show( ); class B implements A public void show( ) System.out.println(“g=“+g); 接口回调 可以把使用某一接口类创建的对象的 引用赋给该接口声明的接口变,那么 该接口变量就可以调用被类实现的接 口中的方法。 当接口变量调用被类实现的接口中的 方法,就是通知相应的对象调用接口 的方法。 接口回调示例 interface ShowMessage void 显示商标(String s); /接口中的方法默认都是public class TV implements ShowMessage public void 显示商标(String s) /在使用接口的类中要显示表示public System.out.println(s); class PC implements ShowMessage public void 显示商标(String s) System.out.println(s); public class EXAMP public static void main(String args) ShowMessage sm; /声明接口变量 sm=new TV(); /接口变量中存放对象的引 用 sm.显示商标(“熊猫电视”); /接口回调 sm=new PC(); /接口变量中存放对象的引 用 sm.显示商标(“IBM PC”); /接口回调 接口继承 与类继承类似 支持多重继承 Demo 编码约定3-1 classes类名应该是名词,大小写可混用,但首字 母应大写。 例如: class AccountBook class ComplexVariable interface界面名大小写规则与类名相同。 interface Account method方法名应该是动词,大小写可混用,但 首字母应小写。在每个方法名内,大写字母将词分隔 并限制使用下划线。例如: balanceAccount() addComplex () 编码约定3-2 Variables所有变量都可大小写混用,但首字符应 小写。词由大写字母分隔,限制用下划线,限制使用 美元符号($),因为这个字符对内部类有特殊的含 义。 currentCustomer 变量应该代表一定的含义,通过它可传达给读者使用 它的意图。尽量避免使用单个字符, 除非是临时“即 用即扔”的变量(例如,用i, j, k作为循环控制变量) constant原始常量应该全部大写并用下划线将词 分隔;对象常量可大小写混用。 HEAD-COUNT MAXIMUM-SIZE spacing 每行只写一个语句并使用四个缩进的空 格使你的代码更易读。 编码约定3-3 control structures当语句是控制结构的一部分 时,即使是单个语句也应使用括号()将语句封 闭。例如: if (condition) do something else do something else comments用注释来说明那些不明显的代码段落 ;对一般注释使用 / 分隔符, 而大段的代码可使用 /*/分隔符。使用 /*/将注释形成文档,并输 入给javadoc以生成HTML代码文档。 数据结构 26 程序算法+数据结构 组织数据的方式 基本结构 - 集合结构:集合(无序、有序) - 链结构:栈、队列、链表、树(有序、有 向、无向) - 表结构:数组、哈希表(有序) 瑞士科学家沃思( Niklaus Wirth,1984年 图灵奖得主) JAVA中的数据结构 27 Collection List LinkedList ArrayList Vector Stack Set Map Hashtable HashMap WeakHashMap java.util 阵列(数组)Arrays 枚举Enumerations 向量Vectors 链表Linked lists 哈希表Hash tables 栈Stacks 队列Queues 类集框架 28 处理对象组的方法标准化 高性能 对基本类集(动态数组,链接表,树和散列表)的实现 是高效率的。一般很少需要人工去对这些“数据引擎” 编写代码(如果有的话)。 容易扩展和/或修改 包含一组标准的接口。对这些接口,提供了几个标准的 实现工具(例如LinkedList,HashSet和TreeSet), 通常就是这样使用的。 算法Algorithms 类集接口 Collection 用于操作对象组,它位于类集层次结构的顶层 List 扩展Collection去处理序列(对象的列表) Set 扩展Collection去处理集合,集合必须包含唯一元素 SortedSet 扩展Set去处理排序集合 Comparator 定义了两个对象如何比较 Iterator和ListIterator 枚举类集中的对象 29 ArrayList类 30 实现动态数组 构造函数 ArrayList() ArrayList(Collection c) ArrayList(int capacity) 常用方法(List接口、Collection接口) 添加元素void add(int ind, Object obj) 删除元素Object remove(int ind) 访问元素Object get(int ind) 转换数组Objects toArray() 特定场合获取高效 参数类型已定 移植性 ArrayList示例 import java.util.*; public class ArrayListTest public ArrayListTest() / Create an arraylist alst1 = new ArrayList(); System.out.println(“初始化后的大小为“ + alst1.size(); / Add some elements alst1.add(“A“);alst1.add(“B“);alst1.add(“C“);alst1.add(“D“);alst1.add(“E“); alst1.add(“F“);alst1.add(1, “A1“); System.out.println(“加入元素后的大小为“ + alst1.size(); / Display the contents System.out.println(“当前数组内容为“ + alst1); / Remove some elements alst1.remove(2);alst1.remove(“D“); System.out.println(“删除元素后的大小为“ + alst1.size(); System.out.println(“删除元素后内容为“ + alst1); public static void main(String args) new ArrayListTest(); private ArrayList alst1; 31 初始化后的大小为0 加入元素后的大小为7 当前数组内容为A, A1, B, C, D, E, F 删除元素后的大小为5 删除元素后内容为A, A1, C, E, F LinkedList类 32 用作链表 构造函数 LinkedList() LinkedList(Collection c) 常用方法(List接口、Collection接口) 添加元素void addFirst/Last(Object obj) 删除元素Object removeFirst/Last() 访问元素Object getFirst/Last() 扩展AbstractSequentialList类 实现List接口 HashSet类 33 用作散列表 构造函数 HashSet() HashSet(Collection c) HashSet(int capacity) HashSet(int capacity, int fillRatio) 常用方法(Set接口、Collection接口) 添加元素void add(int ind, Object obj) 删除元素Object remove(int ind) 访问元素Object get(int ind) 填充因子:0.0-1.0( 0.75) 散列:内容无序; 散列码与关键字对 应;对大集合操作 平均速度快,基本 操作时间不变 扩展AbstractSet类 实现Set接口 迭代函数和接口 34 用作集合遍历 迭代函数 Iterator() 迭代接口Iterator boolean hasNext() Object next() void remove() 链表迭代接口ListIterator boolean hasPrevious() Object previous() void add(Object obj) int nextIndex() int previousIndex() 支持双向遍历 将自定义的类存储于 Collection中 import java.util.*; class Address private String name; private String street; private String city; private String state; private String code; Address(String n, String s, String c, String st, String cd) name =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年数字化技术在服饰零售门店顾客体验提升中的应用报告
- 2025年数字人民币跨境支付技术演进与支付风险控制报告
- 2025年绿色消费教育对消费者行为引导的影响及绿色产品营销效果报告
- 文明乡风培训课件
- 2025年短视频平台内容监管与市场规范研究报告
- 2025年生态农业循环经济示范园农业废弃物资源化利用与循环经济模式研究
- 车间监控培训课件内容
- 机械厂消防安全知识培训课件
- MTP3-ligand-1-生命科学试剂-MCE
- 论语中的交友之道
- JGT163-2013钢筋机械连接用套筒
- HIV感染产妇分娩母婴阻断演练脚本
- 科技园区建设规划
- 客舱安全与应急处置(含活页实训手册) 课件 模块四 客舱失火处置
- GB/T 43677-2024生态系统评估陆地生态资产核算技术指南
- 儿童及青少年知情同意书版本
- 《内科胸腔镜术》课件
- 肺部感染性疾病课件
- 总承包项目管理制度
- 火龙罐治疗面瘫的
- 《建筑基坑工程监测技术标准》(50497-2019)
评论
0/150
提交评论