Java中的异常处理与抛出
一、异常处理
程序运行过程中出现的,导致程序无法继续运行的错误叫做异常。
Java中有多种异常,所有异常的父类是Throwable,他主要有两个子类Error和Exception。

Error一般是JVM出现问题,不用处理,也无法处理。
Exception下有多个子类,但主要分为两种。一种是RuntimeException,这种异常可以处理也可以不处理
另一种是非RuntimeException,这种异常必须处理。
常见的RuntimeException:
1、NullPointerException (空指针异常)
2、IndexOutOfBoundsException (数组下标越界异常)
3、NumberFormatException (数据格式异常)
4、ClassCastException (类型转换异常)
5、IllegalArgumentException (非法参数异常)
6、ArithmeticException (算数异常)
7、IllegalStateException (非法语句异常)
这里列举两个例子:
NullPointerException 示例:
package None6;
public class Test {
    int a;
    public int show() {
        return 0;
    }
}
package None6;
public class TestIt {
    //仅声明test,并未创建对象
    Test test;
    test.show();
}
这里test仅声明并未实际指向某个对象,空指针无法调用不属于他的方法,所以在后一条代码实际调用show()方法时会报空指针异常。
IndexOutOfBoundsException 示例:
package None6;
public class TestIt {
    public static void main(String[] args) {
        int[] a = new int[3];
        a[0] = 0;
        a[1] = 1;
        a[2] = 2;
        a[3] = 3;
    }
}

这里ArrayIndexOutOfBoundsException异常是IndexOutOfBoundsException异常的子类。
需要处理的异常可用try catch来处理:
package None7;
public class math {
    public static int add(String a,String b) {
        int sum = Integer.parseInt(a);
        sum+=Integer.parseInt(b);
        return sum;
    }
}
package None7;
public class testit {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.err.println(math.add("100", "100"));
    }
}
例如本示例中,当add()方法中的参数为数字时不会出现异常,但当参数中出现字母之类的字符时可能会抛出异常

处理办法;
package None7;
public class math {
    public static int add(String a,String b) {
        try {
            int sum = Integer.parseInt(a);
            sum+=Integer.parseInt(b);
            return sum;
        } catch (Exception e) {
            // TODO: handle exception
            //打印出错信息
            System.err.println(e.getMessage());
        }
        finally{
            System.err.println("结束!");
        }
        return 0;
    }
}
package None7;
public class testit {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.err.println(math.add("100a", "100"));
    }
}
结果为:

二、抛出异常
上面讲了,非RuntimeException异常必须处理,而我们当时如果不知道怎处理或者暂时不想处理时可用throw向上一级一级抛出,最终会抛给虚拟机处理。
示例:


结果:

这个例子中动态加载类123时,因为123类不存在所以会报错,然后将用throw将这个错误抛出。
这个错误首先抛出给主函数入口,然后再抛出给虚拟机。
如有错误,希望大家能指正,感谢!
努力努力再努力!
Java中的异常处理与抛出的更多相关文章
- Java中实现异常处理的基础知识
		Java中实现异常处理的基础知识 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. ... 
- java 中的异常处理
		一. 异常的概念和Java异常体系结构 异常是程序运行过程中出现的错误.本文主要讲授的是Java语言的异常处理.Java语言的异常处理框架, 是Java语言健壮性的一个重要体现. Java把 ... 
- 捕获Java线程池执行任务抛出的异常
		捕获Java线程池执行任务抛出的异常Java中线程执行的任务接口java.lang.Runnable 要求不抛出Checked异常, public interface Runnable { publi ... 
- java中的异常处理机制
		java异常处理机制 1)在java语言中,通常将可能出现异常的语句放入try{}语句中,将出现错误后需要执行的语句放入到catch{}语句中,将无论是否发生异常都要执行的语句放在finally{}语 ... 
- 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架
		前言 大家好,给大家带来详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架的概述,希望你们喜欢 JAVA 异常 try...catch...finally结构的使用方法 class Tes ... 
- Java中的异常处理:何时抛出异常,何时捕获异常,何时处理异常?
		Java中的异常处理:何时抛出异常,何时捕获异常? 2017-06-07 1 异常分类 Throwable对象可以分为两组: 一组是unchecked异常,异常处理机制往往不用于这组异常,包括: Er ... 
- 深入了解 Java 中的异常处理 + 面试题
		# 深入了解 Java 中的异常处理 + 面试题 在程序开发中,异常处理也是我们经常使用到的模块,只是平常很少去深究异常模块的一些知识点.比如,try-catch 处理要遵循的原则是什么,finall ... 
- Java中的异常处理机制《》
		异常机制已经成为判断一门编程语言是否成熟的标准,异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性. Java异常机制主要依赖于try.catch.finall ... 
- Java中的异常处理:何时抛出异常,何时捕获异常?
		今天在看hadoop源码时,想想自己最近在做的那个系统,发现很多异常处理的方式不对,还是按照传统的异常处理方式(即:采用返回值来标识程序出现的异常情况).而hadoop中很多方法的声明是有异常抛出的, ... 
随机推荐
- 从头推导与实现 BP 网络
			从头推导与实现 BP 网络 回归模型 目标 学习 \(y = 2x\) 模型 单隐层.单节点的 BP 神经网络 策略 Mean Square Error 均方误差 \[ MSE = \frac{1}{ ... 
- Exp6 信息搜集与漏洞扫描  20164303
			一.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 二.实践内容. (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测. ... 
- java为什么要重写hashCode和equals方法?
			如果不被重写(原生)的hashCode和equals是什么样的? 不被重写(原生)的hashCode值是根据内存地址换算出来的一个值. 不被重写(原生)的equals方法是严格判断一个对象是否相等的方 ... 
- mac电脑php+mysql+nginx+phpmyadmin环境搭建
			英文原文:http://blog.frd.mn/install-nginx-php-fpm-mysql-and-phpmyadmin-on-os-x-mavericks-using-homebrew/ ... 
- formdata 上传图片+进度条
			记得引入jquery //上传进度回调函数: function progressHandlingFunction(e) { if (e.lengthComput ... 
- InstallShield Limited Edition for Visual Studio 使用
			首先到https://info.flexerasoftware.com/IS-EVAL-InstallShield-Limited-Edition-Visual-Studio填写信息: 完成之后跳转到 ... 
- 数据类型(data type)
			基本数据类型(primitive data type):字符型(2个字节),布尔型(一位),byte(1个字节),short(两个字节),int(4个字节),long(8个字节),float(2个字节 ... 
- OO第四次博客作业!
			oo第四次博客作业 一.测试与正确性论证比较 测试只是单方面片面的证明对于当前的输入程序是正确的,测试只能证明程序有错误,不能说明程序是对的. 正确性论证是程序达到预期目的的一般性陈述,是通过规范化的 ... 
- [Linux]安装node.js
			node.js安装 安装node.js的版本控制工具nvm curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/ins ... 
- MySQL  存储过程参数
			MySQL 存储过程参数 MySQL存储过程参数简介 在现实应用中,开发的存储过程几乎都需要参数.这些参数使存储过程更加灵活和有用. 在MySQL中,参数有三种模式:IN,OUT或INOUT. IN ... 
