java学习笔记16--异常

异常

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

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

异常类的继承结构

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

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

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

自定义异常类

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

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

[java] view plaincopy
  1. package com.itmyhome;
  2. import java.util.Scanner;
  3. class MyException extends Exception { // 自定义异常类
  4. public MyException(String name) {
  5. super(name);                  // 调用父类构造
  6. }
  7. }
  8. public class T3 {
  9. /**
  10. * @param args
  11. */
  12. public static void main(String[] args) {
  13. // TODO Auto-generated method stub
  14. Scanner scan = new Scanner(System.in);
  15. System.out.print("请输入除数:");
  16. int i = scan.nextInt();
  17. System.out.print("请输入被除数:");
  18. int j = scan.nextInt();
  19. try {
  20. if (j == 0) {
  21. throw new MyException("被除数不能为0"); // 抛出自定义异常
  22. } else {
  23. System.out.println(i / j);
  24. }
  25. } catch (Exception e) {
  26. e.printStackTrace();
  27. } finally {
  28. }
  29. }
  30. }

几个常见的面试题:

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

会执行,在return之前。

下面看两个例子

[java] view plaincopy
  1. public class T {
  2. public static void main(String[] args) {
  3. System.out.println(new T().test());
  4. }
  5. static int test() {
  6. int x = 1;
  7. try {
  8. return x;
  9. } finally {
  10. ++x;
  11. }
  12. }
  13. }

输出结果返回1

[java] view plaincopy
  1. public class T {
  2. public static void main(String[] args) {
  3. // TODO Auto-generated method stub
  4. System.out.println(test());
  5. }
  6. public static int test(){
  7. try{
  8. return 1;
  9. }finally{
  10. return 2;
  11. }
  12. }
  13. }

输出结果返回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. 【原】Java学习笔记030 - 异常

    1 package cn.temptation; 2 3 public class Sample01 { 4 public static void main(String[] args) { 5 /* ...

  2. java学习笔记(七)----异常

    异常 class Test { public int devide(int x,int y) throws Exception //throws EXception 抛出异常,如果感觉到这个程序可能出 ...

  3. Java学习笔记16

    Object类是所有类.数组.枚举类的父类,是类层次结构的根类.每个类都使用Object作为超类.所有对象(包括 数组)都实现这个类的方法. Object类实现了以下方法: 现在我们看看源码中noti ...

  4. Java学习笔记22:并发(2)

    Java学习笔记22:并发(2) 图源:PHP中文网 终止任务 终止线程有一种非常简单的方式:设置一个多线程共享的标记位,子线程用轮询的方式检查这个标记位,如果该标记位显示取消状态,就让子线程退出执行 ...

  5. Java编程笔记16:深入容器

    Java编程笔记16:深入容器 图源:PHP中文网 填充容器 填充容器会有Java编程笔记15:数组 - 魔芋红茶's blog (icexmoon.cn)种提到的填充数组同样的问题. 和数组类似,标 ...

  6. Java学习笔记之基础篇

    Java学习笔记之基础篇 目录 Java如何体现平台的无关性? 面向对象(OO)的理解 面向对象和面向过程编程的区别 面向对象三大特征 静态绑定和动态绑定(后期绑定) 延伸:类之间的关系 组合(聚合) ...

  7. 郑志远的java学习笔记

    郑志远的java学习笔记 郑志远    CCB 1         Java起源 略 2         Java语言概述 1.面向对象编程的3个原则:封装(encapsulation).继承(inh ...

  8. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  9. java学习笔记:全部,txt版本

    java学习笔记:全部,txt版本 笔者注: 1.不知道怎么上传附件,所以就把txt文本内容全部贴在这里吧. 2.已经把txt版本的笔记上传到CSDN了,我没有设置索要积分才能下载,但是不知道为什么C ...

  10. Java 学习笔记:第一章 Java入门

    Java 学习笔记:第一章 Java入门 1.1 计算机语言发展史以及未来方向 1.2 常见编程语言介绍 C语言 C++ 语言 Java语言 PHP 语言 Object-C和Swift 语言 Java ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装Master PDF Editor 3.2.81
  2. Linux/ubuntu server 18.04 安装远程桌面--vnc server
  3. android IntentService生命周期问题
  4. python少儿编程 在线课程-石家庄Python人工智能编程
  5. 微信小程序开发——超链接或按钮点击跳转到其他页面失效
  6. 本地 服务器 文件传输,本地服务器文件传输
  7. ARCGIS RUNTIME FOR IOS总结(三)
  8. cocoachina上很酷的帖子
  9. 提高网站性能的方法(学习笔记)
  10. 25则“验尸报告”— 创业失败者启示录(下)
  11. ABAQUS6.10 VS2008 Intel fortan11.1
  12. “谷歌金山词霸”换汤不换药 实验结果令人失望
  13. 为什么不使能中断,中断标志位也会被置一
  14. 网页中用到的对比原则(一):色彩对比
  15. 加州大学戴维斯分校 计算机科学,UCDavis的Computer Science「加州大学戴维斯分校计算机科学专业」...
  16. 字节跳动否认完成支付牌照收购,但金融野心一直有...
  17. 清除恶意主页www.7939.com
  18. 天津大学计算机学院考研复试名单,天津大学各学院2019考研复试办法及复试名单...
  19. 银行核心系统的清算与结算
  20. android charles 证书_手机安装Charles证书

热门文章

  1. nvme固态硬盘开机慢_为何我使用了固态硬盘开机速度还是需要20-30秒
  2. python selenium 下载文件_Python Selenium —— 文件上传、下载,其实很简单
  3. 五年一贯制专转本计算机网络真题,金陵科技学院2017年五年一贯制专转本考试大纲(计算机网络基础)...
  4. mysql 常用数据库连接池_常见的数据库连接池
  5. c语言 自动化编译环境,《C编程.开始C》3.编译基础
  6. java注解 源码_详解Java注解教程及自定义注解
  7. lisp 读取dwg 统计信息_预制梁厂 BIM 技术和自动化、信息化应用方案
  8. c语言smile定义函数,【C初始之习题五】
  9. android 支付宝月账单 统计图_记账其实很简单,用微信、支付宝就够了!
  10. python find函数 和index的区别_使用带有find和index的map时Python2和Python3之间的区别...