Java高级教程概念整理(二)

12.接口

在接口中也可以声明常量(必须声明为public、static、final的变量),但是不能声明实例变量。

类在继承父类的同时可以实现一个或者多个接口(注意extends子句必须写在implements子句之前),在实现类中必须重写(实现)全部抽象方法,不然只能将该类声明为抽象类。

在具体应用时,要把接口和抽象类区分开来。接口是不同事物共同特性的一个提纲,而抽象类是对同一类事物的抽象,它们应用于不同的场合。接口和抽象类在很多方面都是和类相似的,现将它们的主要区别总结如下。
① 接口不能实现任何方法,而抽象类则可以。
② 一个类可以实现多个接口,但它只能有一个直接父类。
③ 接口并不是任何类的继承层次的组成部分,几个无关的类可以实现同一个接口。

 

13.内部类

内部类(InnerClass)的概念,它是指在一个类的内部可以定义另一个类,外部的类一般称为外部类(或封装类)。

内部类的类文件名称是以其所在的外部类的类名开头,加上$符号后,再接上内部类的类名。

内部类实例是依赖于外部类实例而存在的,也就是说,为了创建或使用内部类实例,必须先有一个外部类对象。

创建内部类对象的方法:

  • 在外部类的非静态方法中,内部类对象可以直接使用new操作符创建,这是因为内部类对象所依赖的外部对象就是该非静态方法的当前this。
  • 在其他无关类的方法中创建内部类对象,必须先显式获得外部类的对象,再用“外部类对象.new”调用内部类的构造器创建内部类对象,而且,必须给出内部类的完整类名(例如Outer.Inner)。此时,内部类对象所依赖的外部类对象已经创建。之所以要先显式创建外部类对象再创建内部类对象,是因为在其他无关类中方法的当前对象类型不符合要求。

当内部类与其外部类中存在同名属性或方法时,将导致命名冲突。这时,可以使用内部类的隐含属性(指向其所在外部类的对象)来解决问题。其中,“this”指向当前的内部类对象,“外部类名.this”指向内部类对象所依赖的外部类对象。

创建静态内部类对象时无须先创建外部类对象,并且可以直接使用new创建内部类对象。实际上,加上了static的内部类不隶属于其所在的外部类,而只是暂时寄存在那里而已。

就像静态方法不能访问类中的实例变量一样,静态内部类也不能访问其所在外部类的实例变量和方法。

 

14.异常处理

所谓异常,就是程序在运行过程中出现的错误、非正常终止等非正常情况。产生异常的原因很多,例如:系统资源耗尽、数组下标越界、被除数为零、空指针访问、试图读取的文件不存在、网络连接中断等。

Java中的异常,根据其出现情况的不同,可以分成两大类:

Error:它是指JVM系统内部错误等严重的问题,例如系统资源耗尽。程序一般不处理这种错误。

Exception:它是指因为编程错误或者其他偶然的外在环境因素引起的一般性问题。例如:数组下标越界、被除数为零、空指针访问、试图读取的文件不存在、网络连接中断等。对于这种异常,程序可以对它们进行处理。

只有一种情况finally语句块不会执行:受保护代码(try语句块中的代码)中调用System.exit()强行终止程序。如果try语句块或者catch语句块中有return语句,都会首先执行finally语句块的内容然后再执行return语句。

Try...catch...finally中即使有return语句,也是先执行finally语句后再执行return语句。

在使用try...catch...finally时,需要注意下面的问题:
① 如果try语句块后有多个catch语句块,并且它们所捕获的异常类在Java异常层次关系中是有继承关系的(也就是说其中的一个异常是另外一个异常的子类或父类),那么catch语句块出现的顺序非常重要:后面的catch语句块所捕获的异常类型范围应该比前面的语句块 大。例如,如果第一个catch语句块捕获的是FileNotFoundException异常,那么后面的catch语句捕获的异常类型必须是FileNotFoundException的父类,例如IOException或者Exception。而当多个catch语句块所捕获的异常是兄弟异常时,则对catch语句块的放置顺序没有任何要求。
② try语句块后面一定要有catch语句块或者finally语句块。catch语句块或者finally语句块都可以省略,但是它们不能同时省略,否则将导致编译错误。
③ catch语句块必须跟在try语句块的后面,如果有多个catch语句块,它们之间是不能有任何其他语句的。

人工抛出的异常对象必须是Throwable类或者其子类的实例。

 

15.数组

创建数组时每个元素都要被初始化。如果数组的类型是基本数据类型,那么数组元素的初始化这一步可以省略。因为基本数据类型都有默认的初始值,因而不必专门进行创建和初始化工作就可以直接使用。

一旦数组初始化或使用new分配空间以后,数组的长度就固定下来,不能改变了,除非使用new运算符重新分配空间。对一个数组再次动态分配空间时,若该数组的存储空间的引用没有另外的存储,则该数组的数据将会丢失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值