抽象类和接口的区别和联系:
1.抽象类和接口都不能实例化(不能new),如果要实例化,抽象类变量只能指向子类对象,接口变量只能指向实现类对象
2.抽象类可以有抽象方法,也可以有具体方法,接口只能有抽象方法
3.抽象类中的履是变通属性,而接口里的必须是公共静态的常量
4.一个类只能继承一个抽象类,但可以实现多个接口
5.一个类继承一个抽象类,必须重写里面的抽象方法,否则该类只能是抽象类,接口也一样,实现一个接口,必须实现里面定义的全部抽象方法,否则该类是抽象类(注:接口里的方法全是抽象的)
事件编程步骤:
1.创建事件源
2.创建监听器
3.注册,也就是把前两者进行连接
异常:
异常的分类:是描述出错信息的对象(本质是对象)
1.编译期异常(检查异常):必须要处理,如果不处理,编译都无法通过
2.运行期异常(非检查异常):可处理,可不处理,无论是否处理,编译都能通过,所有的运行期异常,都是RuntimeException的子类
try{
}catch(Exception e){
}(这个估且叫异常处理机制)
finally{
}
异常执行顺序:
先执行try内的内容,如果没有异常就顺序执行,如果有异常,马上执行catch块的内容,同时中止try的其他代码,无论是否异常,finally都会执行
finally块:
无论有异常还是没异常都会执行的代码块,一般用于资源清理工作(流的关闭,数据库连接的关闭等),如果在try块或catch块中有return,finally会在跳出方法前执行(这点一定要注意)注:如果虚拟机关闭(System.exit(0)),finally不会再执行
如果一个try块后有多个catch块,那么在try抛出异常后,会执行第一个匹配异常对象的,catch块,忽略其他catch块,如:
try{
JFrame j = null;
j.setSize(400,300);
}
catch(NullPointerException e){
System.out.println("空指针异常");
}
catch(Exception e){
System.out.println("发生异常");
}
finally{
System.out.println("finally代码");
}
System.out.println("异常外代码");
执行结果是:
空指针异常
finally代码
异常外代码
如果代码是这样的:
try{
JFrame j = null;
j.setSize(400,300);
}
catch(Exception e){
System.out.println("发生异常");
}
catch(NullPointerException e){
System.out.println("空指针异常");
}
finally{
System.out.println("finally代码");
}
System.out.println("异常外代码");
这样是会报错的,因为 Exception是所有异常的父类(这也是一个典型的多态,父类指向子类对象),所以 NullPointerException这个代码是怎么都不可能到达的,所以会报不能到达的错