异常

异常是导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失,

所以在程序的设计中必须要考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序正常的执行。

异常类的继承结构

在整个java的异常结构中,实际上有以下两个最常用的类:Exception、Error,这两个类全都是Throwable的子类

Exception:一般表示的是程序中出现的问题,可以直接使用try...catch处理。

Error:一般指的是JVM错误,程序中无法处理。

自定义异常类

只需要继承Exception就可以完成自定义异常类。因为在java中提供的都是标准的异常类(包括一些异常信息等等)

如果需要定义自己想要的异常信息的时候就可以自定义异常类。

package com.itmyhome;  

import java.util.Scanner;  

class MyException extends Exception { // 自定义异常类  

    public MyException(String name) {
super(name); // 调用父类构造
}
} public class T3 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
System.out.print("请输入除数:");
int i = scan.nextInt();
System.out.print("请输入被除数:");
int j = scan.nextInt();
try {
if (j == 0) {
throw new MyException("被除数不能为0"); // 抛出自定义异常
} else {
System.out.println(i / j);
}
} catch (Exception e) {
e.printStackTrace();
} finally { }
}
}

几个常见的面试题:

1、try {}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,

在return前还是后?

会执行,在return之前。

下面看两个例子

public class T {  

    public static void main(String[] args) {
System.out.println(new T().test());
}
static int test() {
int x = 1;
try {
return x;
} finally {
++x;
}
}
}

输出结果返回1

public class T {  

    public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(test());
}
public static int test(){
try{
return 1;
}finally{
return 2;
}
}
}

输出结果返回2

try中的return语句调用的函数先于finally中调用的函数执行,也就是说return语句先执行,finally语句后执行,所以,返回结果为2.

return并不是让函数马上返回,而是return语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,要要执行

finally语句后才真正开始返回。

2、final,finally,finalize的区别

final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的

其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。

3、运行时异常与一般异常有何异同?

异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。

java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

4、error和exception有什么区别?

error表示恢复不是不可能但很困难的情况下的一种严重问题。比如内存溢出,不可能指望程序能出来这样的情况。

exception表示一种设计或实现问题。

也就是说,它表示如果程序运行正常,从不会发生的情况。

5、写出最常见的5个runtime exception

ClassCastException,IndexOutOfBoundsException,NullPointerException,ArithmeticException,IllegalArgumentException

6、Java中的异常处理机制的简单原理和应用

异常时指java程序运行时(非编译)所发生的非正常情况或错误,java使用面向对象的方式来处理异常,它把程序中发生的每个

异常也都分别封装到一个对象来表示的,该对象中包含有异常的信息。

java对异常进行了分类,不同类型的异常分别用不同的java类表示,所有异常的根类为java.lang.Throwable,Throwable下面又

派生了两个子类Error和Exception,Error表示应用程序本身无法克服和恢复的一种严重问题,例如,内存溢出和线程死锁等

系统问题。Exception表示程序还能够克服和恢复的问题,其中又分为系统异常和普通异常,系统异常是软件本身缺陷所导致

的问题,也就是软件开发人员考虑不周所导致的问题软件使用者无法克服和恢复这种问题,但在这种问题下还可以让软件系统

继续运行或者让软件死掉,例如数组越界(ArrayIndexOfOutOfBoundsException)空指针异常(NullPointerException)

类转换异常(ClassCastException)普通异常是运行环境的编号或异常所导致的问题,是用户能够克服的问题例如,网络断线,

磁盘空间不足,发生这样的异常后,程序不应该死掉。

java为系统异常和普通异常提供了不同的解决方案,编译器强制普通异常必须try...catch处理货用throws声明继续抛给上层调用方法处

理,所以普通异常也被称为checked异常,二系统异常可以处理也可以不处理,所以,编译器不强制用try...catch处理或用throws声

明,所以系统异常也被称为unchecked异常。


版权声明:本文采用BY-NC-SA协议进行授权,转载麦田技术博客的文章请注明出处

原文地址:http://itmyhome.com/2015/03/java-study-notes-exception

Java学习笔记16--异常的更多相关文章

  1. 1.13(java学习笔记)异常机制

    异常不同于错误,它是程序运行时产生的未知问题. 如果把程序比喻成一辆汽车,那么汽车开着开着突然前面出现了一个大石头挡住了路,这就叫异常. 那么出现了这个异常我们需要去处理,比如打电话给公路管理局,让它 ...

  2. 【原】Java学习笔记030 - 异常

    package cn.temptation; public class Sample01 { public static void main(String[] args) { /* * 异常:Java ...

  3. JAVA学习笔记16——控制线程

    Java的线程支持提供了一些便捷的工具方法,通过这些便捷的工具方法可以很好地控制线程执行.   join线程 Thread提供了让一个线程等待另一个线程完成的方法——join().当在某个线程执行流中 ...

  4. JAVA学习笔记16——线程生命周期

    当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New).就绪(Runnable).运行(Running).阻塞(Blocking)和 ...

  5. JAVA学习笔记16——线程的创建和启动

    Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.每个线程的作用是完成一定的任务,实际上就是执行一段程序流(一段顺序执行的代码).Java使用线程执行体来代表这段 ...

  6. Java 学习笔记(16)——Java数据库操作

    数据库操作是程序设计中十分重要的一个部分,Java内置JDBC来操作数据库 JDBC使用 JDBC--Java Database connecting Java数据库连接:本质上JDBC定义了操作数据 ...

  7. Java学习笔记__异常机制_try_catch_finally_return执行顺序

    package cn.xiaocangtian.Exception; import java.io.FileInputStream; import java.io.FileNotFoundExcept ...

  8. Java学习笔记16(面向对象九:补充内容)

    总是看到四种权限,这里做一个介绍: 最大权限是public,后面依次是protected,default,private private修饰的只在本类可以使用 public是最大权限,可以跨包使用,不 ...

  9. java学习笔记16(正则表达式)

    正则表达式: 定义:在pattern类中有简单规则定义,具有特殊含义的字符串: 作用:用于一些字符串,比如验证注册邮箱,密码,用户名等: 正则表达式的语法: 1)字符:'\'反斜杠   \t 代表制表 ...

  10. Java 学习笔记之 异常法停止线程

    异常法停止线程: public class RealInterruptThread extends Thread { @Override public void run() { try { for ( ...

随机推荐

  1. hbase shell基础和常用命令详解(转)

    HBase shell的基本用法 hbase提供了一个shell的终端给用户交互.使用命令hbase shell进入命令界面.通过执行 help可以看到命令的帮助信息. 以网上的一个学生成绩表的例子来 ...

  2. 【巩固】JS获取时间的一些基础知识

    就是一个new Date()对象,要注意的有以下几点; 直接给oDate对象设置年月日时分秒的时候要分成两步,oDate.setFullYear()接受三个参数分别是年月日,注意月份是从0开始计一月的 ...

  3. 网站整合Ucenter详细流程

    最近公司项目要用到SNS,在具体采取解决方案上面由于项目由一实力较强的外包公司做,所以没有采用商业解决方案.不过本人一直比较看好康盛的产 品,因为被外派到外包公司去负责项目,尽管以前用的SNS也在不少 ...

  4. 【Python与机器学习】:利用Keras进行多类分类

    多类分类问题本质上可以分解为多个二分类问题,而解决二分类问题的方法有很多.这里我们利用Keras机器学习框架中的ANN(artificial neural network)来解决多分类问题.这里我们采 ...

  5. sql语句,怎么查看一个表中的所有约束

    sql语句,怎么查看一个表中的所有约束,比如,一个student表,有唯一,外键,主键,用sql语句怎么查看student表中的所有约束呢? select * from sysobjects wher ...

  6. web.config

    参数上传和文件上传大小限制调整,参数上传最大2097151 <system.web> <httpRuntime requestValidationMode="2.0&quo ...

  7. [EventBus源码解析] 初探EventBus

    本期blog作为EventBus(以下简称EB)学习的始动篇,主要记载了EB的功能.优点.使用方法,内容基于github上的README.md与HOWTO.md. 何为EventBus EB实现了An ...

  8. FW: javascripts 要不要加引号

    Javascript编程风格  http://www.ruanyifeng.com/blog/2012/04/javascript_programming_style.html 作者: 阮一峰 日期: ...

  9. HTML 滚动标签<marquee>

    主要参数: behavior  移动方式 scroll        循环移动 slide         只移动一个回合 alternate   来回移动 direction 移动方向 left r ...

  10. IMX6输出可控PWM

    驱动部分 #include <linux/init.h> #include <linux/module.h> #include <linux/moduleparam.h& ...