try-catch异常处理

一,概述

我们在编程时,往往会出现各种错误与异常,在Java的中,当某一方法出现错误时,器compile-会创建³³一个异常对象,并把它传递给正在运行的系统。例如,我们在如下的例子中有一处错误。

public class Dem
{
   public static void main(String[] args){
      
      int s1=Integer.parseInt("20L");
      System.out.println(s1);
}
}      

                                                                                                  示例一

在本例中我们将字符串转化为整型数,由于 “20L” 中含有字母,所以无法转换为整型,因此系统会提示如下错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "20L"
	at java.base/java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.base/java.lang.Integer.parseInt(Unknown Source)
	at java.base/java.lang.Integer.parseInt(Unknown Source)
	at tast.java.Dem.main(Dem.java:99)

NumberFormatException:用于输入字符串表示字符串转换为数字抛出的异常
 

二,捕捉异常

因而我们在实际操作中可以使用的try-catch语句来捕捉异常。尝试语句块中存放的是可能会发生异常的java的语句,而抓语句则用来激发被捕获的异常,在该结构中最后还有一个最后语句块,无论尝试语句块是否退出,都会执行最后语句

在此我们对示例一的代码进行改进,如下:

public class Dem
{
   public static void main(String[] args){
      try{
      int s1=Integer.parseInt("20L");
      System.out.println(s1);}
      catch(Exception e){
    	  e.printStackTrace();
      }
      finally {
    	  System.out.println("无论try是否异常,对我没有影响");
    	  
      }
}
}

                                                                                                   示例2

java.lang.NumberFormatException: For input string: "20L"
	at java.base/java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.base/java.lang.Integer.parseInt(Unknown Source)
	at java.base/java.lang.Integer.parseInt(Unknown Source)
	at tast.java.Dem.main(Dem.java:99)
无论try是否异常,对我没有影响

异常是尝试代码块传递给赶上代码块的变量类型,E是变量名

的getMessage():输出错误性质

的toString():给出异常的类型与性质

的printStackTrace():指出异常的性质,类型,栈层次及出现在程序中的位置

三.throws /抛抛出异常

由于异常类是所有异常类的父类,因此我们可以通过继承异常类来自定义异常类

class MyException extends Exception
{
	public MyException(String ErrorMessage)
	{
		super(ErrorMessage);
	}
}
class Student
{
	public int speak(int m,int n)throws MyException
	{
		if(m>1000)
		{	
		  throw new MyException("抛出了自定义异常类对象");
		}
		return m/n;
			
	}
}
public class Dem
{
	public static void main(String[] args)
	{
		int m=1001;
		int n=1;
		Student stu=new Student();
		for(int i=0;i<2;i++)
		{
		try {
				stu.speak(m--,n--);
			} catch (MyException e) {
				System.out.println("成功捕捉到自定义异常类的错误");
			}catch(Exception e) {
				//捕捉到自定义异常类之外的错误
				System.out.println("程序发生了其他异常");
			}finally {
				System.out.println("运行完毕\n");
			}
		}
		
	}
}

                                                                                             示例三

运行结果:

成功捕捉到自定义异常类的错误
运行完毕

程序发生了其他异常
运行完毕

在本例中当M = 1001,N = 1时,满足M>千条件,因此直接将MyException异常类对象抛给说话方法调用者,而第二次M = 1000,n = 0的时程序直接返回米/ N,此时0为被除数,显而是算术错误,因而此时生成ArithmeticException算术异常类对象,所以第一个捕获语句并未捕捉到,而第二个捕获语句中的异常异常类便可以捕捉到。如果将异常放在第一个捕获语句中,则MyException类将永远得不到执行,因为异常是所有异常类的父类。

注:本文中知识点难免会有遗漏,还请多多指教^^

Java 中,异常是指在程序运行期间发生的错误或异常情况,可以通过 try-catch 块来处理异常try 块用于包含可能引发异常的代码,而 catch 块用于捕获并处理 try 块中发生的异常。 以下是 try-catch 块的基本语法: ```java try { // 可能引发异常的代码 } catch (ExceptionType1 e1) { // 处理 ExceptionType1 异常 } catch (ExceptionType2 e2) { // 处理 ExceptionType2 异常 } finally { // 最后一定会执行的代码 } ``` 在 try 块中,我们可以编写可能会引发异常的代码。如果在 try 块中发生异常Java 会抛出对应类型的异常对象,并将其传递给 catch 块。在 catch 块中,我们可以根据异常类型来处理异常,例如输出错误信息或者进行一些特定的操作。 catch 块可以有多个,每个块可以捕获不同类型的异常,这样我们可以针对不同的异常类型进行不同的处理。在 catch 块中,我们可以使用异常对象的方法来获取异常信息,例如 getMessage() 方法可以获取异常的详细信息。 finally 块包含一些无论是否发生异常都必须执行的代码。在 finally 块中,我们通常会释放资源或进行清理工作,例如关闭文件或数据库连接等。 下面是一个例子,演示了如何使用 try-catch处理异常: ```java try { // 可能引发异常的代码 int a = 10 / 0; } catch (ArithmeticException e) { // 处理 ArithmeticException 异常 System.out.println("发生了算术异常:" + e.getMessage()); } finally { // 最后一定会执行的代码 System.out.println("程序结束"); } ``` 在上面的例子中,我们尝试将 10 除以 0,这是一个不合法的操作,会引发 ArithmeticException 异常。在 catch 块中,我们使用 getMessage() 方法获取异常信息,并输出错误消息。无论是否发生异常,finally 块中的代码都会执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值