C语言时用if...else...来控制异常,Java语言所有的异常都可以用一个类来表示,不同类型的异常对应不同的子类异常,每个异常都对应一个异常类的对象。

Java异常处理通过5个关键字try、catch、finally、throw、throws进行管理。基本过程是用try包住要监视的语句,如果在try内出现异常,则异常会被抛出,catch中捕获抛出的异常并做处理,finally一定会完成未尽事宜。

练习:

package com.swift;

public class Exception1
{
public static void main(String args[]){
System.out.println("=========计算开始=========");
try{
int i=Integer.parseInt(args[0]);
int j=Integer.parseInt(args[1]);
int temp=i/j;
System.out.println("计算结果:"+ temp);
}catch(ArithmeticException e){
System.out.println("出现了数学异常 "+ e);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("出现了数组异常 "+ e);
}catch(NumberFormatException e){
System.out.println("出现了格式异常 "+ e);
}catch(Exception e){
System.out.println("其他异常 "+e);
}finally{
System.out.println("不管是否有异常,我都执行。");
}
System.out.println("=========计算结束=========");
}
}

throws标识此方法出异常但不处理,谁调谁处理。

package com.swift;

public class Exception3
{
public static void main(String args[]) throws Exception{
Operate o=new Operate();
System.out.println("=============计算之前=============="); int temp=o.div(Integer.parseInt(args[0]),Integer.parseInt(args[1]));
System.out.println("计算结果"+temp);
System.out.println("=============计算之后==========");
}
}
class Operate
{
public int div(int i,int j) throws Exception{
int temp=i/j;
return temp;
}
}

如果main也throws了,异常抛给了JVM,其实你一个throws不写,JVM依然会默默地处理着异常

注意:一旦方法throws,main必须有回应,否则编译不过。main继续抛相当于出异常之后的程序戛然而止(没有"=============计算之后=========="),这时可用catch捕获抛来的异常进行处理。

package com.swift;

public class Exception3
{
public static void main(String args[]) throws Exception{
Operate o=new Operate();
System.out.println("=============计算之前==============");
try {
int temp=o.div(Integer.parseInt(args[0]),Integer.parseInt(args[1]));
System.out.println("计算结果"+temp);
}catch(Exception e){
System.out.println("出现了什么异常情况 "+e);
}
System.out.println("=============计算之后==========");
}
}
class Operate
{
public int div(int i,int j) throws Exception{
int temp=i/j;
return temp;
}
}

异常被处理,计算前后正常输出。

throw与throws不同,throw抛出的不是异常类,而是对象,可以人造的对象。

package com.swift;

public class Exception4 {
public static void main(String args[]) {
try {
throw new Exception("抛着玩呢 "); // 抛出人造异常对象
} catch (Exception e) { // 再捕捉这个对象
System.out.println("你抛的是什么呢?"+e);
}
} }

如果不想抛Exception类的对像,要抛自己的

package com.swift;

public class Exception5 {
public static void main(String args[]) {
try {
throw new MyException("自定义异常。");
} catch (Exception e) {
System.out.println("这个异常是 " + e); // e.printStackTrace();
}
}
}
//通过继承实现自己的异常类
class MyException extends Exception {
public MyException(String msg) {
//把参数传给父类
super(msg);
}
}

Java异常 Exception类及其子类的更多相关文章

  1. Java异常(Exception)

    Java异常:运行期出现的错误 1. Java异常是Java提供的用于处理程序中错误的一种机制: 2. 错误指的是程序运行期间发生的异常事件,如除零溢出.数组下标越界.读取的文件不存在.... 3. ...

  2. 浅谈java异常[Exception]

    学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 一. 异常的定义 在<java编程思想 ...

  3. java异常Exception

    学习笔记: 一.程序的异常:Throwable 严重问题:Error ,我们不处理.这种问题一般很严重,不如内存溢出 问题:Exception 编译问题:不是RuntimeException异常.必须 ...

  4. Java异常 - Exception总结

    这篇blog总结的比较详细了. 如下图所示,在Java中所有异常的基类均为Throwable类.有两个子类,分别为Exception和Error.其中Error主要由JVM处理,比如OutOfMemo ...

  5. java中Collection类及其子类

    1:对象数组(掌握) (1)数组既可以存储基本数据类型,也可以存储引用类型.它存储引用类型的时候的数组就叫对象数组. 2:集合(Collection)(掌握) (1)集合的由来? 我们学习的是Java ...

  6. java异常——Exception、RuntimException

    一.Exception和RuntimeException的区别 Exception是RuntimeException的父类,使用了 Exception 的类都必须对异常进行处理(try / throw ...

  7. Java 异常Exception e中e的getMessage()和toString()以及 e.printStackTrace();方法的区别

    Exception e中e的getMessage()和toString()方法的区别: 示例代码1: public class TestInfo {     private static String ...

  8. Java 异常Exception e中e的getMessage()和toString()方法的区别

    示例代码1: public class TestInfo { private static String str =null; public static void main(String[] arg ...

  9. 基本的数据类型分析----java.lang.Number类及其子类分析

    本文转自http://blog.csdn.net/springcsc1982/article/details/8788345 感谢作者 编写了一个测试程序,如下: int a = 1000, b= 1 ...

随机推荐

  1. 解决MySql报错:1130 - Host 'xxx' is not allowed to connect to this MySQL server的方法

    发现问题 使用Navicat连接MySql数据库时,未能成功,提示信息如下图: 这个错误提示已经很明确了,"不允许主机'desktop-teat9ob'连接到此mysql服务器", ...

  2. Spring Cloud:使用Ribbon实现负载均衡详解(下)

    在上一篇文章(Spring Cloud:使用Ribbon实现负载均衡详解(上))中,我对 Ribbon 做了一个介绍,Ribbon 可以实现直接通过服务名称对服务进行访问.这一篇文章我详细分析一下如何 ...

  3. IT兄弟连 JavaWeb教程 El基本语法

    EL(Expression Language)表达式语言是在JSP 2.0版本中引入的新特性,它用于JSP文件中的数据访问.这种表达式语言能简化JSP文件中数据访问的代码,可用来替代传统的基于&quo ...

  4. linux命令行挂载NTFS文件系统的移动硬盘

    环境 ubuntu 12.04 桌面版 由于我的ubuntu 是安装在vmware 上,如果接入移动硬盘后,它没有办法自动识别ntfs 格式的文件系统,导致mount 盘失败 从网上找到一个方法 首先 ...

  5. Android NFC P2P

    http://www.nfc.cc/2011/12/28/development-android-beam-and-nfc-peer-2-peer/

  6. Qt 进程和线程之三:线程同步、可重入与线程安全

    一.同步线程方法 使用线程的目的是允许代码并行运行,但是有时线程必须停止并等待其他线程.例如,如果两个线程试图同时写入相同的变量,结果是不确定的,所以需要同步线程.同步线程是一种保护共享资源等数据的常 ...

  7. Python type class metaclass

    'type' 是 python built-in metaclass 其他继承自 ‘type’的class都可以是 Metaclass 子类可以继承父类的metaclass 然而 __metaclas ...

  8. F. Bakkar In The Army 二分

    http://codeforces.com/gym/100283/problem/F 思路是二分第几行,二分出来的行是总和 >= n的,那么第k - 1行一定要选,那么再在第k行中二分那一列. ...

  9. TDH-search常用命令

    一.指令部分:1.search管理界面地址: http://172.20.230.110:9200/_plugin/head/ 2.集群状态查看命令: curl -XGET 'localhost:92 ...

  10. 洛谷 P1474 货币系统 Money Systems

    P1474 货币系统 Money Systems !! 不是noip2018的那道题. 简单的多重背包的变式. #include <iostream> #include <cstdi ...