Java异常(二)

**********************为什么有finally*************************

package com.chapter10;

//演示发生了异常没捕获的情况
public class TestFinally {

public static void main(String[] args) {

try{
int a = 0;//连接数据库
int result = 10/a;
System.out.println("aaaaa");
}catch(ArrayIndexOutOfBoundsException e){
e.printStackTrace();
System.out.println("数组下标越界");
}catch(NullPointerException e){
e.printStackTrace();
System.out.println("除数不能为0");
}catch(ClassCastException e){
e.printStackTrace();
System.out.println("类型转换错误");
}finally{

//无论如何总要被执行 除非系统强制退出
System.out.println("关闭数据库");
}

//报错终止

System.out.println("here");
}

}

程序发生异常后,没有捕获 会报错终止, 这样后面的代码就没有机会执行了(例如关闭数据库的代码)..

这样光申请资源而不释放肯定是有问题的, 所以为了保证某些代码 必须被执行 可以把这些代码 放到
finally代码块中, finally代码块中的代码 无论如何都会执行...

一般finally 中放一些释放资源的代码 例如关闭数据库、关闭io流、关闭socket通道等..

关于finally的几个面试题:

try中如果有return 不会立马返回, 先执行finally,如果finally中有return 那么整个方法的返回值取finally中的返回值,

如果finally 中没有return ,那么整个方法的返回值取try中的..

*********************try后面必须跟catch 或finally其中一个*************************

package com.chapter10;

//try后面必须跟catch或finally其中之一
public class TestTryPrinciple {

public static void main(String[] args) {

try {
int a = 10;
int b = a/0;
} catch (Exception e) {
System.out.println("算数异常");
e.printStackTrace();
}

}
}

try {
int a = 10;
int b = a/0;
} finally{
System.out.println("释放资源的代码");
}

*************************************快捷键*************************

选中需要加try...catch的代码块 右键 surround with ---try...catch

****************************处理检查性异常的第二种方式--使用throws抛出给调用者处理********************

1. 使用try...catch明确处理

驾驶员自己修

2. 使用throws 抛出给调用者处理

坐席碰到异常以后 有两种处理方式,如果能处理 使用try..catch明确处理,如果处理不了,使用throws抛给调用者处理(上级),

抛给班长坐席,班长坐席收到这个异常以后,又有两种方式:try..catch 和使用throws继续抛

演示代码:

package com.chapter10.handlerCheckedException2;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

//演示处理检查性异常的第二种方式
//使用throws抛给调用者处理
public class TestHandleCheckedException2 {

//警察
//main方法中肯定要处理异常,就像警察必须处理异常一样
//如果main方法不做任何处理 继续向上抛出 会抛给JVM(不推荐)
//JVM的默认处理方式: 打印栈轨迹
public static void main(String[] args) throws FileNotFoundException{
TestHandleCheckedException2 test = new TestHandleCheckedException2();

test.laoliu();
}

public void laoliu() throws FileNotFoundException {

manager();

}

public void manager() throws FileNotFoundException {

customerAgentLeader();
}

// 班长坐席
public void customerAgentLeader() throws FileNotFoundException {
customerAgent();
}

public void customerAgent() throws FileNotFoundException {

// 碰到一个异常
FileInputStream fis = new FileInputStream("d:\\jidi16\\aaa.txt");
}

}

********************************查看API**************************************

public FileInputStream(String name)
throws FileNotFoundException

表示该构造函数可能会出现FileNotFoundException异常,并且该方法本身不做处理,抛给调用者处理

使用该类new对象的人需要进行处理或者继续使用throws抛出

********************************自定义异常**************************************

如果API提供的异常不够用,需要用户自己自定义异常

需求: 自定义一个 想要换手机的异常

throw 产生了一个异常 异常发生了 相当于 10/0

演示代码:

package com.chapter10.演示自定义异常;

//自定义的异常类
//1.继承Exception
//2.使用super("异常的具体描述") 初始化异常描述

//用户自己自定义的异常 都是检查性异常
public class WannaChangePhone extends Exception {

private String name;
private String reason;

public WannaChangePhone() {
super("想要换手机");
}

public WannaChangePhone(String name, String reason) {
super("想要换手机");
this.name = name;
this.reason = reason;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getReason() {
return reason;
}

public void setReason(String reason) {
this.reason = reason;
}

}

package com.chapter10.演示自定义异常;

//坐席
public class CustomerAgent {

public void getPhone() throws WannaChangePhone{

if(true){

throw new WannaChangePhone("丁泽鹏","买到二手手机");//产生了一个异常

}
}

public static void main(String[] args) {
CustomerAgent ca = new CustomerAgent();

try {
ca.getPhone();
} catch (WannaChangePhone e) {
System.out.println(e.getName() + "因为" + e.getReason() + e.getMessage());
e.printStackTrace();
}
}
}

********************************throws和throw的区别**************************************

throws 处理检查性异常的第二种方式: 抛给调用者处理, 调用者收到这个异常以后 又有两种处理方式:
1.使用try..catch明确的处理 2. 使用throws 继续向上抛

throw 产生了一个异常 异常发生了 相当于10/0

*****************************异常的若干知识点***************************

1. 当有多个catch块时, 范围大的异常类应该放到后面....

instanceof:

引用a instanceof 类b : 如果引用a 引用的是类b或类b子类的对象返回true,否则返回false

2. 不要使用Exception获取所有异常,虽然这样写代码简单,但是不能针对不同的异常做不同的处理...区分不开

***************************补充重写规则之两小**********************************

1. 子类方法抛出的异常 是 父类方法抛出异常的子类

原文地址:https://www.cnblogs.com/MrTanJunCai/p/9906798.html

时间: 2024-10-10 21:59:48

Java异常(二)的相关文章

java 异常二、

* 编译时异常的抛出必须对其进行处理 * 运行时异常的抛出可以处理也可以不处理 throws和throw的区别 * a:throws * 用在方法声明后面,跟的是异常类名 * 可以跟多个异常类名,用逗号隔开 * 表示抛出异常,由该方法的调用者来处理 public void setAge(int age) throws RuntimeException,AgeboundException{ .............} * b:throw * 用在方法体内,跟的是异常对象名 * 只能抛出一个异常对

java 异常二

在本程序中,对于除数是-1,也视为是错误的,是无法进行运算的. 那么就需要对这个问题进行自定义的描述. 当在函数内部出现了throw抛出异常对象,那么,就需要给对应的处理动作. 要么在内部try catch处理:要么在函数上声明让调用者处理. 一般情况下,函数内出现异常,函数上需要声明. 如何快速定义异常信息呢? 因为父类中已经把异常信息的操作都完成了. 所以子类只要在构造时,通过super语句将异常信息传递给父类. 那么就可以直接通过getMessage方法获取自定义异常信息了. 自定义异常:

java 异常总结

一:异常结构图及基本概念 Throwable类:所有异常与错误的超类. Error类:程序无法处理的错误,表示运行应用程序中较严重问题,不需要捕获 Exception类:程序本身可以处理的异常,可以捕获 RuntimeException及其子类:可以捕获此异常,也可以不捕获.建议不捕获. 非运行时异常:必须捕获的异常. 二 try...catch...finally 1 try{ 2 //监控有可能出现异常的代码 3 }catch(Exception e){ 4 //捕获异常后执行的代码 5 }

[Java面试二]Java基础知识精华部分.

一:java概述(快速浏览): 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器: 1994年将Oak语言更名为Java: Java的三种技术架构: JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发: JAVASE:Java Platform Standard Edition,完成桌面应用程序的开发,是其它两者的基础: JAVA

Java异常(1)

一.要达到的效果 如果出现错误而是某些操作没有完成,程序应该: (1)返回到一种安全状态,并能够让用户执行一些其他的命令. (2)允许用户保存所有操作的结果,并以适当的方式终止程序. 异常处理的任务就是将控制权从错误产生的地方转移到能够处理这种情况的错误处理器   二.异常分类: 1.Throwable - ---------Error -     - -     ------- XXXX -      - -      ----- XXXXX ---Exception -      - -  

浅谈java异常[Exception]

本文转自:focusJ 一. 异常的定义 在<java编程思想>中这样定义 异常:阻止当前方法或作用域继续执行的问题.虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看待异常.绝对一点说异常就是某种意义上的错误,就是问题,它可能会导致程序失败.之所以java要提出异常处理机制,就是要告诉开发人员,你的程序出现了不正常的情况,请注意. 记得当初学习java的时候,异常总是搞不太清楚,不知道这个异常是什么意思,为什么会有这个机制?但是随着知识的积累逐渐也

Java - 异常解析基础

java提高篇(十六)-----异常(一) 一.为什么要使用异常 首先我们可以明确一点就是异常的处理机制可以确保我们程序的健壮性,提高系统可用率.虽然我们不是特别喜欢看到它,但是我们不能不承认它的地位,作用.有异常就说明程序存在问题,有助于我们及时改正.在我们的程序设计当做,任何时候任何地方因为任何原因都有可能会出现异常,在没有异常机制的时候我们是这样处理的:通过函数的返回值来判断是否发生了异常(这个返回值通常是已经约定好了的),调用该函数的程序负责检查并且分析返回值.虽然可以解决异常问题,但是

JAVA基础教程之JAVA异常机制

今天我们主要来说一说JAVA异常机制方面的内容.自设JAVA学习群457036818,大家可以交流一下 一. 异常的概念和Java异常体系结构 异常是程序运行过程中出现的错误.本文主要传授的是一些滚与Java语言的异常处理.Java语言的异常处理框架,是Java语言健壮性的一个重要体现. Java把异常当作对象来处理,而且定义一个基类java.lang.Throwable作为所有异常的超类.在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception.J

java异常 之 异常的层次结构

一:起因 (1)最近在用java处理分析各种数据,碰到了一些异常,如parse()异常 ParseException,valueOf()NumberFormatException  IllegalArgumentException异常,NullPointerExcetion  IndexOutOfBoundsExceptionFileNotFoundException等 (2)异常不能任意捕获的,不能任意的写catch(***Exceptionex){} ;只有,有可能抛出相应的异常,才写cat

Java异常封装(自定义错误码和描写叙述,附源代码)

真正工作了才发现.Java里面的异常在真正工作中使用还是十分普遍的. 什么时候该抛出什么异常,这个是必须知道的. 当然真正工作里面主动抛出的异常都是经过分装过的,自己能够定义错误码和异常描写叙述. 以下小宝鸽就为大家介绍一个Java异常简单封装的样例. 在给出异常分装样例之前.须要给大家普及Java里面的checked异常和unchecked异常的个概念. 一.checked异常和unchecked异常 这里之所以让大家清楚checked异常和unchecked异常概念,是由于:待会我们的异常是