什么是异常?

  异常是对问题的描述,将问题的对象进行封装;
  异常体系的特点:异常体系中的所有类以及建立的对象;
  都具有可抛性,也就是说可以被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. 【M27】要求或者禁止对象产生于heap之中

    1.要求对象只能产生于heap之中,该怎么办? 栈上的对象肯定调用构造方法和析构方法(离开作用域的时候),因此,要求对象只能产生于heap之中,也就是禁止栈上产生对象,解决办法有两种:将所有的构造方法 ...

  2. 从零开始学android开发-项目打包发布

    右键项目 选择[android tools]-[export signed application package] 点击[next] 如果没有keystore可以选择[create new keys ...

  3. Codeforces Round #335 (Div. 1) C. Freelancer's Dreams 计算几何

    C. Freelancer's Dreams Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.codeforces.com/contes ...

  4. 2013 US Open Award Ceremoney

    http://v.youku.com/v_show/id_XNjA3MjU3MzY4.html?firsttime=0 Singapore how about    another hand   tr ...

  5. 微信lbs---返回两个经纬度坐标点的距离

    微信开发:lbs附近的商家,在数据库里记录商家的坐标,lbs设置里管理搜索半径,查询的时候,查询 客户当前坐标的半径内的所有商家列表.个人喜欢不一样,我选择了执行sql ,毕竟效果高点.微信开发必须得 ...

  6. 搭建一个全栈式的HTML5移动应用框架(纯干货,亲!)

    打开HTML5的技术网站,满屏的“5个推荐的JavaScript框架”.“10个移动应用框架”,全都是你妹的框架, 但是,你知道这些框架是干毛用的吗?来吧,我们来梳理一下吧 目前HTML5涉及的框架大 ...

  7. [AngularJS] TweenList 3D + AngularJS Animate

    AngularJS animations and TweenLite make it really easy to create cool 3d effects in your application ...

  8. ip协议的数据分片备忘

    总结: 不仅tcp协议能对数据段进行分割,ip协议也具备这个功能,之所以会这样是两者都受到底层MTU的限制(虽说tcp是根据MSS限制来分割数据包,由于MTU=tcp包头+ip包头+MSS,所以其实也 ...

  9. IFormatProvider,ICustomFormatter,IFormattable总结

    IFormatProvider中 public object GetFormat(Type formatType); 该方法主要用于获取一个 ICustomFormatter接口的实例 ICustom ...

  10. QQ会员AMS平台PHP7升级实践

    作者:徐汉彬链接:https://zhuanlan.zhihu.com/p/21493018来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. QQ会员活动运营平台(AMS ...