一 finally

1.1 异常执行的顺序

package test;

public class Test {

    public static void main(String[] args)  {
Demo d = new Demo();
try {
d.show(-);
System.out.println("hello try");
} catch (NoShowException e) {
e.printStackTrace();
System.out.println("hello catch");
}
} }
class NoShowException extends Exception
{
NoShowException(String message)
{
super(message);
}
} class Demo
{
void show(int num)throws NoShowException
{
if(num<)
throw new NoShowException(num+",数值是非法的");
System.out.println("show ....."+num);
}
}

结果:

1.2 finally 作用

有一些特定的代码无论异常是否发生,都需要执行。
因为异常会引发程序跳转,导致有写语句执行不到。无法满足这个需求。
异常捕获处理时java提供解决方案。

应用场景;

定义一个功能往数据库中添加数据。

void add(Data data)throws NoAddException
{
//1,连接数据库。
try{
//2,添加数据。//添加数据时发生了异常情况。throw new SQLException();程序跳转,就执行不到断开连接。
//而断开连接必须要执行,因为不执行,连接资源在浪费。
//无论是否发生问题,都需要执行断开连接的动作,从而释放资源。
}catch(SQLException e)
{
//解决数据库的问题。
//同时将问题告诉调用者。
throw new NoAddException();
}
finally
{
//3,断开连接。
} }

总结:finally到底什么时候用
只要程序中使用到了具体的资源(数据库连接,IO资源,网络连接socket等)
需要释放,都必须定义在finally中。你在定义程序,只要问题发生与否,
指定程序都需要执行时,就定义finally中。

二 异常的组合方式

try catch finally 组合方式:

1 .try catch : 对代码进行异常检测,并对检测的异常传递给catch处理。

try catch : 对代码进行异常检测,并对检测的异常传递给catch处理。
异常捕获处理。
void show()//不用throws
{
try{
throw new Exception();
}catch(Exception e)
{ }
}

2. try finally : 对代码进行异常检测,检测到异常后因为没有catch,所以一样会被默认jvm抛出。
异常是没有捕获处理的。但是功能所开启资源需要进行关闭,所有finally。
只为关闭资源。

void show()//需要throws
{
try{
throw new Exception();
}finally
{ }
}

3,
try catch finally
检测异常,并传递给catch处理,并定义资源释放。

4,try catch1 catch2 catch3......

class ExceptionDemo10
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}

三 异常在继承或实现的细节

异常在继承或者实现中的使用细节:★★★★★
1,子类覆盖父类方法时,如果父类的方法声明异常,子类只能声明父类异常或者该异常的子类,或者不声明。
2,当父类方法声明多个异常时,子类覆盖时只能声明多个异常的子集。
3,当被覆盖的方法没有异常声明时,子类覆盖时时无法声明异常的。
举例:父类存在这种情况,接口也有这种情况,
问题:接口中没有声明异常,而实现的子类覆盖方法时发生了异常,怎么办?
 无法进行throws声明,只能catch的捕获。万一问题处理不了呢?catch中继续throw抛出,但是只能将异常转换成RuntimeException子类抛出

1,子类覆盖父类方法时,如果父类的方法声明异常,子类只能声明父类异常或者该异常的子类,或者不声明。

原因:如是不是这样,会发生类型转换异常.具体看下面代码讲解

下面红色部分产生类型转换异常 //AException ex = new BException();

ps:父类有问题了,在覆盖的时候子类不能有更多的问题

Exception
|--AException
|--AAException
|--BException
class AException extends Exception
{
}
class BException extends Exception
{
}
class AAException extends AException
{
} class Fu
{
void show()
{ }
} class Tool
{
void method(Fu f)//Fu f = new Zi();
{
try
{
f.show();
}
catch (AException ex)//AException ex = new BException();
{
}
}
}
Tool t = new Tool();
//t.method(new Fu());
t.method(new Zi()); class Zi extends Fu
{
void show()throws BException
{ } }

四 习题

.
写出程序结果
class Demo
{
public static void func()//throws Exception
{
try
{
throw new Exception();//抛出编译时异常,并没有catch处理,必须throws声明。
}
finally
{
System.out.println("B");
}
}
public static void main(String[] args)
{
try
{
func();
System.out.println("A");
}
catch(Exception e)
{
System.out.println("C");
}
System.out.println("D");
}
} -----------B C D
.写出程序结果
class Demo
{
public static void main(String[] args)
{
try
{
showExce();
System.out.println("A");
}
catch(Exception e)
{
System.out.println("B");
}
finally
{
System.out.println("C");
}
System.out.println("D");
}
public static void showExce()throws Exception
{
throw new Exception();
}
}
B C D .写出程序结果:
class Demo
{
public static void func()
{
try
{
throw new Exception();//有throw抛出异常,功能会在这里结束。下面的语句都是废话。
System.out.println("A");
}
catch(Exception e)
{
System.out.println("B");
}
}
public static void main(String[] args)
{
try
{
func();
}
catch(Exception e)
{
System.out.println("C");
}
System.out.println("D");
}
} B D
---------------- .写出程序结果
class Exc0 extends Exception{}
class Exc1 extends Exc0{} class Demo
{
public static void main(String[] args)
{
try
{
throw new Exc1();
}
catch(Exception e)//父类的catch必须放在最下面。否则编译失败。
{
System.out.println("Exception");
}
catch(Exc0 e)
{
System.out.println("Exc0");
}
}
}
---------------

5.写出程序结果  @
class Test
{
public static String output="";
public static void foo(int i)
{
try
{
if(i==)
throw new Exception();
output+="";
}
catch(Exception e)
{
output+="";
return;
}
finally
{
output+="";
}
output+="";
}
public static void main(String args[])
{
foo();
System.out.println(output);//134
foo();
System.out.println(output); //13423
}
} 134 13423
----------------------
.编程题。
建立一个图形接口,声明一个面积函数。圆形和矩形都实现这个接口,并得出两个图形的面积。
注:体现面向对象的特征,对数值进行判断。用异常处理。不合法的数值要出现“这个数值是非法的”提示,不再进行运算。 interface Shape
{
//获取面积函数。
double getArea();
} class NoValueException extends RuntimeException
{
NoValueException(String message)
{
super(message);
}
} class Rec implements Shape
{
private int length;
private int width;
Rec(int length,int width)
{
if(length<= || width<=)
throw new NoValueException("非法数值");
this.length = length;
this.width = width;
} public double getArea()
{
return length*width;
}
} class Circle implements Shape
{
private int radius;
private static final double PI = 3.14;
Circle(int radius)
{
this.radius = radius;
}
public double getAge()
{
return radius*radius*PI;
}
} ----------------------
.
补足compare函数内的代码,不许添加其他函数。
class Circle
{
private static double pi=3.14;
private double radius;
public Circle(double r)
{
radius=r;
}
public static double compare(Circle[] cir)
{
//程序代码
/*
其实就是获取数组中的最大值。
*/
// double max = cir[0].radius;// 初始化的是圆数组中的任意一个圆对象的半径。
int maxIndex = ;//初始化的是数组任意一个角标。 for(int x=; x<cir.length; x++)
{
if(cir[x].radius>cir[maxIndex].radius)//if(person.age > person1.age) if(age>age1)
{
maxIndex = x;
}
} return cir[maxIndex].radius; }
}
class TC
{
public static void main(String[] args)
{
Circle cir[]=new Circle[];//创建一个Circle类型的数组,数组有3个元素。Circle[] arr = new Circle[3];
//分别对数组每一个元素进行初始化。
cir[]=new Circle(1.0);
cir[]=new Circle(2.0);
cir[]=new Circle(4.0);
System.out.println("最大的半径值是:"+Circle.compare(cir));
}
}

java-异常进阶-包的使用的更多相关文章

  1. 3.Java异常进阶

    3.JAVA异常进阶 1.Run函数中抛出的异常 1.run函数不会抛出异常 2.run函数的异常会交给UncaughtExceptionhandler处理 3.默认的UncaughtExceptio ...

  2. Java基础---多态、内部类、异常、包

    第一讲     多态 多态可以理解为事物存在的多种体现形态. 例:动物中猫,狗.猫这个对象对应的类型是猫类型,如:猫 x = new猫(); 同时猫也是动物中的一种,也可以把猫称为动物.动物  y = ...

  3. Java 多态、内部类、异常、包

    一.多态 1. 概述 理解:多态可以理解为事物存在的多种体(表)现形态. 例如: 动物中的猫和狗. 猫这个对象对应的是猫类型,例如:猫 x = new 猫(); 同时猫也是动物中的一种,也可以把猫称为 ...

  4. Java基础进阶:时间类要点摘要,时间Date类实现格式化与解析源码实现详解,LocalDateTime时间类格式化与解析源码实现详解,Period,Duration获取时间间隔与源码实现,程序异常解析与处理方式

    要点摘要 课堂笔记 日期相关 JDK7 日期类-Date 概述 表示一个时间点对象,这个时间点是以1970年1月1日为参考点; 作用 可以通过该类的对象,表示一个时间,并面向对象操作时间; 构造方法 ...

  5. 【搞定 Java 并发面试】面试最常问的 Java 并发进阶常见面试题总结!

    本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star![Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.觉得内容不错 ...

  6. 浅谈java异常[Exception]

    学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 一. 异常的定义 在<java编程思想 ...

  7. Java 异常讲解(转)

    六种异常处理的陋习 你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗?   1 OutputStreamWrite ...

  8. 一篇不错的讲解Java异常的文章(转载)

    http://www.blogjava.net/freeman1984/archive/2007/09/27/148850.html 六种异常处理的陋习 你觉得自己是一个Java专家吗?是否肯定自己已 ...

  9. java异常——RuntimeException和User Define Exception

    1.RuntimeException public class RuntimeException { public static void main(String[] args) { // TODO ...

  10. 有效处理java异常的三个原则

    Java中异常提供了一种识别及响应错误情况的一致性机制,有效地异常处理能使程序更加健壮.易于调试.异常之所以是一种强大的调试手段,在于其回答了以下三个问题: 什么出了错? 在哪出的错? 为什么出错? ...

随机推荐

  1. MFC 使程序不在任务栏显示

    在OnInitDialog()中直接修改窗口风格: // 让本程序不在任务栏显示(创建一个工具条窗口) ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);

  2. <每日一题>题目22:简单的python练习题(31-40)

    #31.分布式爬虫主要解决什么问题? ''' ip 带宽 CPU IO ''' #32.网络传输层 ''' 应用层—http ftp dns nfs 传输层—tcp --udp 网络层—ip icmp ...

  3. springboot整合rabbitMQ时遇到的消息无法入列问题

    问题描述: 对列和交换器配置如下(绑定的正常交换器的key是“convert”): 管理平台上手动发是可以的: 而通过程序发消息不行,根本没有进入队列: 解决:显式指定交换器(备选交换器和死信交换器都 ...

  4. vue-admin-template模板添加screenfull全屏插件

    先安装screenfull:npm install screenfull@4.2.0 --save    (注意版本号) 一.在\src\components目录下创建Screenfull文件夹,创建 ...

  5. [Cqoi2015] 编号 【逆向思维,暴力枚举】

    Online Judge:Luogu-P4222 Label:逆向思维,暴力枚举 题目描述 你需要给一批商品编号,其中每个编号都是一个7位16进制数(由0~9, a-f组成).为了防止在人工处理时不小 ...

  6. layui 表格点击图片放大

    表格 ,cols: [[ //表头 {checkbox: true,fixed: true} ,{type: 'numbers', title: 'ID', sort: true,width:80} ...

  7. IntelliJ IDEA 如何在同一个窗口创建多个项目

    一.IntelliJ IDEA与Eclipse的区别   二.在同一个窗口创建多个项目 1.打开IntelliJ IDEA,点击Create New Project 2.Java Enterprise ...

  8. 44个 Javascript 变态题解析 (上)

    原题来自: javascript-puzzlers(http://javascript-puzzlers.herokuapp.com/) 读者可以先去做一下感受感受. 当初笔者的成绩是 21/44… ...

  9. Jmeter设置中文汉化

    下载汉化包logkit-2.0.jar 将汉化包copy至 jmeter文件的lib目录下 打开Jmeter软件,设置汉化包 Options  ->  ChooseLanguage  -> ...

  10. 挑逗 Java 程序员的那些 Scala 绝技

    有个问题一直困扰着 Scala 社区,为什么一些 Java 开发者将 Scala 捧到了天上,认为它是来自上帝之吻的完美语言:而另外一些 Java 开发者却对它望而却步,认为它过于复杂而难以理解.同样 ...