24.final 关键字
在Java 中声明类、属性、和方法时,可使用关键字final 来修饰;
final 标记的类不能被继承;
final 标记的方法不能被子类重写;
final 标记的变量(成员变量或局部变量)即成为常量,且只能赋值一次;
方法中定义的内部类,只能访问该方法的final 类型的局部变量;
用final 定义的局部变量相当于是一个常量,它的声明周期超出方法运行的声明周期;
将一个形参定义成final 也是可以的,这就限定了在方法中修改形参的值。
public static final 共同标记一个常量时,这个常量就成为全局常量,此时,必须在定义的时候进行初始化;
25.抽象类
Java 中可以定义一些不含方法体的方法,它的方法体的实现交给该类的子类,根据自己的情况去实现,这样的方法就是抽象方法,包含抽象方法的类就是抽象类。抽象类必须用abstract 关键字来修饰,抽象方法也必须用abstract 来修饰。抽象类不能被实例化,也就是不能用new 关键字去产生对象。抽象方法,只需声明,而不需实现。含有抽象方法的类必须被声明为抽象类,抽象类的子类必须覆盖所有抽象方法后才能被实例化,否则这个子类还是个抽象类。
26.接口(interface)
如果一个抽象类中的所有方法都是抽象的,就可以将这个类用另外一种方式来定义,也就是接口定义。
接口是抽象方法和常量值的定义的集合,从本质上将,接口是一种特殊的抽象类,这种抽象类中,只包含常量和方法的定义,而没有变量和方法的实现。
抽象类必须用abstract 关键字来修饰,抽象方法也必须用abstract 来修饰,接口中的成员都是 public 访问类型的,接口里的变量默认是用public static final 标识的。可以定义一个新的接口用 extends 关键字去继承一个已有的接口,也可以定义一个类,使用implements 关键字去实现一个接口中的所有方法,也可以去定义一个抽象类用implements 关键字去实现一个接口中定义的部分方法,一个类可以继承一个父类的同时,实现一个或多个接口,extends 关键字必须位于implements 关键字之前。
27.对象的类型转换
子类对象可以自动转换成父类,而父类转换成子类必须使用强制转换。一个基类的引用类型变量可以指向其子类的对象,一个基类的引用不可以访问其子类对象新增的成员(属性和方法)。可以使用 引用变量 instance of 类名来判断该引用变量所指向的对象是否属于该类或该类的子类。子类的对象可以当作基类的对象来使用,称作向上转型(upcasting),反之称为向下转型(downcasting)。
28.面向对象的多态性
应用程序不必为每一个派生类(子类)编写功能调用,只需要对抽象基类进行处理即可,可以大大提高程序的可复用性。派生类的功能可以被基类的引用变量引用,这叫做“向后兼容”,可以提高程序的可扩充性和可维护性。多态性存在的三个必要条件:
1)有继承;
2)有重写
3)父类应用指向子类对象;
29.异常
异常定义了程序中遇到的非致命的错误,而不是编译时的语法错误,如程序要打开一个不存在的文件,网络连接中断操作数越界,装载一个不存在的类等,操作数越界,装载一个不存在的类等。可以在一个方法中使用throw ,try......catch 语句来实现程序的跳转,一个方法被覆盖时,覆盖它的方法,必须扔出相同的异常或异常的子类,如果父类扔出多个异常,那么重写(覆盖)方法必须扔出那些异常的一个子集,也就是说不能扔出新的异常。
设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的后果。Java程序的执行过程如出现异常事件,可以生成一个异常类对象,该异常类对象封装了异常事件的信息,并将被提交给Java 运行时系统,这个过程成为抛出异常。
当Java 运行时系统接收到异常对象时,会寻找能处理这一异常的代码,并把当前异常对象交给其处理,这一过程称为捕获异常
JDK 中定义了许多异常类,这些类对应了各种各样可能出现的异常事件。
ERROR:称为错误,由Java 虚拟机生成并抛出,包括动态链接失败,虚拟机错误等,程序对其不做处理。
Exception:所有异常类的父类,其子类对应了各种各样可能出现的异常事件,一般需要用户显式的声明或捕获;
Runtime Exception : 一类特殊的异常,如被0 除,数组下标超出范围等,其产生比较频繁,处理比较麻烦,如果显示的声明或捕获,将会对程序可读性和运行效率影响很大,因此由系统自动检测,并将她们交给缺省的异常处理程序(用户可不必对其处理)。
try 代码段包含可能产生例外的代码,try 代码段后跟有一个或多个catch 代码段,每个catch 代码段声明其能处理的一种特定类型的异常并提供处理的方法。当异常发生时,程序会中止当前的流程,根据获取异常的类型去执行相应的catch 代码段。finally 段的代码无论是否发生异常,都会执行。
在 catch 语句块中,是对异常进行处理的代码,每个try 语句块可以伴随一个或多个catch 语句,用以处理可能产生的不同类型的异常对象。在 catch 中声明的异常对象(catch (someException e))封装了异常事件发生的信息,在catch 语句块中可以使用这个对象的 一些方法获取这些信息。getMessage()方法,用来得到有关异常事件的信息,printStackTrace() 方法,用来跟踪异常事件发生时堆栈的内容。
finally 语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其它部分以前,能够对程序的状态做统一的管理。
无论try 所指定的程序块是否抛出例外,finally 所指定的代码都要被执行,通常在finally 语句中可以进行资源的清除工作,如关闭打开的文件,删除临时文件等。
Java的例外处理机制使得例外事件例外事件沿着被调用顺序往前寻找,只要找到符合该例外种类的例外处理程序,在一个try 语句块中,基类异常的捕获语句不可以写在子类异常捕获语句的上面。
30.包
package 语句作为Java 源文件的第一条语句,如果没有Package 语句,则为缺省的无名包。
父包与子包在使用上没有任何关系,import 语句可有多条;
运行程序时,编译器提示找不到该类,可以从一下几个方面考虑:
1)程序类名是否写错(大小写问题);
2)没有import 该报名;
3)classpath 的问题;