Java异常类和常用类 容器

参考博客:


10种常用类_岚电的博客-CSDN博客

Java中的异常和处理详解_weixin_34414196的博客-CSDN博客

目录

一.异常类

1.概念:

2.分类:

3.异常处理的基本语法

一、捕获:try-catch(在方法体内)

二、抛出:throws(在方法上)

4.自定义异常

二.常用类

1、内部类

2、Object类

3、包装类

4、String类

5、StringBuffer类和StringBuilder类

6、BigDecimal类

7、Date类

8、Calendar类

9、SimpleDateFormat类

10、System类

三、容器

1、定义

2、分类

List:

Set:

Map:

工具类


一.异常类

1.概念:

异常是程序运行中出现的一些错误,Java提供了优秀的解决办法:异常处理机制

异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。

Java中的异常可以是函数中的语句执行时引发的,也可以是程序员通过throw 语句手动抛出的,只要在Java程序中产生了异常,就会用一个对应类型的异常对象来封装异常,JRE就会试图寻找异常处理程序来处理异常。

2.分类:

Java标准库内建了一些通用的异常,这些类以Throwable为顶层父类。Throwable又派生出Error类和Exception类。

Throwable类是Java异常类型的顶层父类,一个对象只有是 Throwable 类的(直接或者间接)实例,他才是一个异常对象,才能被异常处理机制识别。JDK中内建了一些常用的异常类,我们也可以自定义异常

Error:(及其子类的实例)代表了JVM本身的错误(不可预料),错误不能被程序员通过代码处理。(很少出现)

Exception:(较常见)(可预料)

针对javac分类检查与非检查

        1)非检查异常(unckecked exception):

        Error 和 RuntimeException 以及他们的子类。对于这些异常,我们应该修正代码,而不是去   通过异常处理器处理 。这样的异常发生的原因多半是代码写的有问题。

如除0错误ArithmeticException,错误的强制类型转换错误ClassCastException,数组索引越界ArrayIndexOutOfBoundsException,使用了空对象NullPointerException等等。

        2)检查异常(checked exception):

        除了Error 和 RuntimeException的其它异常。在方法中要么用try-catch语句捕获它并处理,要么用throws子句声明抛出它,否则编译不会通过。这样的异常一般是由程序的运行环境导致的。

SQLException , IOException,ClassNotFoundException 等。

3.异常处理的基本语法

一、捕获:try-catch(在方法体内)

		try {
			//可能发生异常的代码
		} catch (Exception e) {
			//针对异常出现后,要进行的操作
		}finally {
			//一定会执行的代码,一般是关闭流、数据库连接等
		}

注意事项:
1、子类异常在上面,父类异常在下面,平级异常顺序无所谓
2、不要用Exception处理全部,尽量细化异常处理方式,因为不同的异常可能要进行不同的处理

二、抛出:throws(在方法上)

向外再抛出给调用者(谁调用谁处理),为了给调用者(其他程序员)一个提示
语法:通过throws关键字,用在方法()后{}前,多个异常逗号隔开,顺序无所谓。

public void foo() throws ExceptionType1 , ExceptionType2 ,ExceptionTypeN
{ 
     //foo内部可以抛出 ExceptionType1 , ExceptionType2 ,ExceptionTypeN 类的异常,或者他们的子类的异常对象。
}

throws仅仅是将函数中可能出现的异常向调用者声明,而自己则不具体处理。

4.自定义异常

按照国际惯例,自定义的异常应该总是包含如下的构造函数:

  • 一个无参构造函数
  • 一个带有String参数的构造函数,并传递给父类的构造函数。
  • 一个带有String参数和Throwable参数,并都传递给父类构造函数
  • 一个带有Throwable 参数的构造函数,并传递给父类的构造函数。

二.常用类

1、内部类

顾名思义,内部类是定义在一个类里面的类。

成员内部类、静态内部类、局部内部类、匿名内部类

2、Object类

Object类是超类,是所有类直接或间接的父类,可以存储任何对象。

3、包装类

基本数据类型所对应的引用数据类型,可实现自动装箱和自动拆箱。

4、String类

字符串是常量,创建之后不可改变;字符串字面值存储在字符串池中,可以共享。

5、StringBuffer类和StringBuilder类

StringBuffer(使用缓冲区)

可变长字符串,JDK1.0提供,线程安全,运行效率较低

StringBuilder(使用缓冲区)

可变长字符串,JDK5.0提供,运行效率高,线程不安全

与String区别:

(1)比String效率高;

(2)比String节省内存

6、BigDecimal类

精确计算浮点数

7、Date类

Date表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calendar类中的方法所取代。

8、Calendar类

Calendar提供了获取或设置各种日历字段的方法。

构造方法:protected Calendar();由于修饰符是protected,所以无法直接创建对象。

9、SimpleDateFormat类

SimpleDateFormat是一个以与语言环境有关的方式来格式化解析日期的具体类。

进行格式化(日期 -> 文本)、解析(文本 -> 日期)。

10、System类

系统类,主要用于获取系统的属性数据和其他操作,构造方法私有。

三、容器

1、定义

java容器是前人为我们提供的一套用于存储数据和对象的工具。java容器又可以称为Java Collection Framework(JCF)。里面除了存储对象的容器之外,还提供了一套用于处理和操作容器里面的对象的一套工具类。

2、分类

List:

列表,是一个接口。它的实现类常用的有LinkedList、ArrayList和Vector。

1)LinkedList:

采用双向链表实现的列表,因此可以被用作队列、堆栈、双端队列;顺序访问高效,随机访问性能较差、适用于需要经常添加和删除的数据。

LinkedList不支持同步。

2)ArrayList:

是采用数组实现的列表,因此它支持随机访问,不适合频繁删除和插入操作。对于需要经常进行查询的数据建议采用此结构。ArrayList与java数组的一个大的区别是ArrayList能够自动扩容

ArrayList不支持同步。

3)Vector:

Vector用法和ArrayList用法很相似,它们的区别在于Vector是线程同步的而且Vector有另外的遍历方式。

Set:

集合,和数学中的集合类似。

特点:

  1. 确定性:对任一对象都能判定它是否属于某一个集和
  2. 互异性:一个集和中不会存在两个相同(内容相同)的对象
  3. 无序性:集和里面的元素没有顺序

1)HashSet

基于散列函数的集和,采用HashMap实现,可以容纳null元素,不支持同步(可以通过Collections.synchronizedSet(new HashSet<…>()来使它同步)

2)HashLinkedSet

继承HashSet ,基于散列函数和双向链表的集和,可以容纳null元素,通过双向链表维护了插入顺序,从而支持排序,但不支持同步(可以通过Collections.synchronizedSet(new HashSet<…>()来使它同步)

3)TreeSet

基于树结构的集和,印次支持排序,不能容纳null元素,同样不支持同步

Map:

Map是一类重要的数据结构。类似于数学中的函数,key对应自变量x、value对应因变量y、散列函数对用f

1)Hashtable

key和value都不能为空,HashTable是线程安全的、同步的,但只适合用于小数据量

2)HashMap

HashMap允许有null,不支持同步(支持通过Collections.synchronizedMap(new Map<…,…>() 实现同步),所以线程不安全。但可以存储大量数据

3)LinkedHashMap
基于双向链表用于维持插入顺序的HashMap,继承自HashMap

4)TreeMap
基于红黑树的Map,可以根据key的自然排序或者compareTo方法排序输出

5)Properties
继承自Hashtable。特有的方法有load()、store()等等。

工具类

1)Arrays

Arrays处理的对象是数组,常用的方法包括排序sort、查找binarySearch、拷贝copy等等。

2)Collections

Collections可以操作collections接口及其所有子类、常用的用法和Arrays差不多。但它的sort方法要求被排序对象实现了compareable接口或者传入一个compactor对象(主要针对某些类不能去被修改)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值