java异常转换_java的异常体系 及强制转换

一,异常

1.常见的几种异常:

StackOverFlow  栈溢出错误:写递归函数的时候,没有定义递归结束的条件。

ArrayIndexOutofBounds   数组越界:如新new一个数组,int arr=new int[4];  当访问arr[7]的时候,会出现数组越界的错误。

NullPointerException   空指针异常 : 引用变量没有引用有效的对象。

ClassCastException   类型转化错误:如将基类强制转换为派生类。

OutOfMemory(OOM)  堆内存耗尽,没有可用的堆内存。(一般开发大工程会出现,或内存泄露时)

2.异常体系:

15ccca27e0011e62a0509c042d9e9a82.png

3.异常的处理:

java程序如果不处理抛出的异常,那么最终会抛给JVM,JVM判断当前Java进程有一个未被处理的异常,会直接结束Java进程。如下面的程序:

********************************************************************************

1a575367bfdfcc51e5382fd421e37d24.png

*********************************************************************************************************

6587a9ccd238a69d33b26bb6fcdc748c.png

**********************************************************************************************************

异常的关键字:

try:一般把可能发生异常的代码,放在try语句的大括号里。

catch:紧跟try语句之后,可以同时出现多个catch语句,用来蒱获不同类型的异常。

finally:不管java程序有没有发生异常,finally语句块中的代码都会被执行到,所以一般把资源释放的代码都放在finally语句块中。

throw:抛出指定类型的异常对象(异常内容可自拟,默认为null,所以派生类也要赋值)。eg:throw new IllegalArgumentException("请输入:");

另外还可以抛出自定义类型的异常对象。此时要新new 一个class,要写明继承的对象(RuntimeException或Exception)

*****************************************************************

注意要重写getMessage()方法。

5579e8c91b2f8eb15be798591d966465.png

然后抛异常和接收异常同指定异常类似。

7380b333dcc03a0e8acf845b07d80086.png

此处相当new了一个对象,然后将参数传入,调用构造函数进行初始化。

在java代码中通过throw抛出的异常对象,是沿着函数的调用链逆向抛出的。因为在Java中,函数的执行顺序是:JVM -> main -> func1 ->func2 ->……

所以异常就是沿着  func2 -> func1 -> main ->JVM 抛的。除非有人处理了异常,否则当被抛到JVM时,程序运行就会被中断。

****************************************************************

抛出异常:

f3b96fafd1175d0cf6805c33fb20ff6e.png

接收异常:

faa50c7709be79fb734d6cc0140505e9.png

********************************************************************************************

throws:当函数不打算处理异常时,把异常抛给调用方。

c223a2c009be67e2a3af1a460c652c9e.png

这个方法名后面放throws ,意味着把异常抛给了main函数。

dc83837f668292f351dfe2cf2467cbed.png

在main方法中对异常进行了接收处理,此时就不会继续往JVM抛了。所以程序运行成功没有报错。

18c4f6adbdf206d2a76108352326aac5.png

4.总结

error 是JVM抛出的的,是不可挽回的。

Exception 是应用程序抛出的,是可挽回的。

异常Exception分为可检测异常和不可检测异常。

♥其中不可检测异常,是运行阶段才抛出的异常,编译阶段可以选择性的处理异常。

♥其中可检测异常,是编译阶段必须处理的异常否则代码编译不通过。处理的方法有两种:1,把可能发生的异常放在try  catch 块中处理。2,在函数名后面通过throws异常类型,把可能发生的异常抛给函数的调用方来处理。

5.注意:

1.把同类型的异常,最好放到一块进行处理

2.把循环放到异常里面。

3.当自定义异常类型时,想定义可检测异常则继承Exception,想定义不可检测的异常则需要继承RuntimeException.

一,强制转换

对于强制转换来说,虽然被叫做是强制转换,但它也只能是将它的子类强制转换成他自己的类型,而不能将基类强制转换他自己的类型。

例如:

1.

4cb9f2498d28591606e34eca523369e4.png

此处Test()继承了Student类,即Test()是Student类的子类。

运行结果如下:

a11eef81b29b096588d4c9d1d7ca1088.png

没有报强制转换的错误,说明类型转换成功。

2.

eb19f60daa14741b3d14b4370866ccd7.png

运行结果如下:

8640b4b5004bafcb51bee021b24fd20b.png

运行后报错Object cannot be cast to Student,说明强制转换不支持将基类转换成派生类。

3.

2d50f770af6334f904a1a9177c6fede9.png

结果如下:

4cb93d006b0faedb42cd20cddc3ee905.png

说明强制转换不支持将基类转换成派生类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值