java-异常进阶-包的使用
一 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-异常进阶-包的使用的更多相关文章
- 3.Java异常进阶
3.JAVA异常进阶 1.Run函数中抛出的异常 1.run函数不会抛出异常 2.run函数的异常会交给UncaughtExceptionhandler处理 3.默认的UncaughtExceptio ...
- Java基础---多态、内部类、异常、包
第一讲 多态 多态可以理解为事物存在的多种体现形态. 例:动物中猫,狗.猫这个对象对应的类型是猫类型,如:猫 x = new猫(); 同时猫也是动物中的一种,也可以把猫称为动物.动物 y = ...
- Java 多态、内部类、异常、包
一.多态 1. 概述 理解:多态可以理解为事物存在的多种体(表)现形态. 例如: 动物中的猫和狗. 猫这个对象对应的是猫类型,例如:猫 x = new 猫(); 同时猫也是动物中的一种,也可以把猫称为 ...
- Java基础进阶:时间类要点摘要,时间Date类实现格式化与解析源码实现详解,LocalDateTime时间类格式化与解析源码实现详解,Period,Duration获取时间间隔与源码实现,程序异常解析与处理方式
要点摘要 课堂笔记 日期相关 JDK7 日期类-Date 概述 表示一个时间点对象,这个时间点是以1970年1月1日为参考点; 作用 可以通过该类的对象,表示一个时间,并面向对象操作时间; 构造方法 ...
- 【搞定 Java 并发面试】面试最常问的 Java 并发进阶常见面试题总结!
本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star![Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.觉得内容不错 ...
- 浅谈java异常[Exception]
学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 一. 异常的定义 在<java编程思想 ...
- Java 异常讲解(转)
六种异常处理的陋习 你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗? 1 OutputStreamWrite ...
- 一篇不错的讲解Java异常的文章(转载)
http://www.blogjava.net/freeman1984/archive/2007/09/27/148850.html 六种异常处理的陋习 你觉得自己是一个Java专家吗?是否肯定自己已 ...
- java异常——RuntimeException和User Define Exception
1.RuntimeException public class RuntimeException { public static void main(String[] args) { // TODO ...
- 有效处理java异常的三个原则
Java中异常提供了一种识别及响应错误情况的一致性机制,有效地异常处理能使程序更加健壮.易于调试.异常之所以是一种强大的调试手段,在于其回答了以下三个问题: 什么出了错? 在哪出的错? 为什么出错? ...
随机推荐
- C++ Builder VCL库函数简介
C++ Builder VCL库函数简介 2002-07-05· · ··C++builder资源中心 1 2 3 下一页 一.BORLAND C++ BUILDER VCL的内存管理函数 1. Al ...
- Cordova 常用命令及插件
安装 cordova: npm install -g cordova 创建应用程序 cordova create hello com.example.hello HelloWorld 添加平台 co ...
- WCF加密操作(包括证书和证书+帐号密码)
WCF作为.net三大组件之一,伟大之处不用多说,但是其加密配置对于我这样的萌新来说还是颇有难度,因此将几天来的研究成果共享出来,与各位共勉~ 首先声明我的开发环境,Win10创意者更新 + Visu ...
- 软件工程(C编码实践篇)学习总结
吴磊 SA17225400 学习完了孟老师的软件工程(C编码实践篇),跟着老师一步步的完成了代码的编写,收获真的很大. 在学习这门课之前,我还不会用Linux,也没接触过Git.如今我已成能够在Lin ...
- ArduinoUno和Leonardo的区别
学习过Arduino的同学对ArduinoUno和Lenardo的不同点会有所了解,但说起具体的区别估计还是很多人答不上来,今天我们就详细解释下Arduino Uno和Leonardo的不同. 我们从 ...
- Django自带的认证系统
Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Djang ...
- final关键字与类型转换
一.关于final的重要知识点; 1.final关键字可以用于成员变量.本地变量.方法以及类. 2. final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误. 3. 你不能够 ...
- 05_jQuery对象初识(三)登录案例
1.案例需求:点击登录按钮验证用户名和密码都不为空,为空就在对应的input标签下面显示一个错误的提示信息. 1.给登录的按钮绑定点击事件 2.点击事件要做的事情 1.找到input标签.取值.判断是 ...
- C#窗体阴影
/// <summary> /// 边框阴影 /// </summary> protected override CreateParams CreateParams { get ...
- 使用scrapy框架来进行抓取的原因
在python爬虫中:使用requests + selenium就可以解决将近90%的爬虫需求,那么scrapy就是解决剩下10%的吗? 这个显然不是这样的,scrapy框架是为了让我们的爬虫更强大. ...
