Java异常之抛出异常详解和代码举例

Java语言的异常

  1. 异常处理机制
  2. 异常处理类
  3. 异常的处理
  4. 抛出异常
  5. 自定义异常类
抛出异常 
	1.在捕获异常之前,必须有一段代码生成并抛出一个异常对象。 
	2.异常类型不同,抛出异常的方法也不同,分为:系统自动抛出的异常、指定方法抛 出的异常。 
	3.系统定义的异常由系统抛出;指定方法抛出的异常需使用关键字throwthrows; 
我们主要讨论由方法抛出的异常用法。 
	1.抛出异常的方法与调用方法处理异常 
		1.异常的产生和处理可以在一个方法内进行; 
		2.异常的产生和处理也可以不在一个方法中,即一个方法产生异常,由该方法的调用者去处理异常
		  相对应地,异常有关的方法就有两个:有抛出异常的方法 和处理异常的方法。 
	2.抛出异常的方法 
		1.在方法体内使用throw抛出异常:throw 由异常类产生的对象; 
		2.在方法头部添加throws抛出异常: 
			[修饰符] 返回值类型  方法名([参数列表]) throws 异常列表{  
			 … …  
			 } 
由上述两种方式抛出异常,在该方法内就不必提供try-catch-finally 块去处理异常,有调用者的程序处理。 
	3.处理异常的方法 
		1.如果程序设计者调用了一个会抛出异常的方法,要么处理这个异常,要么将异常继续抛出。
		  
示例1:方法内部抛出异常、处理异常 
package ch09; 
public class Demo{ 
	public static void main(String[] args){ 
		int a=5,b=0; 
		try{ 
			if(b==0) 
				throw new ArithmeticException();  //抛出异常 
			else 
				System.out.println(a+"/"+b+"="+a/b); 
		}catch(ArithmeticException e){  //方法内处理异常 
			System.out.println("异常:"+e+" 被抛出了!"); 
		e.printStackTrace(); 
		} 
	} 
} 
 
 

示例2package ch09; 
public class Demo{ 
	public static double multi(int n){ 
		if(n<0) //该方法将抛出非法参数异常 
		throw new IllegalArgumentException("求负数阶乘异常");  
		double s=1; 
		for(int i=1;i<=n;i++)  s=s*i; 
		return s; 
		} 
	public static void main(String[] args){ 
		try{ 
			int m=Integer.parseInt(args[0]); 
			System.out.println(m+"!="+multi(m)); 
		}catch(ArrayIndexOutOfBoundsException e){ 
			System.out.println("命令行中没提供参数!"); 
		}catch(NumberFormatException e){ 
			System.out.println("应输入一个【整数】!"); 
		}catch(IllegalArgumentException e){  //main方法捕获并处理非法参数异常 
			System.out.println("出现的异常是:"+e.toString()); 
		}finally{ 
			System.out.println("程序运行结束!!"); 
		} 
	} 
} 

示例3package ch09; 
public class Demo{ 
	static void check(String str1) throws NullPointerException{ 
		if(str1.length()>2){ 
		str1=null; 
		System.out.println(str1.length()); //将抛出空指针异常 
	} 
	char ch; 
	for (int i=0;i<str1.length();i++){ 
		ch=str1.charAt(i); 
		if(!Character.isDigit(ch)) 
		throw new NumberFormatException(); 
	} 
} 
	public static void main(String[] args) throws Exception{ 
		int num; 
		try{ 
			check(args[0]); 
			num=Integer.parseInt(args[0]); 
			if (num>60) 
				System.out.println("成绩为:"+num+"  及格"); 
			else 
				System.out.println("成绩为:"+num+"  不及格"); 
		}catch(NullPointerException e){ 
			System.out.println("空指针异常:"+e.toString()); 
		}catch (NumberFormatException ex){ 
			System.out.println("输入的参数不是数值类型"); 
		}catch (Exception e){ 
			System.out.println("命令行中没有提供参数"); 
		} 
	} 
}

2.由方法抛出的异常交给系统处理(需要同学明确Java对异常强制检查要求的知识) 
 	1.Java 对 Exception 类中的异常可分为受检查型异常和非检查型异常两大 类。 
  	2.所有非检查型异常都是RuntimeException类的子类,Java编译器对非检 查型异常不要求进行捕获和
  	  处理也能通过编译;而对不是RuntimeException类子类的异常则都是受检查型异常,
  	  即如方法 抛出这类异常,调用者必须处理该异常。 
	3.对于受检查型异常,如果调用者不处理,则必须在最后的 main 方法中将 异常提交给系统。 
示例1:异常最后由main方法提交给系统 
package ch09; 
import java.io.FileInputStream; 
import java.io.IOException; 
public class Demo{  
	public static void main(String[] args) throws IOException{ //删掉异常将不能通过编译 
		FileInputStream fis=new FileInputStream("12.txt"); 
	} 
}  
示例2package ch09; 
import java.io.*; 
import java.util.Scanner; 
public class Demo{ 
	public static void main(String[] args) throws IOException{ 
		String str; 
		//以下注释部分用Scanner方式替代 
		//BufferedReader buf; 
		//buf=new BufferedReader(new InputStreamReader(System.in)); 
		Scanner sc=new Scanner(System.in); 
		while (true){ 
			try{ 
				System.out.print("请输入字符串:"); 
				//str=buf.readLine(); 
				str=sc.nextLine(); 
				if(str.length()>0) 
					break; 
				else 
					throw new IOException(); 
			}catch (IOException e){ 
				System.out.println("必须输入字符串!!"); 
				continue; 
			} 
		} 
		String s=str.toUpperCase(); 
		System.out.println("转换后的字符串为:"+s); 
		sc.close(); 
	} 
} 
  • 9
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java异常处理是Java程序设计的重要组成部分,也是程序设计过程中不可缺少的一部分。异常是在运行期间发生的错误,通常情况下不能交给编译器进行处理,需要程序员在代码中进行异常处理。 Java异常分为两个类型:checked exceptions(被检查异常)和unchecked exceptions(运行时异常)。被检查异常是指程序在编译时由编译器进行检查,必须在代码中进行处理,否则编译不通过。运行时异常是指在程序运行时才会发生的异常,可以被catch块捕捉并处理。 Java异常处理使用try、catch、finally、throw和throws关键字。try语句块定义了要捕捉的代码块,当该块中的某个语句抛出异常时,Java运行时系统会跳到catch语句块进行处理。finally语句块位于catch语句块之后,不管是否捕捉到了异常,该代码块中的代码都会被执行。throw关键字用于在代码出一个异常对象,而throws关键字用于声明方法可能出的异常类型。 在Java程序设计中,正确的异常处理可以有效地提高程序的健壮性和稳定性。通过合理使用try-catch语句块可以使程序能够优雅地处理异常,并向用户提供友好的错误提示。在编代码时,我们应该时刻牢记异常处理是程序设计中的重要部分,始终将其作为程序设计的一个必须要考虑的因素。只有通过良好的异常处理机制,我们才能编出高质量高可靠的程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unknown To Known

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值