十二、Object类
在Java中所有的类都有一个公共的父类就是类,一个类只要没有明显的继承一个类,则肯定是Object类的子类。
主要是两个方法equals(Object):对象比较(比较的是地址信息)
toString():在直接输出对象的时候会默认调用类中的toString()方法
Object类可以接收任意引用类型的对象
十三、内部类
当类中需要使用一些数据,不会再其他类中使用,但是使用的比较频繁,此时,我们可以定义成内部类。
成员内部类
内部类对象,一般都是在外部类中使用。
内部类中可以直接访问外部类的成员
匿名内部
在方法内写。
格式:
父类|抽象类|接口 变量 = new 父类|抽象类|接口(){
方法的重写
};
十四、包
package是在使用多个类或接口时,为了避免名称重复而采用的一种措施,直接在程序中加入package关键字即可。
包的定义格式:
package 包名称.子包名称 ;
导入包格式:
import 包名称.子包名称.类名称 ; 手工导入所需要的类
import 包名称.子包名称.* ; 由JVM自动加载所需要的类
注意:用“importmypackage.*;”语句只是导入了该包中的所有类和接口,并不能导入该包下的子包中的所有类和接口。
十五、访问权限
十六、异常
定义:
Java通过面向对象的方法来处理程序错误,在Java中,错误称为异常
异常的分类:
所有的异常都直接或间接地继承Throwable类
异常分成两大类:Error类和Exception类(后者是Java中需要大量处理的)
除了Java类库中所定义的异常类外,用户可以通过继承已有的异常类来定义自己的异常类,并在程序中使用(利用throw产生,catch捕捉)
Error:由JVM生成并抛出,Java程序并不做处理
Runtime Exception(非检查性异常):JVM在运行时生成的异常,如被0除、下标越界等,其产生比较频繁,处理麻烦,对程序可读性和运行效率影响太大,因此由系统检测,用户可不对处理,系统将它们交给缺省的异常处理程序,必要时,用户可对其处理。
Exception:一般程序中可预知的问题,其产生的异常可能会带来意想不到的结果,因此要求Java程序必须捕获或声明所有的非运行时异常
捕获异常:
格式:
try{
//接受监视的程序块,在此区域内发生
//的异常,由catch中指定的程序处理;
}catch(要处理的异常种类和标识符){
//处理异常;
}catch(要处理的异常种类和标识符){
//处理异常;
}
…
}finally{
//最终处理;
//无论产生不产生异常,都会进行的操作
//通常在这里进行资源的清楚工作,比如关闭打开的文件等
}
注意:多个catch中,从上往下的异常可以是同级别的异常类型或者是子父关系,即父类写在下面
声明异常:
如果在一个方法中生成了例外,但是该方法并不处理它产生的例外,而是沿着调用层次向上传递,由调用它的方法来处理这些例外,叫声明例外。
即在方法定义时在方法名后面加throws 异常名
比如:public int read() throws IOException { … }
抛出异常:
格式:throw Throwable或其子类的实例
比如 throw new ArrayIndexOutOfBoundsException();
创建自己的异常:
自定义异常同样要用try-catch-finally捕获,但必须由用户自己抛出(throw newMyException)。
自定义异常必须继承自Throwable或Exception类,建议用Exception类。
自定义例外的一般形式:
class MyException extends Exception
{
…
}
throw和throws的区别:
throw是语句抛出一个异常,一般是在代码块的内部,当程序出现某种逻辑错误时由程序员主动抛出某种特定类型的异常
throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)
public void function() throws Exception{......}
当某个方法可能会抛出某种异常时用于throws 声明可能抛出的异常,然后交给上层调用它的方法程序处理
throw与throws的比较
1、throws出现在方法函数头;而throw出现在函数体。
2、throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。
3、两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。