第 20 节课 集合收尾,异常

目录

TreeMap :底层是基于红黑树的Map接口的实现类

HashMap和Hashtable的区别

异常:Java程序出现的错误,程序出现了不正常的情况

异常处理的格式

final,finally,finalize的区别

File类的构造方法:

注意事项:

注意事项:

注意:

异常中需要掌握的方法:

格式:

throw和throws的区别:


TreeMap :底层是基于红黑树的Map接口的实现类

HashMap和Hashtable的区别

1、相同点:它们存储的元素类型都是K-V格式的

2、不同点:

1、Hashtable是线程安全的HashMap不是线程安全的

2、Hashtable的Key的值和value的值都不允许为null,而HashMap

异常:Java程序出现的错误,程序出现了不正常的情况

Java中的异常:Throwable

严重的问题:Error,一般情况下,我们不处理,这样的问题一般都是很严重的,比如OOM,内存溢出问题

问题:异常:Excption

运行时异常:RuntimeException,这样的问题我们不处理,因为这种问题一般都是你自己写代码出现的问题,比如代码不够严谨

编译时异常:除了不是RuntimeException都是编译时异常,必须要进行处理,如果你不处理,程序编译就不通过,无法运行。

如果程序出现了问题,我们没有做任何处理,最终JVM会给出一个默认的处理

把异常的名称,相关的原因,以及出现的问题的相关信息,包括位置输出在控制台,同时程序会结束,后面的代码不会运行

异常处理的格式

1、try...catch...finally

2、throws

try...catch...finally的处理格式:

try{

可能会出现问题的代码;

}catch(异常的类名 变量名){

针对问题的一些处理;

}finally{

释放资源的代码;

}

finally:在try...catch处理异常的时候,末尾通常会加一个finally,被它控制的语句体,一定会执行,一般情况下,里面放的是释放资源的代码

将来try...catch...finally用的最多的地方是连接数据库,finally,放的是释放连接资源的东西,IO的操作这里用的也是比较多的

final,finally,finalize的区别

final:最终的意思,可以修饰类,成员变量,成员方法

修饰类:类不能被继承

修饰成员变量:变量就是常量

修饰成员方法:方法不能被重写

finally:是处理异常的一部分,一般情况下用于释放资源的作用,一般来说都会执行,特殊情况下:在执行finally之前JVM就停了(System.exit(0))

finalize:是Object类中的一个方法,用于手动回收垃圾,但是不一定立即回收

JAVA中有一个类来供我们使用,抽象的表示硬盘上的各种文件,这个类叫做File

File:文件和目录(文件夹)路径名的抽象表现形式

File类的构造方法:

public File(String pathname)

public File(String parent,String child) 根据一个目录和一个子文件(目录)得到一个File对象

public File(File parent,String child) 根据一个父的File对象和一个子文件(目录)得到一个File对象

创建功能:

public boolean createNewFile() 创建一个新的文件,如果已经存在就不创建,不会报错,目录不存在报错

public boolean mkdir() 创建一个文件夹,已经存在不创建,返回false

public boolean mkdirs() 创建一个多级文件夹

public boolean delete() 删除文件夹前,要保证文件夹空

变形格式:

try{

可能会出现问题的代码;

}catch(异常的类名 变量名){

针对问题的一些处理;

}

注意事项:

1、try里面的代码尽量不要太多

2、catch里面必须要有内容,哪怕只是有一句简单提示语句

1、处理一个异常的情况

2、处理多个异常的情况

1、每个异常都写一个try...catch

2、写一个try,多个catch

try{

可能会出现问题的代码;

}catch(异常的类名 变量名){

针对问题的处理;

}catch(异常的类名 变量名){

针对问题的处理;

}...

注意事项:

1、能明确异常的类型的时候尽量明确,不要用父类大的作处理

2、平级的关系,多个catch异常没有前后顺序关系,谁在前谁在后无所谓,一旦出现了父类继承的关系,父必须在后

3、一旦try里面的代码出现了问题,就会去匹配catch里面的异常,继续执行程序后面的代码,但是try里面的代码就停在了出现问题的那一步。

JDK的新特性及注意事项

新特性处理多个异常

try{

可能会出现问题的代码;

}catch(异常类名1|异常类名|... 变量名){

处理异常的提示;

}

注意:

1、处理方式是一致的,这个方法虽然比较简洁,但是不够好,针对多种类型的问题,只给出了一种解决方案。

2、多个异常的类型之间必须是平级关系

编译时期异常与运行时期异常的区别

1、编译时期异常:JAVA程序必须显示处理,否则程序就会发生错误,无法通过编译

2、运行时期异常:无需显示处理,也可以和编译时异常一样处理

异常中需要掌握的方法:

getMessage()

获取异常信息,返回字符串

toString()

获取异常类名和异常信息,返回字符串。

返回此可抛出的简短描述。结果是:

这个对象的类name+“:”(一个冒号和一个空格)+调用这个对象的getLocalizedMessage()方法的结果

对于不重写此方法的子类,默认现实返回相同的结果为getMessage()

printStackTrace():获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void

我们不做处理的时候,一旦发生异常,后面的代码就不会运行,我们做了异常处理,后面的代码正常运行

我们没有权限去处理的异常,或者处理不了的异常,干脆不处理

JAVA针对这种情况,提供了throws抛出

格式:

throws异常类名

注意:这个格式必须跟在方法的小括号后面,大括号前面

注意:

1、编译时期异常抛出,方法内可以不做处理,但是将来调用者调用该方法的时候必须处理

2、运行时期异常抛出,将来调用者可以不做任何处理,但是一旦调用出错,后面的代码程序不会执行

3、最好抛出的是详细的异常类型,也是推荐的做法,可以抛出大的异常类型,但是处理的时候要对应上。

4、尽量不要在main方法上抛出,如果在main方法上抛出,程序会停止,后面的代码不会执行

throw:

在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出。

throw和throws的区别:

throws:用在方法声明的后面,跟的是异常的类名。

可以跟多个异常类名,用逗号隔开

表示的是抛出异常,由该方法的调用者处理

throws表示的是出现异常的一种可能性,为了程序的正常运行,我们选择抛出给调用者处理,不一定会发生这种异常

throw:用在方法内,跟着的是异常的对象。

只能抛出一个异常对象。

表示的时候抛出异常,由方法体内的语句做处理。

throw表示的是一定出现了某种异常

上一篇:Java中的异常处理


下一篇:try catch引发的性能优化深度思考