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 ( ...
随机推荐
- 用JavaScript动态加载CSS和JS文件
本文转载自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/11/14/2248451.html 今天项目中需要用到动态加载 CSS 文件 ...
- 【maven】之使用tomcat7-maven-plugin自动编译的问题
今天遇到一个奇怪的问题,项目依赖关系如下, 在web端通过tomcat7插件debug模式启动项目的时候,dao层写的代码不能加载,还是原来的代码效果, 然后我在eclipse部署一个tomcat,将 ...
- HTML 全局属性_02
New : HTML5 新属性. 属性 描述 accesskey 设置访问元素的键盘快捷键. class 规定元素的类名(classname) contenteditableNew 规定是否可编辑元素 ...
- [家里蹲大学数学杂志]第049期2011年广州偏微分方程暑期班试题---随机PDE-可压NS-几何
随机偏微分方程 Throughout this section, let $(\Omega, \calF, \calF_t,\ P)$ be a complete filtered probabili ...
- NDK SO 库开发与使用中的 ABI 构架选择
Bugtags V1.2.7 引入了 NDK SO 库,在集成的时候,遇到不同的 SO 库打包到 APK 时,安装在某些机器上,出现 java.lang.UnsatisfiedLinkError 加载 ...
- js 生成 yyyy-mm-dd 格式的逼格姿势
关于 js 生成 yyyy-mm-dd 格式,往往都会采取手动拼接,一般不愿意为了小功能而去动用 momentjs 之类的插件. ps: 只分享简单方法,网上有 N 多 dateformat 代码,这 ...
- .net 中生成二维码的组件
http://qrcodenet.codeplex.com/
- ThinkPHP 3.2.3心得
个人还是蛮喜欢tp的比其他的php框架轻(只接触过drupal.tp),而且上手容易(struts这种action的方式,对于java程序员来说).目录结构也比较简单易懂,提供的一些函数也比较实用.对 ...
- Python基础篇【第2篇】: Python自定义函数
Python函数 1. 函数定义 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print ...
- 6.3Sum && 4Sum [ && K sum ] && 3Sum Closest
3Sum Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find a ...