一,异常

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的异常体系 及强制转换的更多相关文章

  1. Java基础——异常体系

    在Java中,异常对象都是派生于Throwable类的一个实例,Java的异常体系如下图所示: 所有的异常都是由Throwable继承而来,在下一层立即分解为两个分支,Error和Exception. ...

  2. Java中异常体系

    Java中的异常体系 Throwable,是一个类,表示可抛出的,它是所有的异常都继承的类. Throwable的子类,又分为两种,一种是Error,另一种是Exception. Error一般不是应 ...

  3. Java:异常体系

    异常的类别:可处理异常,运行时异常,非运行时异常 子类重写父类方法,父类方法有异常抛出, 子类重写父类的方法? 不能比父类抛出更大的异常 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?ca ...

  4. Java基础系列5:深入理解Java异常体系

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 前言: Java的基 ...

  5. Java——深入理解Java异常体系

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 前言: Java的基 ...

  6. Java学习之==>异常体系

    一.定义 程序运行时总是会遇到各种各样的问题,Java中的异常体系就是针对这些问题提出的统一的处理方案.在Java中,将这些各种各样的问题进行归类后,统一称为异常. 二.分类 我们先来看看下面这个图: ...

  7. java常见异常(转载)

    版权声明: https://blog.csdn.net/qq_32595075/article/details/80059834 一般面试中java Exception(runtimeExceptio ...

  8. Java常见异常类型

    在Java学习过程中,我们会碰到各种各样的异常,现将面试过程中遇到的常见异常做一罗列并举例: 1.NullPointerException: 空指针异常.菜鸟编程经验发现这个异常是经常会发生的,属于运 ...

  9. java中异常介绍

    一.异常概述 异常处理已经成为衡量一门语言是否成熟的标准之一,目前的主流编程语言如C++.C#.Ruby.Python等,大都提供了异常处理机制.增加了异常处理机制后的程序有更好的容错性,更加健壮. ...

随机推荐

  1. spring-cloud-gateway报错

    2019-08-13 09:41:19.216 WARN [-,,,] 10084 --- [ main] ConfigServletWebServerApplicationContext : Exc ...

  2. (树形DP入门题)Anniversary party(没有上司的舞会) HDU - 1520

    题意: 有个公司要举行一场晚会.为了让到会的每个人不受他的直接上司约束而能玩得开心,公司领导决定:如果邀请了某个人,那么一定不会再邀请他的直接的上司,但该人的上司的上司,上司的上司的上司等都可以邀请. ...

  3. AutoIT测试实例

     AutoIT是一款非常强大的免费功能自动化测试工具,使用它可以轻松实现web和winform的自动化测试.其脚本语言AU3语法类似于VB语言和vbs脚本语言,对于经常使用QTP的童鞋来说,非常容易上 ...

  4. Nginx-负载均衡实现解读

    负载均衡在服务端开发中算是一个比较重要的特性.因为Nginx除了作为常规的Web服务器外,还会被大规模的用于反向代理前端,因为Nginx的异步框架可以处理很大的并发请求,把这些并发请求hold住之后就 ...

  5. java线程基础梳理

    java线程 概述 进程:运行时概念,运行的应用程序,进程间不能共享内存 线程:应用程序内并发执行的代码段,可以共享堆内存和方法区内存,而栈内存是独立的. 并发理解:在单核机器上,从微观角度来看,一段 ...

  6. CTF--HTTP服务--SQL注入GET参数

    开门见山 1. 扫描靶机ip,发现PCS 192.168.31.37 2. 用nmap扫描开放端口信息 3. 快速扫描全部信息 4. 探测敏感信息 5. 用浏览器打开用户登录页面 6. 使用OWASP ...

  7. LUA学习笔记(第5-6章)

    x = a or b 如果a为真则x = a 如果a为假则x = b print(a .. b) 任何非nil类型都会被连接为字符串,输出 多重返回值 local s,e = string.find( ...

  8. Codeforces_797

    学了一学期还是那么菜. 好久没更新,还是得放点东西的. A.贪心最小的素因子,k = 1时,直接输出n就可以了. #include<bits/stdc++.h> using namespa ...

  9. BZOJ 4034 [HAOI2015]树上操作(欧拉序+线段树)

    题意: 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都增 ...

  10. Codeforces 1092 F Tree with Maximum Cost (换根 + dfs)

    题意: 给你一棵无根树,每个节点有个权值$a_i$,指定一个点u,定义$\displaystyle value = \sum^v a_i*dist(u,v)$,求value的最大值 n,ai<= ...