java的异常体系 及强制转换
一,异常
1.常见的几种异常:
StackOverFlow 栈溢出错误:写递归函数的时候,没有定义递归结束的条件。
ArrayIndexOutofBounds 数组越界:如新new一个数组,int arr=new int[4]; 当访问arr[7]的时候,会出现数组越界的错误。
NullPointerException 空指针异常 : 引用变量没有引用有效的对象。
ClassCastException 类型转化错误:如将基类强制转换为派生类。
OutOfMemory(OOM) 堆内存耗尽,没有可用的堆内存。(一般开发大工程会出现,或内存泄露时)
2.异常体系:

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

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

**********************************************************************************************************
异常的关键字:
try:一般把可能发生异常的代码,放在try语句的大括号里。
catch:紧跟try语句之后,可以同时出现多个catch语句,用来蒱获不同类型的异常。
finally:不管java程序有没有发生异常,finally语句块中的代码都会被执行到,所以一般把资源释放的代码都放在finally语句块中。
throw:抛出指定类型的异常对象(异常内容可自拟,默认为null,所以派生类也要赋值)。eg: throw new IllegalArgumentException("请输入:");
另外还可以抛出自定义类型的异常对象。此时要新new 一个class,要写明继承的对象(RuntimeException或Exception)
*****************************************************************
注意要重写getMessage()方法。

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

此处相当new了一个对象,然后将参数传入,调用构造函数进行初始化。
在java代码中通过throw抛出的异常对象,是沿着函数的调用链逆向抛出的。因为在Java中,函数的执行顺序是:JVM -> main -> func1 ->func2 ->……
所以异常就是沿着 func2 -> func1 -> main ->JVM 抛的。除非有人处理了异常,否则当被抛到JVM时,程序运行就会被中断。
****************************************************************
抛出异常:

接收异常:

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

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

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

4.总结
error 是JVM抛出的的,是不可挽回的。
Exception 是应用程序抛出的,是可挽回的。
异常Exception分为可检测异常和不可检测异常。
♥其中不可检测异常,是运行阶段才抛出的异常,编译阶段可以选择性的处理异常。
♥其中可检测异常,是编译阶段必须处理的异常否则代码编译不通过。处理的方法有两种:1,把可能发生的异常放在try catch 块中处理。2,在函数名后面通过throws异常类型,把可能发生的异常抛给函数的调用方来处理。
5.注意:
1.把同类型的异常,最好放到一块进行处理
2.把循环放到异常里面。
3.当自定义异常类型时,想定义可检测异常则继承Exception,想定义不可检测的异常则需要继承RuntimeException.
一,强制转换
对于强制转换来说,虽然被叫做是强制转换,但它也只能是将它的子类强制转换成他自己的类型,而不能将基类强制转换他自己的类型。
例如:
1.

此处Test()继承了Student类,即Test()是Student类的子类。
运行结果如下:

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

运行结果如下:

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

结果如下:

说明强制转换不支持将基类转换成派生类。
java的异常体系 及强制转换的更多相关文章
- Java基础——异常体系
在Java中,异常对象都是派生于Throwable类的一个实例,Java的异常体系如下图所示: 所有的异常都是由Throwable继承而来,在下一层立即分解为两个分支,Error和Exception. ...
- Java中异常体系
Java中的异常体系 Throwable,是一个类,表示可抛出的,它是所有的异常都继承的类. Throwable的子类,又分为两种,一种是Error,另一种是Exception. Error一般不是应 ...
- Java:异常体系
异常的类别:可处理异常,运行时异常,非运行时异常 子类重写父类方法,父类方法有异常抛出, 子类重写父类的方法? 不能比父类抛出更大的异常 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?ca ...
- Java基础系列5:深入理解Java异常体系
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 前言: Java的基 ...
- Java——深入理解Java异常体系
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 前言: Java的基 ...
- Java学习之==>异常体系
一.定义 程序运行时总是会遇到各种各样的问题,Java中的异常体系就是针对这些问题提出的统一的处理方案.在Java中,将这些各种各样的问题进行归类后,统一称为异常. 二.分类 我们先来看看下面这个图: ...
- java常见异常(转载)
版权声明: https://blog.csdn.net/qq_32595075/article/details/80059834 一般面试中java Exception(runtimeExceptio ...
- Java常见异常类型
在Java学习过程中,我们会碰到各种各样的异常,现将面试过程中遇到的常见异常做一罗列并举例: 1.NullPointerException: 空指针异常.菜鸟编程经验发现这个异常是经常会发生的,属于运 ...
- java中异常介绍
一.异常概述 异常处理已经成为衡量一门语言是否成熟的标准之一,目前的主流编程语言如C++.C#.Ruby.Python等,大都提供了异常处理机制.增加了异常处理机制后的程序有更好的容错性,更加健壮. ...
随机推荐
- KVM管理工具 WebVirtMgr
WEB管理工具 WebVirtMgr WebVirtMgr是一个基于libvirt的Web界面,用于管理虚拟机.它允许您创建和配置新域,并调整域的资源分配.VNC查看器为来宾域提供完整的图形控制台.K ...
- 个人任务Day3
昨日成果: 学习有关java的网络爬虫知识. 今日任务: 向数据库中完善数据,并写出选择查看团队博客的界面.
- Error connecting to the Service Control Manager: 拒绝访问 Mongodb问题-解决
原文地址:https://blog.csdn.net/carrot5032/article/details/74742888 发现在mongodb.log里出现 2017-07-07T17:01:5 ...
- (转自360安全客)深入理解浏览器解析机制和XSS向量编码
(译者注:由于某些词汇翻译成中文后很生硬,因此把相应的英文标注在其后以便理解.这篇文章讲的内容很基础,同时也很重要,希望对大家有所帮助.) 这篇文章将要深入理解HTML.URL和JavaScript的 ...
- 图像矫正技术深入探讨(opencv)
刚进入实验室导师就交给我一个任务,就是让我设计算法给图像进行矫正.哎呀,我不太会图像这块啊,不过还是接下来了,硬着头皮开干吧! 那什么是图像的矫正呢?举个例子就好明白了. 我的好朋友小明给我拍了这几张 ...
- 《编写高质量代码:改善C#程序的157个建议》是C#程序员进阶修炼的必读之作
- Python中类属性和实例属性的区别
在Python中经常会混淆类属性和实例属性的概念,今天专门记录一下个人理解以免日后忘记. 看下面的例子: class Tencent(): i = 10 # 此处i为类属性 def __init__( ...
- Spring Cloud服务注册中心交付至kubernetes
前言 服务发现原则: 各个微服务在启动时,会将自己的网络地址等信息注册到服务发现组件中,服务发现组件会存储这些信息 服务消费者可以从服务发现组件中查询到服务提供者的网络地址,并使用该地址来远程调用服务 ...
- 第一篇:Vue基础
Vue基础 渐进式JavaScript框架 通过对框架的了解与运用程度,来决定其在整个项目中的应用范围,最终可以独立以框架方式完成整个web前端项目 走进Vue 什么是Vue 渐进式JavaScrip ...
- High一下!
代码: <a title="把这个链接拖到你的Chrome收藏夹工具栏中" href='javascript:(function() { function c() { var ...