面向对象的异常处理之深入理解java异常处理机制
什么是异常?
异常是对问题的描述,将问题的对象进行封装;
异常体系的特点:异常体系中的所有类以及建立的对象;
都具有可抛性,也就是说可以被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异常处理机制的更多相关文章
- 【转】深入理解java异常处理机制
深入理解java异常处理机制 ; int c; for (int i = 2; i >= -2; i--) { c = b / i; System.out.println("i=&qu ...
- Java基础 -- 深入理解Java异常机制
异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的异常. ...
- 从零开始理解JAVA事件处理机制(2)
第一节中的示例过于简单<从零开始理解JAVA事件处理机制(1)>,简单到让大家觉得这样的代码简直毫无用处.但是没办法,我们要继续写这毫无用处的代码,然后引出下一阶段真正有益的代码. 一:事 ...
- 深入理解Java流机制(一)
一.前言 C语言本身没有输入输出语句,而是调用"stdio.h"库中的输入输出函数来实现.同样,C++语言本身也没有输入输出,不过有别于C语言,C++有一个面向对象的I/O流类库& ...
- 理解Java反射机制
理解Java反射机制 转载请注明出处,谢谢! 一.Java反射简介 什么是反射? Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在.灵活掌握Java反射机制,对学习框架技术有很大 ...
- 从零开始理解JAVA事件处理机制(3)
我们连续写了两小节的教师-学生的例子,必然觉得无聊死了,这样的例子我们就是玩上100遍,还是不知道该怎么写真实的代码.那从本节开始,我们开始往真实代码上面去靠拢. 事件最容易理解的例子是鼠标事件:我们 ...
- 理解Java类加载机制(译文)
理解java类加载机制 你想写类加载器?或者你遇到了ClassCastException异常,或者你遇到了奇怪的LinkageError状态约束异常.应该仔细看看java类的加载处理了. 什么是类加载 ...
- 转:一个经典例子让你彻彻底底理解java回调机制
一个经典例子让你彻彻底底理解java回调机制 转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273 ...
- 理解java异常处理机制
1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话. ...
随机推荐
- Android Volley框架的使用(二)
此博文源码下载地址 https://github.com/Javen205/VolleyDemo.git 使用请求队列RequestQueue Volley中的Request都需要添加到Reque ...
- C++学习笔记之函数指针
与数据项类似,函数也有地址.函数的地址是存储其机器语言代码的内存开始的地方. 一.函数指针的基础知识 假设要设计一个名为estimate()的函数,估算编写指定行数代码所需时间,并且希望不同的程序员都 ...
- 由“大数据量Excel入库高效方式”瞥见“并联系统”之优势
使用场景: 当你有一个Excel文件,需要把其中的数据高速录入到数据库中,文件中包含10万条以上数据. 设计方案: 我们将整个过程分成三个阶段,A(装载Excel文件). ...
- 由实现JavaScript中的Map想到的
项目中要用到JavaScript中的Map数据类型,它不像JDK那样有自带的,怎么办?搜了找到一个不错的(http://darkmasky.iteye.com/blog/454749).用这个可以满足 ...
- 泛型Dictionary的用法详解
泛型最常见的用途是泛型集合,命名空间System.Collections.Generic 中包含了一些基于泛型的集合类,使用泛型集合类可以提供更高的类型安全性,还有更高的性能,避免了非泛型集合的重复的 ...
- sqlserver 各种判断是否存在(表名、函数、存储过程等)
库是否存在 if exists(select * from master..sysdatabases where name=N'库名') print 'exists'elseprint 'not ex ...
- WCF入门教程(二)从零做起
通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK默认创建的样本 1.创建WCF服务库 2.看其生成结构 1)IService1.cs(协议) 定义了协议,具体什么操作,操作的参数和返回值 ...
- TP复习10
i * { padding:0; margin:0; } 居中 ## ThinkPHP 3.1.2 模板中的变量#讲师:赵桐正微博:http://weibo.com/zhaotongzheng 本节课 ...
- CSS样式如何解决IE浏览器不同版本的兼容问题
如果你想让浏览器是固定的IE6版本,那么你做网页的时候在<head>后面加上一句话: <meta http-equiv="X-UA-Compatible" con ...
- Mac OS系统
Mac OS系统 目录 概述 Mac OS系统常用操作 概述 Mac OS系统常用操作 显示或隐藏文件 在终端输入:defaults write com.apple.finder AppleShowA ...