什么是异常?

  异常是对问题的描述,将问题的对象进行封装;
  异常体系的特点:异常体系中的所有类以及建立的对象;
  都具有可抛性,也就是说可以被throw和throws关键字所操作,只有异常体系具有该特点;
  throws定义在函数上,用于抛出异常类;throw定义在函数内,用于抛出异常对象,前者可以抛出多个,用逗号隔开。

代码加注释讲解:

package demo1;
/*
* 有一个圆形和长方形*
* */
class NoValueException extends Exception{
NoValueException(String msg){
super(msg);
}
}
class NoValueExceptionT extends RuntimeException{
NoValueExceptionT(String msg){
super(msg);
}
}
interface Shape{
void getArea();
}
class Rec implements Shape
{
private int len,wid;
Rec(int len, int wid)//throws NoValueException
{
if (len<=0||wid<=0)
throw new NoValueExceptionT("矩形参数出现非法值");
this.len=len;
this.wid=wid;
}
public void getArea(){
System.out.println(len*wid);
}
}

class Circle implements Shape{

private int r;
Circle(int r) {
if (r<=0)
throw new RuntimeException("圆的参数出现非法值");//自定义异常,为了增强可读性“NoValueExceptionT”
this.r = r;
}
public static final double PI=3.14;

public void getArea(){
System.out.println(Math.pow(r, 2)*PI);
}

}

public class test1 {

public static void main(String[] args) {
/*try {
Rec rec= new Rec(-4, 5);
rec.getArea();
} catch (NoValueException e) {
System.out.println(e.toString());
System.out.println(e.getMessage());
e.printStackTrace();
}*/

/* Rec rec= new Rec(4, 5);
rec.getArea();*/
Circle c=new Circle(-8);
c.getArea();
System.out.println("over");

}
/*
* 异常是对问题的描述,将问题的对象进行封装
* 异常体系的特点:异常体系中的所有类以及建立的对象
* 都具有可抛性,也就是说可以被throw和throws关键字所操作
* 只有异常体系具有该特点
* throws定义在函数上,用于抛出异常类;throw定义在函数内,用于抛出异常对象,前者可以抛出多个,用逗号隔开*/

/*
* 当函数内容有throw抛出异常对象,并未进行try处理,必须要在函数上申明,否则编译失败
* pc: runtimeexcpetion除外。也就是,函数内如果抛出runtimeexcpetion异常
* 函数上可以不用申明。
*
* 如果函数申明了异常,调用者需要进行处理,处理方法可以用throws或try
*
* 异常有两种:
* 1.编译时异常
* 没有抛出也没有try,则编译失败;
* 该异常被标识,代表可以被处理。
* 2.运行时异常(编译时不检测)
* 在编译时不需要处理,编译器不检查
* 该异常发生,建议不处理,让程序停止,需要修正代码。
* pc:多个catch,父类的catch放在最下面
* */

// 异常处理的三种模式
/*1.
try {
需要检测的代码块
} catch (Exception e) {
需要处理的代码块
pc:当 System.exit(0);此时finally 代码块不执行,只有这种情况(面试题);
finally
}finally {
必需执行的代码块
常用于关闭资源
}
2.
try {

} catch () {

}

3.
try {

} finally {

}*/

/*自定义异常:
自定义类继承Exception或runtimeException
1.为了让自定义类具备可抛性;
2.让该类具备操作异常的共性方法;
当要自定异常信息时,可以使用父类已经定义好的功能。
将异常信息传递给父类的构造函数。
优点:
1.按照java的面向对象的思想,将程序中出现的特有问题进行封装;
2.将正常流程代码和问题处理代码相分离,方便阅读。
*/
//如:
class NoValueException extends Exception{
NoValueException(String msg){
super(msg);
}
}
class NoValueExceptionT extends RuntimeException{
NoValueExceptionT(String msg){
super(msg);
}
}

}

面向对象的异常处理之深入理解java异常处理机制的更多相关文章

  1. 【转】深入理解java异常处理机制

    深入理解java异常处理机制 ; int c; for (int i = 2; i >= -2; i--) { c = b / i; System.out.println("i=&qu ...

  2. Java基础 -- 深入理解Java异常机制

    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的异常. ...

  3. 从零开始理解JAVA事件处理机制(2)

    第一节中的示例过于简单<从零开始理解JAVA事件处理机制(1)>,简单到让大家觉得这样的代码简直毫无用处.但是没办法,我们要继续写这毫无用处的代码,然后引出下一阶段真正有益的代码. 一:事 ...

  4. 深入理解Java流机制(一)

    一.前言 C语言本身没有输入输出语句,而是调用"stdio.h"库中的输入输出函数来实现.同样,C++语言本身也没有输入输出,不过有别于C语言,C++有一个面向对象的I/O流类库& ...

  5. 理解Java反射机制

    理解Java反射机制 转载请注明出处,谢谢! 一.Java反射简介 什么是反射? Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在.灵活掌握Java反射机制,对学习框架技术有很大 ...

  6. 从零开始理解JAVA事件处理机制(3)

    我们连续写了两小节的教师-学生的例子,必然觉得无聊死了,这样的例子我们就是玩上100遍,还是不知道该怎么写真实的代码.那从本节开始,我们开始往真实代码上面去靠拢. 事件最容易理解的例子是鼠标事件:我们 ...

  7. 理解Java类加载机制(译文)

    理解java类加载机制 你想写类加载器?或者你遇到了ClassCastException异常,或者你遇到了奇怪的LinkageError状态约束异常.应该仔细看看java类的加载处理了. 什么是类加载 ...

  8. 转:一个经典例子让你彻彻底底理解java回调机制

    一个经典例子让你彻彻底底理解java回调机制 转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273 ...

  9. 理解java异常处理机制

    1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话. ...

随机推荐

  1. IE自动化 二(判断IP所在地)

    该脚本用来访问一个url,并取出相应结果(该脚本用来通过淘宝API实现判断一个IP所在地) #定义要访问的URL $url="http://ip.taobao.com/service/get ...

  2. The source attachment does not contain the source for the file SignatureParser.class错误

    在myeclipse整合tomcat的完毕后,再启动tomcat的时候会出现这样的错误,呵呵,错误的大致意思是什么相关联错误,其实是myeclipse新加入的tomcat的模式出现错误了,myecli ...

  3. SGU 532. Building Foundation 暴力

    532. Building Foundation 题目连接: http://acm.sgu.ru/problem.php?contest=0&problem=532 Description A ...

  4. Looksery Cup 2015 B. Looksery Party 暴力

    B. Looksery Party Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/549/pro ...

  5. 有用好看的CSS+JS+table 导航

    预览效果图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dis ...

  6. 一步步学Mybatis-怎么样实现动态SQL查询(6)

    上一章我们已经讲完了关于Mybatis的分页用法,其实MyBatis 还具有的一个强大的特性之一通常是它的动态 SQL 能力. 如果你有使用 JDBC 或其他 相似框架的经验,你就明白要动态的串联 S ...

  7. TP复习17

    三大自动,自动创建,自动验证,自动完成

  8. android自定义TabWidget样式

    先看看效果图吧,个人觉得图标丑了点,不过还行,自己用PS做的 下面是全部代码和流程,一定要按流程顺序来,不然错误! 1.tabhost.xml <TabHost xmlns:android=&q ...

  9. SQLSERVER备份事务日志的作用

    事务日志备份有以下3种类型 (1)纯日志备份:仅包含相隔一段时间的事务日志记录,而不包含任何大容量更改 (2)大容量操作日志备份.包括由大容量操作更改的日志和数据页,不支持时间点恢复 (3)尾日志备份 ...

  10. 《UCD火花集1-2》读后感

                                                                      一个多月的时间都没有更新博客了,只因为9月份有了其他的任务,耽搁了一 ...