接口与内部类

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• 内部类并非只能在类中定义,也可以在方 法中,或甚至在for循环中定义。称之为局 部内部类。 • 局部内部类的作用范围是和局部变量的作 用方法相同的,只在局部中起作用。 • 在方法中定义的内部类只能访问方法中final 类型的局部变量。
找错
Class InOut{ String str=new String(“Between”); Public void amethod(final int iArgs){ int it315; Class Bicycle{ Public void sayHello(){ 出错 System.out.println(str); System.out.println(it315); System.out.println(iArgs); }}}}
• try~catch语句的格式如下: try { 包含可能发生异常的语句 } catch(ExceptionSubClass1 e) { } catch(ExceptionSubClass2 e) { }
1.各个catch参数的异常类都是Exception的某个子 类,表明try部分可能发生的异常。这些子类 之间不能有父子关系,否则保留一个含有父类 参数的catch即可。 2.异常对象可以调用如下方法得到或输出有关异 常的信息: public String getMessage() //用来获取详细信息 public void printStackTrace() //打印Thowable (Exception即从此类继承)和Thowable的调用 栈轨迹 public String toString() //返回对Thowable类的简 单描述
• 异常最重要的方面之一就是,如果发生问 题,它们将不允许程序沿着其正常的路径 继续走下去。 • 例子4.33:方法 public static int parseInt(String s) 可以将“数字”格式的字符串,如“123456”, 转化为int型数据,但是当试图将字符串 “abc123”转换成数字时,会出现 NumberFormatException异常。
1. Double和Float类 和 类
• Double类和Float类实现了对double和float基本型数据的类 包装。 • 可以使用Double类的构造方法: Double (double num) 创建一个Double类型的对象; 使用Float类的构造方法: Float (float num) 创建一个Float类型的对象。 Double对象调用doubleValue()方法可以返回该对象含有的 double型数据; Float对象调用floatValue()方法可以返回该对象含有的float型 数据。
匿名类
•ห้องสมุดไป่ตู้和类有关的匿名类
当使用类创建对象时,程序允许我们 把类体与对象的创建组合在一起,也就是 说,类创建对象时,除了构造方法还有类 体,此类体被认为是该类的一个子类去掉 类声明后的类体,称作匿名类。
• 和接口有关的匿名类
Java允许直接用接口名和一个类体创建 一个匿名对象,此类体被认为是实现了接 口的类去掉类声明后的类体,称作匿名类 。
上述例子可修改成如下方式
public class TestException { public static void main(String[] args) {try {int result=new test().devide(3,0); System.out.println(“the result is”+result);} catch(Exception e) {System.out.println(e.getMessage());} System.out.println(“program is running here,that is normal!”) }}
abstract class A {abstract public void fun1();} class Outer {public static void main(String[] args) {class Inner extends A {public void fun1() {System.out.println("implement for fun1");} } new Outer().callInner(new Inner());} public void callInner(A a) {a.fun1();} }
例子TestException
finally关键字
• 在try…catch语句之后,还可以有一个finally 语句,finally语句中的代码块不管异常是否 被捕获总是被执行。例子FinallyWorks.java • finally的用处:当要把除内存之外的资源恢 复到它们的初始状态时,就要用到finally子 句。这些需要清理的资源包括:已经打开 的文件或网络连接,在屏幕上画的图形, 甚至可以是外部世界的某个开关等。
4.14内部类
• Java支持在一个类中声明另一个类,这样的 类称作内部类,而包含内部类的类成为内 部类的外嵌类。 • 内部类的类体中不可以声明类变量和类方 法。外嵌类的类体中可以用内部类声明对 象,作为外嵌类的成员。
• 内部类也可以通过创建对象从外嵌类之外 被调用,只要将内部类声明为public即可。 • 内部类可以直接访问外嵌类,包括private成 员。但是外部类却不能直接访问内部类的 成员。
3.接口的特性
接口不是类,尤其不能使用new运算符实例 化一个接口: X= new Printable(…) ; //出错 但是却可以声明接口的变量: Printable X; //ok • 接口中绝对不能含有成员变量,但是却可 以包含常量。与接口中的方法自动被设置 成public abstract一样,接口中的常量将被自 动设为public static final。
4.16 异常类
• 所谓异常就是程序运行时遇到的非致命的 错误,而不是编译时的语法错误。如程序 要打开一个不存在的文件、网络连接中断、 操作数越界、装载一个不存在的类等。
public class TestException { public static void main(String[] args) 算数异常 { int result=new Test().devide(3,0); System.out.println(“the result is”+result); }} class Test { public int devide(int x,int y) {int result=x/y; return x/y; }}
• 接口体中包含常量定义和方法定义两部分。 • 接口体中只进行方法的声明,不允许提供 方法的实现,所以,方法的定义没有方法 体,且用分号“;”结尾。如: interface Printable { final int MAX=100; void add(); float sum(float x ,float y); }
4.15匿名类
abstract class A {abstract public void fun1();} class Outer { public static void main(String[] args) {new Outer.callInner( new A(){ public void fun1() {System.out.println("implement for fun1")} } ); } public void callInner(A a) {a.fun1();} }
2.接口的使用
• 一个类通过使用关键字implements 声明自己 使用一个或多个接口。如果使用多个接口, 用逗号隔开接口名。如: class A implements Printable,Addable • 如果一个类使用了某个接口,那么这个类 必须实现该接口的所有方法,即为这些方 法提供方法体 。
throws关键字与throw关键字
• 关键字throws与关键字throw的作用都是抛 出异常,但它们是两个不同的关键字。 • 在方法的声明时,关键字throws声明要产生 的若干异常。 • 用关键字throw抛出异常的对象。
例子4.34 例子TestException
• 注意:catch(Exception e)不能放在其他catch 语句的前面,否则后面的catch语句永远得 不到执行。
自定义异常类
要自己定义异常类,必须从已有的异常类 继承,最好是选择意思相近的异常类继承。 即自定义的异常类都是从Exception类或其 子类中继承得来的。 习惯上,自定义的异常类应该包含两个构 造方法,一个是默认的构造方法;另一个 是带有详细描述信息的构造方法(超类 Throwable的toString方法将会打印出这些详 细信息,这在调试中非常有用)。
4.接口回调
• 接口回调是指:可以把实现某一接口的类 创建的对象的引用赋给该接口声明的接口 变量中。那么该接口变量就可以调用被类 实现的接口中的方法。实际上,当接口变 量调用被类实现的接口中的方法时,就是 通知相应的对象调用接口的方法。
作业
• 创建三个接口,每个接口都包含两个方法。 继承出一个接口,它组合了这三个接口并 添加了一个新方法。创建一个实现了该接 口并且继承了某个具体类的类。现在编写 四个方法,每一个都接受这4个接口之一作 为参数。在main()方法中,创建这个类 的对象,并将其传递给这四个方法。
• Java中使用try~catch语句来处理异常,将可 能出现的异常操作放在try~catch语句的try部 分,当try部分中的某个语句发生异常后, try部分将立刻结束执行,而转向执行相应 的catch部分;所以程序可以将发生异常后 的处理放在 catch部分。try~catch语句可以 由几个catch组成,分别处理发生的相应异 常。
class MyException extends Exception { public MyException() {} public MyException(String msg) { super(msg); } } 建立新的异常类最简单的方法就是让编译器为你 产生默认构造方法。如: class SimpleException extends Exception{}
4.13 接口
• 所谓接口(interface)就是一个完成某些 特定功能的类。 • 接口主要是用来描述类具有什么功能,而 并不给出每个功能的具体实现。 • 一个类可以实现(implement)一个或多个 接口,并在需要接口的地方,随时使用实 现了相应接口的对象。
1.接口的定义
接口的定义格式如下: 接口修饰符 interface 接口名称 { //常量的定义和方法的申明 } 接口修饰符和类的修饰符是一样的。 interface是定义接口的关键字。 接口里的所有方法自动的属于public。 接口不能声明为final的。
• 接口可以被继承,即可以通过关键字 extends声明一个接口是另一个接口的子接 口。子接口将继承父接口中的全部方法和 常量。 • 如果父类实现了某个接口,那么子类也就 自然的使用了该接口。子类不必再使用关 键字implements声明自己使用了这个接口。
• 一个类在继承一个父类的同时,实现一个 或多个接口,extends关键字必须位于 implements关键字之前。 class Student extends Person implements Runner { …… Public void run() {System.out.print(“running!”)} …… }
4.18 基本类型的类包装
• Java的基本数据类型包括:byte、int、short、 long、float、double、char。Java同时也提供 了基本数据类型相关的类,实现了对基本 数据类型的封装。这些类在java.lang包中, 分别是:Byte、Integer、Short、Long、 Float、Double和Character类。
相关文档
最新文档