abstract 关键字不能用来修饰变量和构造方法,即没有抽象变量和抽象构造方法的说法 。abstract关修饰的的方法只有被子类重写才有意义。否则这个方法永远没有方法体,因此抽象方法不能被定义为private,即private 和abstract不能同时修饰方法,avstract也不能和static,final 或native 同时修饰同一方法。
抽象类不能被实例化,只能被当成父类来继承。从语义角度上讲,抽象类是从多个具有相同特征的类中抽象出的一个父类。
阶段4:
4.1异常概述:
java 异常分类:
1.错误:Error。虚拟机相关的问题,如系统崩溃,虚拟机错误,动态链接失败。
2.异常:Exception。程序编码错误导致,这些问题能够被系统捕获并进行处理,从 而避免应用程序非正常中断,例如:除以0,对负数开平方根、空指针访问等。
非检查型异常:ArrayIndexOutOfBoundsException NullPointerException NumberFormatException ArithmeticException ClassCastException
检查型异常:SQLException IOException FileNotFoundException
java 异常2种处理机制:
1.try....catch
2.throws
try..catch...finally
单catch 语句捕获异常
try{ }
catch(Exception e){//出错信息 e.printStackTrace();}
多catch语句
try{}
catch(InputMismatchException e){//出错信息1}
catch(ArithmeticException e){//出错信息2}
catch(Exception e){//other error; e.printStackTrace();}
异常捕获:
从java7之后可以这么写
try{}
catch(InputMismatchException | ArithmeticException e){ // Error info;}
try..catch..finally
保证代码即便出现了错 误,也能够被执行。
public static void test1(){
try{FileInputStream fis = new FileInputStream("c://txt");}
catch(FileNotFoundException e){e.printStackTrace();}
finally{// 最终一定会被执行的代码:比如释放资源的代码,都会被正确的释放,即便前面出现return }
}
java新版本的写法,自动释放资源,把资源放到try()括号里,java自动运行finally的close功能。
public static void test2(){
try(FileInputStream fis = new FileInputStream("c://txt");){//这里还有其他的处理代码。}
catch(FileNotFoundException e){e.printStackTrace();}
finally{// 最终一定会被执行的代码:比如释放资源的代码,都会被正确的释放,即便前面出现return }
}
4.3抛出异常:
throw 抛出的是一个异常对象。
try{ if(b==0) throw new Exception("除数不能为零");}
catch(){}
finally{}
或者:
public static void chufa() throws Exception{..}
那么在调用这个方法的时候,必须要针对这个异常进行处理。
public static void main (String[] args){
try{chufa();}
catch(Exception e){e.printStackTrace();}
}
chufa() throws ArithmeticException,InputMismatchException{}
抛出一个异常序列
自定义异常:
public class AgeException extends Exception{
public AgeException(){}
public AgeException(String msg){
super(msg);
}
}
自定义异常,可以继承Exception或者Runtime Exception.
4.5集合概述:
Java中的集合分为三大类:
Set集合:无序,元素不重复
List集合:有序,寻秩访问,元素可重复,长度可变。
Map集合:每个元素都是Key/Value 键值对组成,根据Key访问value,Map集合中的Key不能重复,value可以重复。
Collection借口:
是Set,Queue,List的父接口,常用方法:
add(),addAll(),clear(),contains(),containsAll()
Collection 借口没有提供获取某个元素的方法,但可以通过iterator()方法获取迭代器来遍历集合中的所有元素。
Iterator接口:
Iterator可以采用统一的方式对Collection集合中的元素进行遍历操作。
Iterable接口是Collection接口的父接口。所有实现了Iterable的集合类都是可迭代的,都支持foreach循环遍历。
4.6集合类:
List常用方法:
add() addAll() get() indexOf() lastIndexOf()
ArrayList和Vector 是List接口的两个典型实现类,完全支持List接口的所有功能方法。
ArrayList是线程不安全,Vector线程安全。
Vector的一个子类Stack,可以模拟栈。
4.7集合工具类:
Collections 和 Arrays
Collections 提供了一些对Collection集合常用的静态方法。比如:排序,复制,查找,填充。
使用Collections工具类为集合进行排序时,集合中的元素必须是Comparable可比较的,Java提供一个Comparable接口,该接口中只有一个compareTo()比较方法。