Java学习笔记16--异常
异常
异常是导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失,
所以在程序的设计中必须要考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序正常的执行。
异常类的继承结构
在整个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异常。
Java学习笔记16--异常的更多相关文章
- 1.13(java学习笔记)异常机制
异常不同于错误,它是程序运行时产生的未知问题. 如果把程序比喻成一辆汽车,那么汽车开着开着突然前面出现了一个大石头挡住了路,这就叫异常. 那么出现了这个异常我们需要去处理,比如打电话给公路管理局,让它 ...
- 【原】Java学习笔记030 - 异常
package cn.temptation; public class Sample01 { public static void main(String[] args) { /* * 异常:Java ...
- JAVA学习笔记16——控制线程
Java的线程支持提供了一些便捷的工具方法,通过这些便捷的工具方法可以很好地控制线程执行. join线程 Thread提供了让一个线程等待另一个线程完成的方法——join().当在某个线程执行流中 ...
- JAVA学习笔记16——线程生命周期
当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New).就绪(Runnable).运行(Running).阻塞(Blocking)和 ...
- JAVA学习笔记16——线程的创建和启动
Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.每个线程的作用是完成一定的任务,实际上就是执行一段程序流(一段顺序执行的代码).Java使用线程执行体来代表这段 ...
- Java 学习笔记(16)——Java数据库操作
数据库操作是程序设计中十分重要的一个部分,Java内置JDBC来操作数据库 JDBC使用 JDBC--Java Database connecting Java数据库连接:本质上JDBC定义了操作数据 ...
- Java学习笔记__异常机制_try_catch_finally_return执行顺序
package cn.xiaocangtian.Exception; import java.io.FileInputStream; import java.io.FileNotFoundExcept ...
- Java学习笔记16(面向对象九:补充内容)
总是看到四种权限,这里做一个介绍: 最大权限是public,后面依次是protected,default,private private修饰的只在本类可以使用 public是最大权限,可以跨包使用,不 ...
- java学习笔记16(正则表达式)
正则表达式: 定义:在pattern类中有简单规则定义,具有特殊含义的字符串: 作用:用于一些字符串,比如验证注册邮箱,密码,用户名等: 正则表达式的语法: 1)字符:'\'反斜杠 \t 代表制表 ...
- Java 学习笔记之 异常法停止线程
异常法停止线程: public class RealInterruptThread extends Thread { @Override public void run() { try { for ( ...
随机推荐
- jquery选择器之属性选择器
[attribute] 匹配指定属性名的所有元素 [attribute=value] 匹配给定的属性名是某个特定值的属性 [attribute!=value] 匹配给定的属性名不是某个特定值的属性 ...
- POJ-2726-Holiday Hotel
Holiday Hotel Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8302 Accepted: 3249 D ...
- pt-kill使用
percona-toolkit-2.2.10使用举例 以pt-kill为例 --help,可以看到帮助信息 -------- 运行平稳的数据库,如果遇到CPU狂飙,到80%左右,那一定是开发写的烂SQ ...
- 什么是 Web API
http://www.cnblogs.com/developersupport/p/aspnet-webapi.html Web API 强势入门指南 Web API是一个比较宽泛的概念.这里我们提到 ...
- mysql 外键约束
外键的定义语法:[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col ...
- css3立体旋转
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Linux scp复制文件,不需要输入密码的技巧
当两台LINUX主机之间要互传文件时可使用SCP命令来实现,建立信任关系之后可不输入密码. 把你的本地主机用户的ssh公匙文件复制到远程主机用户的~/.ssh/authorized_keys文件中 假 ...
- 查看.NET Service Pack版本
原文地址:如何确定已安装的 Microsoft .NET Framework 版本和 Service Pack 级别 使用以下注册表信息确定已安装的 Microsoft .NET Framework ...
- 在CentOS上搭建PHP服务器环境
您也可以使用一键自动部署环境的工具,请参见网友开发的这个工具 http://www.centos.bz/2013/08/ezhttp-tutorial/ 安装apache: yum insta ...
- 关于ImageMagick出现无效参数(invalid parameter)的解决方法
Windows 命令行 运行"convert logo.jpg f:\parseWord\tmp\logo.png" 时显示 “无效参数(Invalid Parameter)” ...