您的位置:首页 > 编程语言 > Java开发

Java自定义异常

2015-10-21 13:22 471 查看

    先看标准的例子:

Test.java

/*
模拟注册
*/
public class Test{

public static void main(String[] args){

//假如用户提供的用户名如下
String username = "xpleaf";

//注册
CustomerService cs = new CustomerService();

try{
cs.register(username);
}catch(IllegalNameException e){
System.out.println(e.getMessage());
}

}
}
CustomerService.java
//顾客相关的业务
public class CustomerService{

//对外提供一个注册的方法
public void register(String name) throws IllegalNameException{

//完成注册
if(name.length()<6){

//异常
//创建异常对象
//IllegalNameException e = new IllegalNameException("用户名长度不能少6位");

//手动抛出异常
//throw e;
throw new IllegalNameException("用户名长度不能少6位");
}

//如果代码能执行到此处,证明用户名是合法的.
System.out.println("注册成功!");

}

}
IllegalNameException.java
/*
自定义“无效名字异常”.
1.编译时异常,直接继承Exception
2.运行时异常,直接继承RuntimeException
*/
public class IllegalNameException extends Exception{ //编译时异常
//public class IllegalNameException extends RuntimeException{ //运行时异常

//定义异常一般提供两个构造方法
public IllegalNameException(){}

public IllegalNameException(String msg){
super(msg);
}

}
    其实比较简单,只要把相关的类创建好就OK了,最关键是在异常处理类中继承Exception。


    根据此,再写一个自定义异常,要求如果输入的数字大于100,则抛出异常:

Main_pro.java

import java.util.Scanner;

public class Main_pro {

public static void main(String[] args) {
// TODO Auto-generated method stub

System.out.println("Please input a number for a:");
Scanner s = new Scanner(System.in);
int a = s.nextInt();

Num_check check = new Num_check();
try{
check.checknum(a);
}
catch(NumError e){
System.out.println(e.getMessage());
}
}

}
Num_check.java
public class Num_check {
public void checknum(int num) throws NumError{

if (num>=100){
throw new NumError("Error!");
}
System.out.println("The number is normal.");
}
}
NumError.java
public class NumError extends Exception{
public NumError(){}

public NumError(String msg){
super(msg);
}
}

    通过上面两个例子,再对比Python中的异常处理,最大的感想是:Python的真的要简洁好多!当然,这是因为在Java中,每一个方法都要写成一个类,而在Python中,不一定要使用面向对象的程序设计思想,因此可以简洁很多。

    关于Python异常处理的详细说明,可以参考前面我写的文章:

【Python之旅】第四篇(二):Python异常处理与异常捕捉

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: