Java异常处理

举报
holo.yh 发表于 2021/10/30 23:44:16 2021/10/30
【摘要】 错误和异常异常指程序在执行过程中,出现的非正常情况,导致JVM非正常停止。Throwable分为Error,ExceptionError:严重错误问题,无法处理的错误,只能事先避免,如:内存溢出;Exception:异常类,程序本身可以处理的问题,如:数组下标越界。异常分类编译时异常,也称检查异常,必须显示处理,否则程序会发生错误,无法通过编译。运行时异常,也称非检查异常,无需显示处理,可以...

错误和异常

异常指程序在执行过程中,出现的非正常情况,导致JVM非正常停止。

Throwable分为Error,Exception

Error:严重错误问题,无法处理的错误,只能事先避免,如:内存溢出;

Exception:异常类,程序本身可以处理的问题,如:数组下标越界。

异常分类

编译时异常,也称检查异常,必须显示处理,否则程序会发生错误,无法通过编译。

运行时异常,也称非检查异常,无需显示处理,可以和编译时异常一样处理。

RuntimeException所有类及子类为运行时异常,其它异常为编译时异常。

异常处理机制

当程序中抛出异常后,从程序中导致异常的代码处跳出,java虚拟机检测寻找和try关键字匹配的处理改异常的catch块。如果找到执行catch块,没有找到运行时报错。

格式:try{……}catch{……}

异常处理多个 …catch… ,捕获的异常类型由上至下,顺序是子类到父类。

Finally

Finally 语句为异常处理提供的一个统一的出口,使得在控制流程到程序其它部分之前能够对程序的状态作统一的管理。

无论try程序块是否抛出异常,finally的代码都要执行,finally语句中进行资源释放工作,如关闭打开的文件,关闭数据库连接等。

语法:try{……}catch(异常名 变量名){异常处理块}finally{执行块}

Throwsthrow关键字

Throws关键字是在声明的方法上抛出异常。

语法:修饰符  返回值类型  方法名(参数) throws 异常类名1,异常类名2…{  }

编译时异常必须要处理,运行时异常可以不处理。

Throw关键字当程序发生错误而无法处理的时候抛出对应的异常对象,或者自行抛出异常并生成指定的异常对象后抛出。

语法:throw new 异常类名(参数)

子类和父类构造函数中使用throws关键字

父类构造函数使用throws抛出编译时异常,子类构造方法中throws抛出的异常必须大于等于父类throws抛出的异常,只能抛出不能捕获。

父类构造函数使用throws抛出运行时异常,子类构造方法中可以声明异常也可以不声明,如果声明子类构造函数中抛出的异常要大于或等于父类中抛出的异常。

方法重写中使用throws关键字

使用继承时,在父类某个方法上声明了异常,子类重写这个方法时

不处理异常,

仅throws父类方法中声明的部分异常

子类throws抛出的异常小于或等于父类抛出的异常

子类重写父类方法时抛出运行时异常,那么父类的方法上可以不抛出异常。

如果父类方法没有抛出异常,子类重写方法抛出编译异常,那么子类方法会报编译错误,解决办法:

1.父类被重写的方法抛出异常大于或等于子类方法抛出的异常

2.子类方法直接捕获异常,不抛出

RuntimeException和自定义异常类

常见RuntimeException:NullPointerExce,ArrayIndexOutOfBoundsException,ClassCastException,NumberFormatException

Exception常用API:printStackTrace,getMessage

自定义异常继承Exception

语法:public class 自定义异常类名 extends Exception { }

垃圾回收机制

垃圾回收机制是JVM自带的一个线程用于回收没有任何引用指向的对象。

finalize()是Object中的方法,当垃圾回收器将要回收对象所占内存之前调用。

内存泄漏,不使用的内存没有及时收回,严重内存泄漏会因过多的内存占用而导致程序奔溃。


第2章 数组的定义和使用

组的定义和作用

数组是一种数据类型,存储相同数据类型的一组数据,声明数组是在内存中开辟一串连续的空间。

定义:

动态初始化

语法:数据类型[] 数组名 = new 数据类型[数组长度]

静态初始化

语法:数据类型[] 数组名 = new数据类型[]{值1,值2,……}

数据类型[] 数组名 = {值1,值2,……}

数组元素访问

语法:数组名[索引],索引从0开始,连续的,每次加1

内存分配

栈内存:存储局部变量

堆内存:存储new出来的内容(实体,对象)

数组的遍历

For循环,循环次数=数组长度-1

数组长度:数组名.length

数组中的数组

数组中的每个元素也是一个数组,如同二维数组

语法:数据类型[][] 数组名 = new 数据类型[外层数组长度][内层数组长度]

    int[][] score = new int[3][5]

数组的排序

排序算法:插入,冒泡,快速排序等

冒泡排序是比较相邻的元素,如果违反最后的顺序准则,则交换

数组中最大、最小、过滤重复

最大值:定义变量存放最大值,假设数组中第一个元素为变量初始值,该变量跟数组中其它值进行比较,如果遇到比该值大的重新赋值,比较完后该变量就是最大值。

最小值:定义变量存放最小值,假设数组中第一个元素为变量初始值,该变量跟数组中其它值进行比较,如果遇到比该值小的重新赋值,比较完后该变量就是最小值。

过滤重复:去掉数组中的重复值。

数组复制:使用 System.arraycopy()

数组的系统类Arrays

Arrays类包含用于操作数组的各种方法。

toString():返回指定数组的内容的字符串

sort():按照数字从小到大排序指定数组

copyOf():复制指定的数组

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。