java 中的异常处理

异常(exception)就是在程序的运行过程中发生的不正常的事件,它会中断正在运行的程序,是一种特殊的运行错误对象。如果不对异常进行特定的异常处理,可能会导致程序的非正常结束,甚至引起严重的后果。
Java通过异常处理机制为程序员提供了一种解决运行时错误的方法。在Java中,当程序遇到运行错误时,会产生并抛出一个异常,可以通过try-catch语句捕获这个异常,然后根据这个异常进行相应的处理。
在异常类层次的最上层是Throwable类,用来表示所有的“异常”情况,每个异常类都是Throwable类的子类。Throwable类有两个直接子类:一个是Exception类,是用户程序够捕捉到的异常情况,通过产生它的子类来创建自己的异常;另一个是Error类,它描述由是系统内部错误,这样的错误一旦产生,程序一般就没有机会再进行捕获和处理了。

public class Test{
public void method(){
  try{
  throwException(1);
  }catch(Exception ex)
  {
  System.out.println("捕获到异常!");
}finally
{
System.out.println(finally中的代码一定会被执行!);
}
}
public void throwException(int i) throws Exception {
if(i==1){
throw new Exception();
}
}
}

下面分别解释这5个关键字。
(1)try: 当某段代码在运行时可能产生异常时,应该把这段代码放到try语句块中。
(2)catch:在catch语句块中捕获异常。catch语句块的参数类似于方法的声明,包含一个异常类型和一个异常对象。异常类型一般是java. lang.Exception类或者它的子类。
(3)finally: 无论是否产生异常,finally所指定的代码都要被执行。通常在finally语句块中可以进行资源的清除工作,如关闭数据库的连接、关闭打开的文件等。
(4)throws: 总是出现在方法的声明中,用来表明该方法可能抛出的各种异常。
(5)throw:总是出现在方法体中,用来抛出一个异常。

try-catch语句块

import java.util.Scanner;
public class TestTryCatch{
public static void main(String[] args){
//创建Scanner对象,接受控制台的输入
Scanner inl=new Scanner(System. in);
try{
System.out.println(“请输入第一个数:“);
int x=inl.nextInt(); //从命令行读取一个整数//打印输出x的值
System.out.println(“x=+x);
System.out.println(”请输入第二个数:);
int y= inl.nextInt(); //再次从命令行读取一个整数//打印输出y的值
System.out.println(“y="+y);
int m=x/y;
System. out.println(m="+m);
System.out.println(“end of try);
} catch(Exception ex)
{
System.out.println("异常信息:"+ex);
//打印异常堆栈信息
ex.printStackTrace();
System.out.println(“end of cateh");
}
System.out.println(" end of main");
}
}

finally语句块

import java.util.Scanner;
publ ic class TestTryCatchF inally{
public static void main(String[] args){
//创建Scanner对象,接受控制台的输入
Scanner inl = new Scanner(System.in);
try{
System.out.println("请输入第一个数:");
int x= inl.nextInt();
//打印输出x的值
System.out.println("x="+x);
System.out.println("请输入第二个数:");
int y= inl.nextInt();
//打印输出y的值
System.out.println("y="+y);
int m=x/y;
System. out.println("m="+m);
System.out.println("end of try");
}catch(ArithmeticException ex)
{
System,out.println("异常信息:"+ex)System.out.println(“end of catch);
}finally
{
System.out.println("end of finally");
}
System.out.println("end of main");
}
}

throws 子句

public class TestThrowsException{
static void method() throwsIllegalAccessException{
System.out.println("在method中抛出一个异常");
throw new IllegalAccessException("这里有异常");
}
public static void main(String[] args){
try{
method();
}
catch(IllegalAccessException ex){
System.out.println(ex.getMessage());
}
}
}

throw语句

public class TestThrowException{
public static void main(String[] args){
Teacher teacher= new Teacher();
try{
teacher.setId(2008858);
}
catch(IllegalArgumentException ex){
System.out.printn(ex.getMessage());
}
}
}
class Teacher{
private String id;// 教师职工编号、长度应为9
public void setId(String pId){
//判断教师职工号的长度是否为9
f(pId. length()==9){
id= pId;
}else{
throw new IllegalArgumentException(
}
}
}

注意:所有异常都是通过throw抛出的。虽然系统预定义的异常一般由系统自动抛出但程序员也可以用throw抛出这部分异常,而不仅仅是自定义异常。并且throw 语句会中断程序的运行,因此它后面不能写任何语句,否则会产生不可到达的编译错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值