Java开发知识之Java的异常处理

一丶异常概述

  在讲解异常之前,我们要搞清楚.什么是异常. 通俗理解就是我们编写的程序出问题了.进行处理的一种手段.

比如我们的QQ.有的时候就崩溃了.比如出现xxx错误.让你上报错误信息什么的. 意思就是 QQ的代码不能运行了.

但是,直接崩溃又不好看.对用户不好. 所以就用异常处理接受. 我弹出一个错误框.告诉你已经错误了.代码不能运行了.让你上传或者重新启动. 异常做的事情就是这样.只能这样做最后的一点事情.但是了解一下还是必须的.

  1.异常说明

  异常主要作用: 代码超出了程序员可控范围. 如用户的数据出错.导致程序出错. 或者打开文件的时候.也会出错.在程序中可能出现的这种错误.我们都称之为异常.在C++ 中一样有异常处理. 如果是底层.那么会更复杂.在汇编的角度来说.

  2.Java中的异常.

在程序编程中. 我们不能 除0. 除0就会有异常,在C++中内存访问异常就是C0005; 我们可以编写代码,告诉大家什么是异常.

public class JavaMain {

    public static void main(String[] args) {

        int Number = 10;
int NumberCount = 10 / 0; } }

运行结果

这一串英文可以翻译为:

  异常 在线程 main中. java.lang.ArithemeticExeception 接受的 / 除 0 错误. 在 man函数的第16行位置.

可以准确的输出.这个就是异常.异常一旦处理.代表了其程序已经不能执行了.不过你可以接受异常对其进行处理.比如我输出一段话.

二丶异常的捕获与处理

  1.异常处理 try catch

  我们上边说过. 当异常产生的时候.我们可以进行处理.

语法:

  try{
会出现的异常代码.
  }
  catch(Exception e){
异常出现后我们进行捕获. 进行你自己的操作.比如输出一段话.
  }
catch(Exception a){
.....
}

代码如下:

  

public static void main(String[] args) {
try {
int Number = 10;
int NumberCount = 10 / 0;
}
catch(Exception e) {
String Error = e.getMessage();
e.printStackTrace();
} }

我们捕获了异常. 任何异常都可以使用 Exception这个对象的引用来接受. 这个类就相当于异常的全局父类. 任何异常处理类都继承它.所以可以用它接受一下.并且调用方法.输出错误.

输出结果:

  

注意: 如果我们使用的try语句中.有代码出现了异常.那么会去寻找对应的Catch语句进行处理.但是如果我们catch语句不输出结果.或者不加代码.那么可能程序就与你的预期不对.因为以前不使用的时候.出了异常我们知道哪里错误了.

但是现在你自己处理catch不输出错误.这样就会造成一种假象就是我的程序没有出错.但是为什么运行结果不对. 因为已经除了异常了.但是你没有进行处理而已.

  2.异常处理语句 try catch finally

在C++中,标准的异常处理就是try catch .java中也可以这样做.

但是此时可能遇到一个问题.如果我们已经知道出现异常了.但是想要释放资源怎么办.所以使用另一种 java的处理语句

语法;

  

try{
}
catch(Exception e){
}
finally{
}

finally的作用就是,不过try catch语句怎么执行.最终都会执行finally语句的.

执行流程:

  try捕获异常. 交给 catch处理. catch处理完了. 指向finally语句.

三丶Java中的常见处理类.

  

例如上面的我们 除0异常.就是算数异常.我们可以使用此类进行接收.

四丶自定义异常与异常抛出

   用户可以自定义异常.并且出现了异常.可以抛出这个异常.

  1.继承父类 Exception 类.

  2.使用throw语句. 方法上使用throws语句.

1.继承父类.

  

public class MyException extends Exception {

    public MyException() {
// TODO 自动生成的构造函数存根
} public MyException(String message) {
super(message);
// TODO 自动生成的构造函数存根
} public MyException(Throwable cause) {
super(cause);
// TODO 自动生成的构造函数存根
} public MyException(String message, Throwable cause) {
super(message, cause);
// TODO 自动生成的构造函数存根
} public MyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
// TODO 自动生成的构造函数存根
} }

我们可以只实现一个构造. 不过我使用的Exception进行继承的.它会自动重写父类的信息.

此时我们就有了一个异常类. 叫做MyException类.

2.创建方法.抛出自定义异常.

  我们创建一个类.这个类中创建一个方法.方法里面是处0错误.我们自定义处理.

public class MyTest {

    public MyTest() {
// TODO 自动生成的构造函数存根
}
public static void ExceptionRun()throws MyException{
try {
int a = 10;
int b = 11;
if ((a + b) >= 21) {
throw new MyException("数字大了");
} }
catch (MyException a) {
System.out.println(a.toString());
}
} }

1.我们方法中写了程序. 如果 数字 > 21.我们就抛出异常.如果我们有catch语句接受.则进行输出了. catch语句的类就是我们的异常类. 也可以是它的父类.

2.方法上加了 throws.意思就是说. 如果这个方法出了异常.且catch语句中并没有捕获到.那么就会上层进行异常捕获.也就是说上层需要加上try catch 来使用这个方法.

如果上层不使用. 那么上层函数继续使用throws进行抛出. 如果都没有处理.则Java自动进行处理.直到程序出错.

如下:

我们的上层函数调用位置.并没有使用try catch进行捕获.继续抛出了.

throw: 这个主要用于抛出异常对象.一旦程序遇到throw则代码不会继续执行了.

throws: 用在方法中. 主要是当前方法没有捕获异常.就会抛出.让上一层进行接收.

五丶异常跟错误的区别.

  Java中有运行时异常. 我们上面所说的Exception 是所有异常的"父类" 针对的是异常.其实它也是一个子类. 而它的父类派生出了错误类 Error 跟 异常类 (Exception)而已.

流程图:

异常跟错误:

  异常指的就是程序出问题了.不过还可以补救.错误就是你代码都写错了.程序都不能运行. 或者这类错误很严重.会直接消耗进系统资源.造成无法挽回的损失.

六丶总结

  1.异常的所有父类 Exception接受.

  2.异常语法 : try catch(异常类. 引用)  try catch(异常类,异常引用) finally

  3.自定义异常继承 Exception即可. 使用throw抛出.

  4.throw语句抛出异常引用对象.catch中接受我们的异常. throws用于方法.代表当前方法并没有捕获到异常.传递给上一层进行处理.上一层调用trycatch如果不调用继续throws. thrwos可以抛出多个异常.

  5.异常跟错误.  

    1.异常 exception 非严重性的.

    2.错误:: error  严重性的.

Java开发知识之Java的异常处理的更多相关文章

  1. Java开发知识之Java中的Map结构

    Java开发知识之Java中的Map结构 一丶Map接口 Map没有实现Collection接口,提供的是Key 到Value的映射. Map中.不能包含相同的Key,每个Key只能映射一个Value ...

  2. Java开发知识之Java中的集合Set接口以及子类应用

    ---恢复内容开始--- Java开发知识之Java中的集合Set接口以及子类应用 一丶Set接口以及作用 在上一讲.我们熟悉了接口的实现图.以及自己各有的子类. List接口主要存储的数据是可以重复 ...

  3. Java开发知识之Java中的集合上List接口以及子类讲解.

    Java开发知识之Java中的集合类 一丶什么是集合类 如果你学习说数据结构,那么学习集合就很简单. 因为集合就是存储数据的结构. 例如 有链表结构 (list ) 还有 map结构.等等. 集合类就 ...

  4. Java开发知识之Java中的泛型

    Java开发知识之Java中的泛型 一丶简介什么是泛型. 泛型就是指泛指任何数据类型. 就是把数据类型用泛型替代了. 这样是可以的. 二丶Java中的泛型 Java中,所有类的父类都是Object类. ...

  5. Java开发知识之Java的枚举

    Java开发知识之Java的枚举 一丶什么是枚举 枚举可以理解为就是常量,在Java中我们定义常量.都是用 final语句. C++中都是用const关键字. 枚举跟C++概念都是一样的.就是特定的常 ...

  6. Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字

    Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...

  7. Java开发知识之Java的继承多态跟接口*

    Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...

  8. Java开发知识之Java的数字处理类Math类

    Java开发知识之Java的数字处理类Math类 一丶Java.text.DecimalFormat类与NumberFormat类 首先 Java.text.DecimalFormat指的是Decim ...

  9. Java开发知识之Java的包装类

    Java开发知识之Java的包装类 一丶什么是包装类 包装类的意思就是对基本数据类型封装成一个类.这些类都是Number的子类.区别就是封装数据类型不同.包含的方法基本相同. 具体可以查询JAVA A ...

随机推荐

  1. LOJ 6019

    挺没意思的题 全都读进去算一个每个阶乘的系数 然后算一遍每个数的系数 最后在质数处算一下答案 #include<bits/stdc++.h> using namespace std; #d ...

  2. 制作docker-jdk7-zookeeper镜像(非集群版)

    ## 准备工作 用到的工具, Xshell5, Xftp5, jdk-7u79-linux-x64.tar.gz, zookeeper-3.4.9.tar.gz, docker.io/centos:l ...

  3. 洛谷p3799:妖梦切木棒

    题意:任选四段木板拼正三角形 因为是正三角形 所以我们可以想到至少是两个相同的,剩下两个拼成最后一条边 我们只需要枚举边长即可 那么我们对每次读入的x,使他的cnt++ 考虑用一个二重循环 外层枚举边 ...

  4. 13-事务&数据库连接池&DBUtiles

    事务&数据库连接池&DBUtils 事务 Transaction  其实指的一组操作,里面包含许多个单一的逻辑.只要有一个逻辑没有执行成功,那么都算失败. 所有的数据都回归到最初的状态 ...

  5. Linux系统下,在文件中查找某个字符串

    在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车. Vim会跳转到第一个匹配.按下n查找下一个,按下N查找上一个. Vim查找支持正则表达式,例如/vim$匹配行尾的" ...

  6. SVM支持向量机 详解(含公式推导)

    关于SVM的内容,这三位老哥写的都挺好的,内容是互补的,结合他们三位的一起看,就可以依次推导出SVM得公式了. https://www.cnblogs.com/steven-yang/p/565836 ...

  7. Centos7 编译安装 Nginx PHP Mariadb Memcached 扩展 ZendOpcache扩展 (实测 笔记 Centos 7.3 + Openssl 1.1.0e + Mariadb 10.1.22 + Nginx 1.12.0 + PHP 7.1.4 + Laravel 5.4 )

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7-x86_64-Minimal-1611.iso 安装步骤: 1.准备 1.0 查看硬 ...

  8. JavaScript 功能类 Url.js

    简书原文 这个类的主要目的是为了方便平时编码中的Url类型的数据操作 Github 全局名称 全局名称是由源码的最后一行代码确定的,默认为Url,如存在相同名称的对象会抛出异常: 可以通过 requi ...

  9. numpy.random 常用函数详解之简单随机数篇(Simple random data)

    1.numpy.random.rand(d0,d1,d2,...,dn) 参数:d0,d1,d2,...,dn 须是正整数,用来描述生成随机数组的维度.如(3,2)代表生成3行2列的随机数组. 返回值 ...

  10. [Swift]LeetCode63. 不同路径 II | Unique Paths II

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...