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

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

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

最新推荐文章于 2024-09-05 08:30:00 发布

原创

最新推荐文章于 2024-09-05 08:30:00 发布

·

1.7w 阅读

·

11

·

46

·

CC 4.0 BY-SA版权

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

文章标签:

#java

Java语言异常处理

专栏收录该内容

5 篇文章

订阅专栏

本文深入探讨Java语言的异常处理机制,包括异常类、抛出异常、自定义异常类等核心概念。通过示例讲解如何在方法中抛出异常,以及如何在调用者处处理这些异常,同时分析了受检查型异常和非检查型异常的区别。

该文章已生成可运行项目,预览并下载项目源码

Java语言的异常

异常处理机制异常处理类异常的处理抛出异常自定义异常类

抛出异常

1.在捕获异常之前,必须有一段代码生成并抛出一个异常对象。

2.异常类型不同,抛出异常的方法也不同,分为:系统自动抛出的异常、指定方法抛 出的异常。

3.系统定义的异常由系统抛出;指定方法抛出的异常需使用关键字throw或throws;

我们主要讨论由方法抛出的异常用法。

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();

}

}

}

示例2:

package 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("程序运行结束!!");

}

}

}

示例3:

package 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

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");

}

}

示例2:

package 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();

}

}

本文章已经生成可运行项目 一键运行

生成项目

🌟 相关推荐

龙虎豹杂志第112期阅读,龙虎豹杂志在线观看
365bet提款多少时间

龙虎豹杂志第112期阅读,龙虎豹杂志在线观看

📅 10-06 👀 3440
《探索发现》 20140327 塔山阻击战 第二集 危机四伏
365bet提款多少时间

《探索发现》 20140327 塔山阻击战 第二集 危机四伏

📅 10-16 👀 8625
又射覆橘子原文及翻译、赏析、注释、拼音版及朗读