Java学习记录(6)

异常

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关键字的区别

throwthrows
手动生成异常对象的关键字 异常处理的一种方式
方法体中方法声明处
+异常对象+异常类型

集合
  •  可以动态保存任意多个对象,使用比较方便;
  • 提供了一系列方便的操作对象的方法: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。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值