自定义异常类
继承Exception,自定义异常类: 异常类要能够描述错误信息
比如,非法字符异常 IllegalCharException应该把非法字符的位置带上。

throws多种异常
throws用于声明本函数可能产生的异常的种类
void parse(String s) throws IllegalCharException,BadFromatException{
}
各异常类以逗号分隔

异常的匹配
根据抛出的异常对象的类型,从前往后匹配catch语句。
- 若匹配成功,则其他的catch不再匹配.
- 若全不匹配,则继承向上层函数抛出。

异常的匹配
怎么才算是匹配成功?假设抛出的对象类型为EA
catch(EX e)
{
}
如果EA与EX类型相同,或是EX的子类,则匹配成功.怎么抓获所有类型的异常?
catch( Exception e)
{
}

由于Exception类是所有异常的父类,所以用这个肯定能捕获异常。(相当于default处理)

代码如下:

BadFormatException.java

package my;public class BadFormatException extends Exception
{String reason;public BadFormatException(String reason) {this.reason=reason;}@Overridepublic String getMessage(){return "格式错误("+reason+")";}
}

BadRangeException.java

package my;public class BadRangeException extends Exception
{String reason;public BadRangeException(String reason) {this.reason=reason;}@Overridepublic String getMessage(){return "范围错误("+reason+")";}}

Date.java

package my;public class Date
{public int year,month,day;public void parse(String dateStr) throws IllegalCharException,BadFormatException,BadRangeException{//检测非法字符for(int i=0;i<dateStr.length();i++) {char ch=dateStr.charAt(i);if(ch>='0'&&ch<='9') ;else if(ch=='-');else throw new IllegalCharException(i);}//检测分割符int  p1=dateStr.indexOf("-");if(p1<0)   throw new BadFormatException("找不到第1个横杠!");int p2=dateStr.indexOf("-",p1+1);if(p2<0) throw new BadFormatException("找不到第2个横杠!");//检测年月日的长度String s1=dateStr.substring(0, p1);String s2=dateStr.substring(p1+1, p2);String s3=dateStr.substring(p2+1);if(s1.length()!=4)    throw new BadFormatException("格式不对:年份错误!");if(s2.length()!=1&&s2.length()!=2) throw new BadFormatException("格式不对:月份错误!");if(s3.length()!=1&&s3.length()!=2) throw new BadFormatException("格式不对:日份错误!");this.year=Integer.valueOf(s1);this.month=Integer.valueOf(s2);this.day=Integer.valueOf(s3);//有效性检测if(month<0||month>12) throw new BadRangeException("数据无效:月份不能为"+month);if(day<0||day>31)    throw new BadRangeException("数据无效:日期不能为"+day);}@Overridepublic String toString(){return year+"年"+month+"月"+day+"日";}
}

HelloWorld.java

package my;public class HelloWorld
{public static void main(String[] args){        Date d=new Date();try {d.parse("2016B-12-1");System.out.println("日期为:"+d.toString());}catch(IllegalCharException e) {System.out.println(e.getMessage());}catch(BadFormatException e) {System.out.println(e.getMessage());}catch(BadRangeException e) {System.out.println(e.getMessage());}catch(Exception e) {}} }

IllegalCharException.java

package my;public class IllegalCharException extends Exception
{int position=0;public IllegalCharException(int pos) {this.position=pos;}@Overridepublic String getMessage(){return "非法字符("+position+")";}public int getPosition() {return position;}
}

运行结果如下:

Java高级语法笔记-自定义异常类相关推荐

  1. Java高级语法笔记-模板类

    模板类 模板类用与表示通用的数据结构和算法. 例如,定义一个类List,表示通用链表(适用于任意对象的类型) 定义模板类: class List<T>{ } 使用模板类:创建List对象时 ...

  2. Java高级语法笔记-匿名类(Anonymous Class)

    匿名类(Anonymous Class) 匿名内部类,简称匿名类:是内部类的一种化简写法. 基本写法如下: BaseType obj=new BaseType(){ //类的定义 } Java项目中匿 ...

  3. Java高级语法笔记-语法支持的异常

    语法支持的异常 Java对异常支持得很彻底,举例来说: (java.lang.*下面,语法自带的异常类) 数组越界 ArrayIndexOutOfBoundsException 除0异常 Arithm ...

  4. Java高级语法笔记-反射机制(Reflection) (1)

    反射机制:在C/C++里面是没有的. 反射机制是Java的一个非常重要的机制.一些著名的应用框架都使用了此机制. java.lang.Class它是Java语法的一个基础类,用于描述一个class对象 ...

  5. Java高级语法笔记-文件读写(2)

    文件读写(2) int与byte[]之间的互相转化 使用java.nio.ByteBuffer类可以完成int到 byte[]的转换 byte[] buf = new byte[4]; int a = ...

  6. Java高级语法笔记-枚举类型

    用enum定义枚举类型,即定义一些常量. public enum Weekday{ SUNDAY,MONDAY,TUESDAY,WEDNESDAY, THURSDAY,FRIDAY,SATURDAY ...

  7. Java高级语法笔记-接口(interface)

    接口interface 接口和抽象类写法是一样的(只定义一个声明) interface的使用:定义一个类,implements这个接口.(对比abstract class,extends) inter ...

  8. Java高级语法笔记-普通异常处理

    地位: 1. Java彻底地.完全地支持了异常机制. 2. 无处不在.必须掌握. 正常情况:传入一个数组,长度为N,则getMax能够正常运作得到最大值. 异常情况:传入一个数组,长度为0...如何处 ...

  9. Java高级语法笔记-库的使用(jar)

    库的使用(jar) 开发一个有用的类,想给别人使用,但是不想把源代码给别人. Java里的库文件的形式 *.jar 可以将编译出的class文件打包成 *.jar格式,称为jar包.将jar包发给别人 ...

最新文章

  1. 浅谈悲催的“期末考试”
  2. SQL Server 查询基础
  3. Python装饰器学习笔记
  4. Ubuntu下安装SSH服务
  5. python字典和集合对象可以进行索引操作_Python中的字典跟集合整理笔记
  6. 贪心 BestCoder Round #39 1001 Delete
  7. 【POJ】3255 Roadblocks(次短路+spfa)
  8. Hibernate执行Update操作之后查询跟新的语句出错
  9. 机器学习面试之算法思想简单梳理
  10. 用时间序列的方法处理数据
  11. Centos6.4升级glibc_2.14
  12. 教你用快捷键 以管理员身份运行cmd
  13. Excel一键给操作内容添加批注作者
  14. 第三届CCF计算机职业资格认证考试题解(C++)
  15. React中获取地址栏传参
  16. 2010年北京大学软件与微电子学院毕业生就业去向(官方不完全统计)
  17. xml文件怎么转换成wps_xml文件转word文档 怎么将XML文档转成WORD文档
  18. java课程设计模板_《JAVA课程设计模板.doc
  19. [高项]焦点小组VS名义小组技术VS引导式研讨会
  20. docker搭建 JRebel 验证服务器 和 IDEA 验证服务器

热门文章

  1. 给csdn-blog开发组的建议(Kevins)
  2. 好的软件人员必看的书
  3. 如何用FineReport制作一张报表(二)
  4. 如果你20秒钟还看不懂这个短信的话,说明你还纯洁!?
  5. 装逼神器,5 行 Python 代码 实现一键批量扣图,你get到了吗
  6. 重磅!百度小程序成立开源联盟
  7. HTML5 API详解(7):link prefetch提升加载速度,优化体验
  8. ​她回顾过去的学习生活,印象最深刻的并非是收获荣耀的高光时刻, 而是在“看文献、做科研、写论文”循环中推进的每一步...
  9. CIRIquant:circRNA定量和剪接体转换识别
  10. PDF Expert使用教程:如何在Mac上使用PDF Expert编辑PDF