一.异常概述

1 异常的概述

开发程序,在运行时,就不可能避免会出错,此时jvm会将这个出错问题反馈给你

假定jvm使用一些特殊数字来反馈异常,这种措施存在很多问题

-1 = 空引用异常

2- = 下标越界异常

-3 hhhhhhh

-4

public int send(){

return -5;

}

public String send(){

return "网络中断";

}

不足:

1 方法本身要返回处理的结果,这样不没办法区别返回的值是代表出错还是处理的正常结果

2 反馈的信息不够

java语言采用另一种机制来反馈出错的问题,这就是异常机制.

异常机制,是将程序运行过程中遇到的所有问题都封装成一个异常对象,每个对象都属于某种异常类型,知道异常类型你就知道程序出了什么。

二.异常的分类

异常的分类

1) Error:错误,是非常严重的问题,没办法处理,不要试图去解决这些问题,例如内存溢出

2)Exception: 已检查异常,程序已经经过检查,但是由于外界因素导致仍然不可避免的问题,要求开发者必须未雨绸缪的处理这些异常

3) RuntimeException:未检查异常,是由于程序员没有细致检查程序导致的异常,这种异常编译器把所有责任推给程序员,即编译器不会帮你检查,也不要求你必须处理

三.try与catch

try -- 试着去做

catch -- 捕获

import java.io.*;import javax.swing.*;/**演示异常的定义*/

public classTestTryCatch{public static voidmain(String[] args){try{

FileReader f= new FileReader("C:\\a.txt");//去读取一个不存在的文件的内容

int i = 10;

System.out.println(i);

}catch(Exception e){//出了问题处理代码

e.printStackTrace();//打印方法栈中执行方法的整个过程的踪迹//System.out.println("没有该文件");

JOptionPane.showMessageDialog(null,"没有该文件");

}

}

}

四.finally

最终执行的,不管程序有没有错,最终都执行的代码

finlly{}里面的代码最终得到执行,经常在里面做一些释放资源的操作,例如文件流的关闭,数据库连接的关闭

最好不要在finally进行返回值

try{

turnOn();

cooking();//异常对象被抛出

System.out.println("上菜,开饭了");

}catch(Exception e){

e.printStackTrace();

JOptionPane.showMessageDialog(null,"吃泡面");

}finally{

turnOff();//不管有没有异常,最终都会执行这个代码

}

五.多异常处理

在try内部执行的语句可能会抛出多个异常,这些我们可以用多个catch并排一起处理

1) 分开处理的方式适用于,2句代码无关

try{

Class.forName("Person");//手动加载一个类

}catch(ClassNotFoundException e){

e.printStackTrace();

}try{

FileReader fr= new FileReader("C:\\a.txt");

}catch(FileNotFoundException e){

e.printStackTrace();

}2)有关联的多异常处理try{

FileReader fr= new FileReader("C:\\a.txt");char c = (char)(fr.read());

}catch(FileNotFoundException e){

e.printStackTrace();

}catch(IOException e){

e.printStackTrace();

}

六.异常多态

1 多个catch,每个catch的异常如果有父子类关系,则可以只捕获父类异常就可以

2 不要试图把所有子类异常提升为父类异常去处理,例如提升为Exception,这样子就没办法具体问题具体处理,以下是一个不好的示例

try{

Class.forName("Person");

FileReader fr= new FileReader("C:\\a.txt");char c = (char)(fr.read());

}catch(Exception e){

e.printStackTrace();//处理类找不到的异常//处理文件找不到的异常//异常读写时IO异常

}

3 子类异常不能放在父类异常后面,以下代码不能编译通过

try{

Class.forName("Person");

FileReader fr= new FileReader("C:\\a.txt");char c = (char)(fr.read());

}catch(ClassNotFoundException e){

e.printStackTrace();

}catch(IOException e){

e.printStackTrace();

}catch(FileNotFoundException e){

e.printStackTrace();

}

七.throws与throw

当前程序如果没有能力或职责处理异常,就不进行try..catch,而是往上抛给调用者

throws - 用来声明一个方法有可能有风险(异常),会将风险抛给调用者,调用者需要对这个异常负责

throw - 用来真正的抛出异常对象,真正的动词,一般和throws合在一起使用

八.重写时异常抛出的特点

1 子类重写父类的方法,可以不抛异常,或者抛出同样的异常

2 子类重写父类的方法,不能抛出比父类方法更宽泛的异常

3 子类重写父类的方法,不能抛出比父类方法更多的不相关的异常

九.自定义异常

在做项目的过程中,要实现很业务功能,实现这些功能的时候,可能有一些问题,例如用户名不正确,这种问题需要提示系统使用者,此时我们可以封装一个自己的自定义的异常,然后抛出去

class MyException extendsException{publicMyException(String message){super(message);

}

}

十.异常的使用建议

1)不要过分的细化处理

2)利用异常的层次结构处理(多态)

3)不要压制异常(不要空处理)

4) 报告不正常情况时,抛异常比返回数值或返回null好

5) 不要怕抛出异常(不能处理的就抛出,尽量让最外围调用者来处理通知用户出错)

java运行时异常的特点是什么_java异常详解相关推荐

  1. JAVA运行时异常及检查式异常

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  2. java运行时异常与一般异常有何异同_JVM | 虚拟机运行时数据区域划分和使用详解...

    引言   我们经常会被问到一个问题是Java和C++有何区别?我们除了能回答一个是面向对象.一个是面向过程编程以外,我们还会从底层内存管理和垃圾收集方面作出比较.   对于C++而言,程序员既要做程序 ...

  3. JAVA运行时异常及常见的5中RuntimeExecption

    JAVA运行时异常及常见的5中RuntimeExecption 参考文章: (1)JAVA运行时异常及常见的5中RuntimeExecption (2)https://www.cnblogs.com/ ...

  4. java 运行时异常 处理_如何在Java中处理运行时异常?

    运行时异常是Java编程语言所有异常的父类,这些异常在发生时会崩溃或崩溃,可能会破坏程序或应用程序.与不被视为运行时异常的异常不同,永远不会检查运行时异常. "运行时异常"通常显示 ...

  5. 什么是引发?Java运行时系统引发的异常如何处理?

    到目前为止,你只是获取了被Java运行时系统引发的异常.然而,程序可以用throw语句引发明确的异常.Throw语句的通常形式如下: throw ThrowableInstance; 这里,Throw ...

  6. java运行时异常能捕获吗_Java运行时异常

    关于Java&Android面试题中时常提到的Java常见的运行时异常. Java运行时异常可能是Java虚拟机正常工作时抛出的异常. Java提出两种异常机制.检查时异常(Checked E ...

  7. 深入理解java虚拟机一 JAVA运行时内存区域与class文件

    一 JAVA运行时内存区域 JVM在加载class文件时,会将class文件定义的数据结构转为运行时内存中的数据,那么jvm是如何安排运行时的内存区域呢? jvm将运行时内存划分为以下几个部分: 堆: ...

  8. Java运行时数据区及对象的分配

    一.Java运行时数据区 简图: 简述: 堆.方法区是线程共享的,虚拟机栈.程序计数器.本地方法栈是线程私有的,一个线程一份. 虚拟机栈的基本单位是栈帧,一个方法的开始执行意味着一个栈帧进栈,一个方法 ...

  9. oracle java rmi 漏洞,Oracle Java SE Java运行时环境RMI子组件远程漏洞(CVE-2011-3556)

    发布日期:2011-10-20 更新日期:2011-10-20 受影响系统: Oracle Sun JRE 1.6.x Oracle Sun JDK 1.6.x 不受影响系统: Oracle Sun ...

  10. Adobe flash cs5 的Java运行时环境初始化错误 完美解决方法

    Adobe flash cs5 的Java运行时环境初始化错误 完美解决方法 下载网络上的Adobe flash cs5 精简版(绿色版),Java运行时环境初始化时出现错误,你可能需要重装Flash ...

最新文章

  1. 2.RabbitMq-持久化
  2. Sqlserver2005 with as 实现分页以提高性能
  3. hibernate注解之@Onetomany、@Manytoone、@JoinColumn
  4. java怎么添加地图_javaweb怎样添加百度地图
  5. rtti获取类的字段和属性和方法
  6. 把iconfront的资源放cdn访问_详解mpvue小程序中怎么引入iconfont字体图标
  7. CSS3-多列布局-伸缩盒布局-伸缩项目
  8. C#中的函数式编程:递归与纯函数(二) 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面...
  9. 浅析单调递增子序列问题(LIS)
  10. PQ 8.05中文版硬盘物理分区与删除分区(图文详解)
  11. 【论文解读--MPC控制】Dynamic Locomotion in the MIT Cheetah 3 Through Convex Model-Predictive Control
  12. 党务管理系统搭建,答题获积分,学习有好礼
  13. 2022.11.27一周总结
  14. 第三章 LD3320语音识别模块的使用
  15. git rebase 简介
  16. 2022年值得关注的5个区块链项目 数字藏品平台开发搭建
  17. 计算机旁边禁止放水英语怎么说,用方法学:“打假球”“放水”英语怎么说?...
  18. 什么是原生IP和广播IP,网站建设是共享IP还是独立IP好?
  19. 利用MaxCompute部署股票交易策略
  20. 无领导小组讨论案例及其分析2

热门文章

  1. [转] 接触C# 反射 2
  2. 使用ViwePager显示图片时如何防止内存泄露。
  3. Struts2,在Action中使用session
  4. Oracle教程之管理索引(一)--Oracle管理索引
  5. 微服务(接口)设计原则
  6. Java中 break continue return 的用法以及区别
  7. 虚拟机安装Centos 7网上教程整合
  8. 【impala学习之一】impala
  9. php 安装mysql扩展注意事项
  10. Javascript中最常用的经典技巧