自定义异常类

合集下载

__自定义异常处理类

__自定义异常处理类
}
/// <summary>
/// 将跟踪信息记录到Win2000/NT事件日志中
/// <param name="message">需要记录的文本信息</param>
/// </summary>
/// 格式化记录到事件日志的文本信息格式
/// <param name="ex">需要格式化的异常对象</param>
/// <param name="catchInfo">异常信息标题字符串.</param>
{
WriteLog(TraceLevel.Warning, message);
}
/// <summary>
/// 将提示信息记录到Win2000/NT事件日志中
/// <summary>
/// 将警告信息记录到Win2000/NT事件日志中
/// <param name="message">需要记录的文本信息</param>
/// </summary>
public static void WriteWarning(String message)
/// <param name="message">需要记录的文本信息</param>
/// </summary>
public static void WriteInfo(String message)
{
WriteLog(, message);

Java异常处理:自定义异常

Java异常处理:自定义异常

Java异常处理:⾃定义异常⼀、为什么要⾃定义异常类 1、为什么要⾃定义异常类 Java中不同的异常类,分别表⽰着某⼀种具体的异常情况,那么在开发中总是有些异常情况是没有定义好的,此时我们根据⾃⼰业务的异常情况来定义异常类。

⼀些异常都是 Java 内部定义好的,但是实际开发中也会出现很多异常,这些异常很可能在JDK中没有定义过,例如年龄负数问题,考试成绩负数问题,这时就需要我们⾃定义异常。

2、什么是⾃定义异常类 在开发中根据⾃⼰业务的异常情况来定义异常类。

⼆、异常类如何⾃定义 1、如何⾃定义 ①⼀般地,⽤户⾃定义异常类都是RuntimeException 的⼦类; ②⾃定义异常类通常需要编写⼏个重载的构造器; ③⾃定义异常需要提供 serialVersionID; ④⾃定义的异常通过 throw 抛出; ⑤⾃定义异常最重要的是异常类的名字,当异常出现时,可以根据名字判断异常类型; 2、案例 (1)⾃定义⼀个编译器异常:⾃定义类并继承 ng.Exception (2)⾃定义⼀个运⾏时期的异常类:⾃定义类,并继承于 ng.RuntimeException。

建议:保留两种构造器的形式 ①⽆参构造 ②带给⽗类的message属性赋值的构造器 语法格式:public class XXXExcepiton extends Exception | RuntimeException{添加⼀个空参数的构造⽅法添加⼀个带异常信息的构造⽅法} 注意: (1)⾃定义异常类⼀般都是以Exception结尾,说明该类是⼀个异常类 (2)⾃定义异常类,必须的继承Exception或者RuntimeException 继承Exception:那么⾃定义的异常类就是⼀个编译期异常,如果⽅法内部抛出了编译期异常,就必须处理这个异常,要么throws,要么try...catch 继承RuntimeException:那么⾃定义的异常类就是⼀个运⾏期异常,⽆需处理,交给虚拟机处理(中断处理) Demo:1public class DemoRegisterException {2// 1.使⽤数组保存已经注册过的⽤户名(数据库)3static String[] usernames = {"张三","李四","王五"};45public static void main(String[] args) /*throws RegisterException*/ {6//2.使⽤Scanner获取⽤户输⼊的注册的⽤户名(前端,页⾯)7 Scanner sc = new Scanner(System.in);8 System.out.println("请输⼊您要注册的⽤户名:");9 String username = sc.next();10 checkUsername(username);1112 }1314//3.定义⼀个⽅法,对⽤户输⼊的中注册的⽤户名进⾏判断15public static void checkUsername(String username) /*throws RegisterException*/ {16//遍历存储已经注册过⽤户名的数组,获取每⼀个⽤户名17for (String name : usernames) {18//使⽤获取到的⽤户名和⽤户输⼊的⽤户名⽐较19if(name.equals(username)){20//true:⽤户名已经存在,抛出RegisterException异常,告知⽤户"亲,该⽤户名已经被注册";21try {22throw new RegisterException("亲,该⽤户名已经被注册");23 } catch (RegisterException e) {24 e.printStackTrace();25return; //结束⽅法26 }27 }28 }2930//如果循环结束了,还没有找到重复的⽤户名,提⽰⽤户"恭喜您,注册成功!";31 System.out.println("恭喜您,注册成功!");32 }33 }3435// 异常类36public class RegisterException extends/*Exception*/ RuntimeException{37//添加⼀个空参数的构造⽅法38public RegisterException(){39super();40 }4142/*43添加⼀个带异常信息的构造⽅法44查看源码发现,所有的异常类都会有⼀个带异常信息的构造⽅法,⽅法内部会调⽤⽗类带异常信息的构造⽅法,让⽗类来处理这个异常信息45*/46public RegisterException(String message){47super(message);48 }49 }。

6-检查型异常自定义异常

6-检查型异常自定义异常

2、检查型异常‎(1)处理方式:throw‎s (抛出):消极处理方‎式,产生异常中‎断执行程序‎try catch‎(捕获):积极处理方‎式,产生异常捕‎获后,继续执行程‎序例1:throw‎s (抛出) 在方法头部‎声明可能抛‎出的检查型‎异常impor‎t java.io.*;class‎demo{publi‎c stati‎c void main(Strin‎g args[])throw‎s Excep‎t ion{Input‎S trea‎m i n=new FileI‎n putS‎t ream‎("d:\\d.txt"); //创建文件输‎入流对象}}Throw‎a bl e类‎中提供了p‎rintS‎t ackT‎r ace()方法,用来跟踪异‎常事件发生‎时执行堆栈‎的内容。

还提供了g‎e tMas‎sage()方法,用来得到有‎关异常事件‎的信息。

例2:print‎S tack‎T race‎()方法impor‎t java.io.*;class‎demo{publi‎c stati‎c void main(Strin‎g args[]){try{Input‎S trea‎m i n=new FileI‎n putS‎t ream‎("d:\\d.txt"); //创建文件输‎入流对象}catch‎(Excep‎t ion ex){ex.print‎S tack‎T race‎(); //输出异常信‎息}}}例3:impor‎t java.io.*;class‎demo{publi‎c stati‎c void main(Strin‎g args[]){try{Input‎S trea‎m i n=new FileI‎n putS‎t ream‎("d:\\d.txt"); //创建文件输‎入流对象}catch‎(Excep‎t ion ex){}Syste‎m.out.print‎l n ("hello‎!");}}结果是:hello‎!例4:getMe‎ssage‎()方法impor‎t java.io.*;class‎demo{publi‎c stati‎c void main(Strin‎g args[]){int i=0;try{i=3/0;}catch‎(Excep‎t ion ex){Syste‎m.out.print‎l n ("异常是"+ex.getMe‎ssage‎()); //获得异常信‎息}Syste‎m.out.print‎l n ("继续执行");}}结果:异常是/ by zero继续执行(2)捕获的顺序‎:一个try‎对应多个c‎a tch,先子类后父‎类,(从小到大的‎顺序)。

Java自定义异常与异常使用的最佳方式

Java自定义异常与异常使用的最佳方式

Java⾃定义异常与异常使⽤的最佳⽅式⽬录异常的分类1. ⾮运⾏时异常(Checked Exception)2. 运⾏时异常(Runtime Exception/Unchecked Exception)异常的处理⼀、对应⾮运⾏时异常,必须对其进⾏处理⼆、对于运⾏时异常,可以不对其进⾏处理应⽤场景⾃定义异常类过程1. 多数情况下扩展2. 声明⽅法抛出⾃定义异常3.⾃定义异常测试操作使⽤异常的最佳实践1. 记得释放资源2. 不要使⽤异常作控制流程之⽤3. 不要忽略异常4. 不要 catch 最⾼层次的 exception5. 仅记录 exception ⼀次总结:异常的分类1. ⾮运⾏时异常(Checked Exception)Java中凡是继承⾃Exception但不是继承⾃RuntimeException的类都是⾮运⾏时异常。

2. 运⾏时异常(Runtime Exception/Unchecked Exception)RuntimeException类直接继承⾃Exception类,称为运⾏时异常。

Java中所有的运⾏时异常都直接或间接的继承⾃RuntimeException。

Java中所有的异常类都直接或间接的继承⾃Exception。

异常的处理⼀、对应⾮运⾏时异常,必须对其进⾏处理处理⽅式有两种:使⽤try…catch…finally语句块进⾏捕获在产⽣异常的⽅法所在的⽅法声明throws Exception⼆、对于运⾏时异常,可以不对其进⾏处理也可以对其进⾏处理。

⼀般情况下都不对其进⾏处理。

在使⽤Java API的⽅法时会产⽣异常,由于实际的需要,我们需要创建和使⽤⾃定义异常。

使⽤全新的异常类,应⽤到系统程序中。

在介绍⾃定义异常时,⾸要先谈谈什么要使⽤⾃定义异常,使⽤⾃定义异常的好处。

创建⾃定义异常是为了表⽰应⽤程序的⼀些错误类型,为代码可能发⽣的⼀个或多个问题提供新的含义;可以显⽰代码多个位置之间的错误的相似处,也可区分代码运⾏时可能出现的相似问题的⼀个或多个错误,或给出应⽤程序中⼀组错误的特殊含义。

23异常处理 - 标准库异常类及自定义异常

23异常处理 - 标准库异常类及自定义异常

对于bad_alloc 异常与new
对于使用new导致的内存分配问题,C++的最新处理方式是让new引发bad_alloc异常。 头文件new包含bad_alloc类的声明,它从exception公有派生来。
#include <iostream> #include <new> #include <cstdlib> using namespace std;
23.4 自定义异常类
头文件: #include <exception> 1. C++ 可以把它用作其它异常类的基类。 2. 代码可以引发exception异常,也可以把excep
tion用作基类, 3. 在从exception派生而来的类中重新定义一个
名为what()的虚拟成员函数, 4. 它返回一个字符串,该字符串随实现而异。
this->msg = rhs.msg; }
std::string msg; };
抛出异常
void CallWithException() {
char msg[1024] = { 0 }; sprintf(msg, "Exception: %s", "shit"); throw MyException(msg); }
空指针与new
例:int* pi = new (std::nothrow) int; int* pa = new (std::nothrow) int[500];
#include <iostream> #include <new> #include <cstdlib> using namespace std;

C# 用户自定义的异常类

C#  用户自定义的异常类

C# 用户自定义的异常类
在.NET Framework中,其提供的内部异常类已经能够处理很多异常,但是在有些时候内部异常类不能很好解决所遇到的异常问题,此时,就有必要创建自定义异常类,以满足应用程序的要求。

这里须要注意的是,所有的自定义异常类都必须继承ApplicationException类或它的某个派生类。

在下面的代码中,就将创建用户自定义的异常类,并使用该自定义的异常类。

具体代码如下所示。

在上述代码中,创建了一个简单的自定义异常类MyException。

虽然其不能具体实现,但是该类继承了ApplicationException类,从而继承了Exception类。

所以该类拥有Exception类中定义的属性和方法。

例如,在上述代码中MyException就使用了Exception类的GetType()方法、Message属性和StackTrace属性。

从该实例可以看出,自定义异常并不能像标准异常那样被自动抛出,而必须在程序中使用throw语句人为抛出,如图7-8所示。

图7-8 自定义异常类的抛出。

通过代码实例跟我学Java语言程序设计及应用技术——如何在项目中添加自定义的异常类型

通过代码实例跟我学Java语言程序设计及应用技术——如何在项目中添加自定义的异常类型

1.1通过代码实例跟我学Java语言程序设计及应用技术——如何在项目中添加自定义的异常类型1、添加自定义异常信息处理功能类(1)熟悉和了解在Java中自定义异常类的基本规则1)为什么要自定义异常类?——统一进行异常处理,提供更准确的错误信息(中文信息)2)如何定义自己的异常类?——从系统中的“某个异常类”进行继承,或者选择从Exception类进行继承(2)在客户端项目中添加OASystemException类(3)OASystemException类的代码示例package com.px1987.imsystem.exception;public class OASystemException extends Exception {public OASystemException() {}public OASystemException(String message) {super(message);}public OASystemException(Throwable cause) {super(cause);}public OASystemException(String message, Throwable cause) { super(message, cause);}}2、在客户端项目中应用该异常类型package com.px1987.imsystem.socketclient;import java.io.DataInputStream;import java.io.IOException;import java.io.PrintStream;import .Socket;import .UnknownHostException;import com.px1987.imsystem.exception.OASystemException;public class IMSystemSocketClientApp {private String serverSocketListenerHostName="127.0.0.1";private int serverSocketListenerPort=3721;private Socket clientSocket=null;private DataInputStream clientSocketInputStream=null;private PrintStream clientSocketOutputStream=null;public IMSystemSocketClientApp() {}public void connectToServer() throws OASystemException{try {clientSocket=new Socket(serverSocketListenerHostName,serverSocketListenerPort);} catch (UnknownHostException e) {throw new OASystemException("不能正确地连接服务器,可能是服务器没有启动或者IP有错");} catch (IOException e) {throw new OASystemException("不能正确地连接服务器,可能是服务器没有启动或者IP有错"); }}public void getSocketInputAndOutputStream() throws OASystemException{try {clientSocketInputStream=new DataInputStream(clientSocket.getInputStream());} catch (IOException e) {throw new OASystemException("不能正确地获得客户端的输入流,可能是服务器已经关闭");}try {clientSocketOutputStream=new PrintStream(clientSocket.getOutputStream());} catch (IOException e) {throw new OASystemException("不能正确地获得客户端的输出流,可能是服务器已经关闭");}}boolean stopRequest=true;public void sendRequestAndGetResponseFromServer() throws OASystemException{DataInputStream keyBoardInputStream=null;String userInputTextFromKeyBoard=null;String someResultTextFromServer =null;while(stopRequest){System.out.print(":");System.out.flush();keyBoardInputStream=new DataInputStream(System.in);try {userInputTextFromKeyBoard =keyBoardInputStream.readLine();if(userInputTextFromKeyBoard!=null){clientSocketOutputStream.println(userInputTextFromKeyBoard);someResultTextFromServer =clientSocketInputStream.readLine();if(someResultTextFromServer!=null){System.out.println(someResultTextFromServer);}else{System.out.println("服务器已经关闭了,客户程序也自动退出");break;}}else{break;}} catch (IOException e) {e.printStackTrace();throw new OASystemException("服务器已经关闭了");}}}public void closeAllStreamAndSocket() throws OASystemException {try {clientSocketInputStream.close();} catch (IOException e1) {e1.printStackTrace();}clientSocketOutputStream.close();try {clientSocket.close();} catch (IOException e) {throw new OASystemException("不能正确地关闭Socket客户对象,可能是客户端程序出现了错误");}}public static void main(String[] args) {IMSystemSocketClientApp oneIMSystemSocketClientApp=null;try{oneIMSystemSocketClientApp=new IMSystemSocketClientApp();oneIMSystemSocketClientApp.connectToServer();oneIMSystemSocketClientApp.getSocketInputAndOutputStream();oneIMSystemSocketClientApp.sendRequestAndGetResponseFromServer();}catch(OASystemException e){System.out.println(e.getMessage()); //在此才实现错误信息的显示}finally{try{oneIMSystemSocketClientApp.closeAllStreamAndSocket();}catch(OASystemException e){System.out.println(e.getMessage());}}}}3、课后作业1、对项目中的服务器端的程序进行“重构”,增加自定义的异常“类型转换”和异常错误信息的“翻译”。

python自定义异常exception模块

python自定义异常exception模块

python⾃定义异常exception模块⽅式1 - 定义成类使⽤#1. 定义from log import loggerclass AsstException(Exception):def __init__(self, message):super().__init__(message)logger.error(message)#2. 使⽤from exception import AsstExceptionclass Messenger(object):def __init__(self, sc_key):if not sc_key:raise AsstException('sc_key can not be empty')⽅式2 - 直接assert使⽤'''使⽤⽅法20200612assert True # 条件为 true 正常执⾏语法格式如下:assert expression等价于:if not expression:raise AssertionError'''def is_existed(file_path):cursor.execute('SELECT COUNT(*) FROM photo WHERE path = ? AND existed = 1', (file_path,))row = cursor.fetchone()return row[0] != 0assert not is_existed(temp_file)⽅式3 - except 使⽤# Python < 2.6try:3/0except Exception, e:print 'str(Exception):\t', str(Exception) #输出 str(Exception):<type 'exceptions.Exception'>print 'str(e):\t\t', str(e) #输出 str(e):integer division or modulo by zero# Python > 2.6try:3/0except Exception as e:print ('str(Exception):\t', str(Exception) ) #输出 str(Exception): <class 'Exception'>print ('str(e):\t\t', str(e) ) #输出 str(e): division by zero# except 多个try:print(x)except NameError:print("Variable x is not defined")except: # except Exception as e的写法print("Something else went wrong")4. except捕获【多个】异常,列表【index error处理】x= {'vesion': '05.R08;'}try:print(x['rru_vesion'].split(';')[0].split(":")[1])except (KeyError, IndexError) as e:print(e)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

自定义异常类?
class myException
{ public String toString()
{//返回异常描述信息!!}
}
class student
{
public void speak(int m) throws myException
{
if(m>1000) throw (new myException());
}
}
p ublic class Test
{
public static void main(String args[])
{
Student s1=new student();
try
{
s1.speak(1001);
}
catch(myException ex)
{System.out.println(ex.toStri
ng());}
}
}
//输入输出流的基本类
所有字节输入流的父类: InputStream
所有字节输出流的父类:OutputStream
所有字符输入流的父类:Reader
所有字符输出流的父类:Writer
//JDBC的概念
Java数据库访问技术的统称:JDBC JDBC API中的类和接口定义在包java.sql中.
Connection:表示与数据库的连接Statement:对数据源发布SQL命令
(1)对数据源发布查询命令
ResultSet rs=Statement对
象.executeQuery(“select * from student where …”);
(2)对数据源发布修改数据的命令
Statement对象.executeUpdate(“insert into/delete from/update… set …”)
(3) ResultSet对象中保存了对数据源进行查询后的结果
while(rs.next())
{
*** 变量名=rs.get***(“字段名”) …}
//关于多线程
(1)Java程序中要实现多线程,需要用到Thread类和Runnable接口.
Thread类和Runnable接口中一个重要的方法:run()
线程启动(start)后,运行,执行的方法就是run()方法.
//编程要求:
(1)能够编写一个类:定义类头、类体中的
属性和方法。

Class student
{
String 学号,姓名,性别,班级,专业;
Date 出生年月;
//要会定义构造函数(可以定义多个!!)
Student(String sno,String
sname,String ssex,String
sclass,String major)
{ 学号=sno;
姓名=sname;
性别=ssex;
班级=sclass;
专业=major;
}
//其它的构造函数
(2) 能够编写字符界面的Java程序
(Java Application)
如:PPT中的例子,求完全数、水
仙花数等。

(3)编写图形界面的程序
用Frame或JFrame构造出最外层的
大窗口
class my窗口extends Frame implements ActionListener
{
//能够定义Label、TextField、Button,标准图形界面的组件,并创
建它们,然后把它们加入到容器中。

Label l1,l2;
TextField txt1,txt2,txt3;,
Button btn1,btn2;
my窗口()
{
l1=new Label(“请输入一个数:”);
txt1=new TextField(10);
add(l1); add(txt1);
l2=new Label(“请输入另外一个数:”);
txt2=new TextField(10);
txt3=new TextField(10);
add(l2);add(txt2);
add(txt3);
btn1=new Button(“计算两个数的乘积:”);
btn2=new Button(“关闭窗口!!”); add(btn1); add(btn2);
btn1.addActionListener(this);
btn2.addActionListener(this); setSize(300,300);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==btn2)
{
dispose();
System.exit(0);
}
else if( e.getSource()==btn1)
{
try {
int
i1=Integer.parseInt(txt1.getText());
int
i2=Integer.parseInt(txt2.getText());
int i3=i1*i2;
txt3.setText(“相乘的结果是:”+i3);
}
catch(NumberFormatException ex)
{
txt1.setText(“”);
txt2.setText(“”);
}
}
}
}
//读写文本文件,具体参照PPT中的内容。

相关文档
最新文档