异常
Java语言中将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)
执行过程中发生的异常事件可分为两类:
1)Error(错误):Java虚拟机无法解决的严重问题,如JVM系统内部错误、资源耗尽等严重情况。比如StackOverflowError【栈溢出】和OOM(out of memory),Error是严重错误,程序会崩溃。
2)Exception:其他因编程错误或偶然的额外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如空指针访问、试图读取不存在的文件、网络连接中断等。Exception分为两大类:运行时异常和编译时异常。
try{
//代码块
}catch(Exception e){
/*异常发生时,系统将异常封装成Exception对象e,传递给catch。得到异常对象后,程序员自己处理。*/
}finally{
//不管try代码块是否有异常发生,始终要执行finally
}
可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如(Exception在后,NullPointerException在前),如果发生异常,只会匹配一个catch。
public void run() {
while(loop){
System.out.println("Hello");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
cnt++;
System.out.println(cnt);
}
}
可以进行try-finally配合使用,这种用法相当于没有捕获异常,因此程序会直接崩溃。
throws后面的异常类型可以试方法中产生的异常类型,也可以是它的父类,也可以抛出多个异常。子类重写父类的方法时:对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出异常类型的子类型。
自定义异常
当程序中出现了某些“错误”,但该错误信息没有在Throuable子类中描述处理,这时候可以自己设计异常类,用于描述该错误信息。
throw与throws关键字的区别
throw | throws |
手动生成异常对象的关键字 | 异常处理的一种方式 |
方法体中 | 方法声明处 |
+异常对象 | +异常类型 |
集合
- 可以动态保存任意多个对象,使用比较方便;
- 提供了一系列方便的操作对象的方法:add,remove,set,get等;
- 使用集合添加删除新元素的代码更加简洁。
Collection接口实现类的特点:
public interface Collection<E> extends Iterable<E>
1.Collection实现子类可以存放多个元素,每个元素可以是Object。
2.有些Collection的实现类,可以存放重要的元素,有些不可以。
3.有些Collection的实现类,有些是有序的(List),有些不是有序的(Set)。
4.Collection接口没有直接的实现子类,是通过他的子接口Set和List来实现的。
Collection接口遍历元素的方式--使用Iterator(迭代器)
1.Iterator对象称为迭代器,主要用于遍历Collection集合中的元素。
2.所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象,即可以返回一个迭代器。
3.Iterator仅用于遍历集合,Iterator本身并不存放对象。
ArrayList是由数组实现数据存储的。
ArrayList(null也可塞入)基本等同于Vector,除了ArrayList是线程不安全(执行效率高)。在多线程的情况下,不建议使用ArrayList。
- ArrayList是可变数组,效率高但不安全,在ArrayList的底层结构中:
- ArrayList中维护了一个Object类型的数组elementData(transient Object[] elementData)
- 当创建ArrayList对象时,如果使用的是无参构造起,则初始elementData容量为0,第一次添加,则扩容elementData为10,如果需要再次扩容,则扩容elementData为1.5倍。
Vector
Vector底层也是一个对象数组,protected Object[] elementDataa;
Vector是线程同步的,即线程安全。Vector类的操作方法带有synchronized。
public synchronized E get(int index){
if(index>=elementCount)
throw new ArrayIndexOutOfBoundsException(index);
return elementData(index);
}
在开发中需要线程同步安全时,考虑使用Vector。