先看标准的例子:
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.javaimport 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.javapublic 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.javapublic class NumError extends Exception{
public NumError(){}
public NumError(String msg){
super(msg);
}
}
通过上面两个例子,再对比Python中的异常处理,最大的感想是:Python的真的要简洁好多!当然,这是因为在Java中,每一个方法都要写成一个类,而在Python中,不一定要使用面向对象的程序设计思想,因此可以简洁很多。
关于Python异常处理的详细说明,可以参考前面我写的文章: