Java高级语法笔记-自定义异常类
自定义异常类
继承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高级语法笔记-自定义异常类相关推荐
- Java高级语法笔记-模板类
模板类 模板类用与表示通用的数据结构和算法. 例如,定义一个类List,表示通用链表(适用于任意对象的类型) 定义模板类: class List<T>{ } 使用模板类:创建List对象时 ...
- Java高级语法笔记-匿名类(Anonymous Class)
匿名类(Anonymous Class) 匿名内部类,简称匿名类:是内部类的一种化简写法. 基本写法如下: BaseType obj=new BaseType(){ //类的定义 } Java项目中匿 ...
- Java高级语法笔记-语法支持的异常
语法支持的异常 Java对异常支持得很彻底,举例来说: (java.lang.*下面,语法自带的异常类) 数组越界 ArrayIndexOutOfBoundsException 除0异常 Arithm ...
- Java高级语法笔记-反射机制(Reflection) (1)
反射机制:在C/C++里面是没有的. 反射机制是Java的一个非常重要的机制.一些著名的应用框架都使用了此机制. java.lang.Class它是Java语法的一个基础类,用于描述一个class对象 ...
- Java高级语法笔记-文件读写(2)
文件读写(2) int与byte[]之间的互相转化 使用java.nio.ByteBuffer类可以完成int到 byte[]的转换 byte[] buf = new byte[4]; int a = ...
- Java高级语法笔记-枚举类型
用enum定义枚举类型,即定义一些常量. public enum Weekday{ SUNDAY,MONDAY,TUESDAY,WEDNESDAY, THURSDAY,FRIDAY,SATURDAY ...
- Java高级语法笔记-接口(interface)
接口interface 接口和抽象类写法是一样的(只定义一个声明) interface的使用:定义一个类,implements这个接口.(对比abstract class,extends) inter ...
- Java高级语法笔记-普通异常处理
地位: 1. Java彻底地.完全地支持了异常机制. 2. 无处不在.必须掌握. 正常情况:传入一个数组,长度为N,则getMax能够正常运作得到最大值. 异常情况:传入一个数组,长度为0...如何处 ...
- Java高级语法笔记-库的使用(jar)
库的使用(jar) 开发一个有用的类,想给别人使用,但是不想把源代码给别人. Java里的库文件的形式 *.jar 可以将编译出的class文件打包成 *.jar格式,称为jar包.将jar包发给别人 ...
最新文章
- 浅谈悲催的“期末考试”
- SQL Server 查询基础
- Python装饰器学习笔记
- Ubuntu下安装SSH服务
- python字典和集合对象可以进行索引操作_Python中的字典跟集合整理笔记
- 贪心 BestCoder Round #39 1001 Delete
- 【POJ】3255 Roadblocks(次短路+spfa)
- Hibernate执行Update操作之后查询跟新的语句出错
- 机器学习面试之算法思想简单梳理
- 用时间序列的方法处理数据
- Centos6.4升级glibc_2.14
- 教你用快捷键 以管理员身份运行cmd
- Excel一键给操作内容添加批注作者
- 第三届CCF计算机职业资格认证考试题解(C++)
- React中获取地址栏传参
- 2010年北京大学软件与微电子学院毕业生就业去向(官方不完全统计)
- xml文件怎么转换成wps_xml文件转word文档 怎么将XML文档转成WORD文档
- java课程设计模板_《JAVA课程设计模板.doc
- [高项]焦点小组VS名义小组技术VS引导式研讨会
- docker搭建 JRebel 验证服务器 和 IDEA 验证服务器
热门文章
- 给csdn-blog开发组的建议(Kevins)
- 好的软件人员必看的书
- 如何用FineReport制作一张报表(二)
- 如果你20秒钟还看不懂这个短信的话,说明你还纯洁!?
- 装逼神器,5 行 Python 代码 实现一键批量扣图,你get到了吗
- 重磅!百度小程序成立开源联盟
- HTML5 API详解(7):link prefetch提升加载速度,优化体验
- ​她回顾过去的学习生活,印象最深刻的并非是收获荣耀的高光时刻, 而是在“看文献、做科研、写论文”循环中推进的每一步...
- CIRIquant:circRNA定量和剪接体转换识别
- PDF Expert使用教程:如何在Mac上使用PDF Expert编辑PDF