Java面向对象--Java中的异常

  • 1、

    在Java中,源文件Test.java中包含如下代码段,则程序编译运行结果是( B

     
       
    1. public class HelloWorld{
    2. public static void main(String[] args){
    3. System.out.print(“HelloWorld!”);
    4. }
    5. }
    A、

    输出:HelloWorld!

    B、

    编译出错,提示“公有类HelloWorld必须在HelloWorld.java文件中定义”

    C、

    运行正常,但没有输出内容

    D、

    运行时出现异常

  • 2、

    下列关于检测性异常和非检测性异常正确的是( ACE

    A、

    IOException及其子类(FileNotFoundException等),都属于检测型异常

    B、

    检测型异常不需要程序员来处理

    C、

    运行时异常可以处理,也可以不处理,是可选的

    D、

    错误也属于异常的一种

    E、

    所有的异常类是从 java.lang.Exception 类继承的子类

  • 3、

    关于下列代码,说法正确的是(D

     
       
    1. public static void main(String[] args){
    2. int num1 = 10;
    3. int num2 = 0;
    4. System.out.println(num1/num2);
    5. }
    A、

    输出0

    B、

    编译报错,提示除数不能为0

    C、

    输出无穷大

    D、

    运行时报错,提示除数不能为0

  • 通过第一关我们知道,有一部分异常是需要程序员提前处理的,这种异常统一称为检测性异常,如果我们不处理,程序是不能编译通过的,在IDE中也会出现一条红线。

    这个时候我们就必须处理这段可能出现异常的程序。

    如何处理呢?

    Java中提供了一个捕获异常的机制:try-catch

  • 通过这两个单词的字面意思我们就能很好的理解了:try:尝试,catch:捕获;
    尝试执行代码A代码B如果这两段代码有一个出现了异常,就会执行catch中的语句,如果代码A、B都不存在异常就不会执行catch代码,最后继续执行代码C

    所以之前报错的代码我们这样写就没错啦:

  • 在这里我们可以发现catch捕获的是FileNotFoundException,这是一个文件未找到异常,所以我们在捕获异常的时候最好要先明确异常的种类是什么。

    好奇的同学可能会有疑惑,检测性异常可以用try-catch来处理,那运行时异常可不可以用try-catch来处理呢?

    可不可以呢?自己验证一下吧!

    编程要求

    请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

  • 编辑器中的代码运行时可能会有异常,请利用本关知识处理该异常。
  • 测试说明

    补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

    输入:
    4
    2

    输出:
    2

    输入:
    4
    0

    输出:
    除数不能为0

    提示:捕获异常需要用特定的类,下表总结了常用的异常类:

    非检测型异常:

    异常 描述
    ArithmeticException 当出现异常的运算条件时,抛出此异常。例如,一个整数"除以零"时,抛出此类的一个实例。
    ArrayIndexOutOfBoundsException 用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。
    ClassCastException 当试图将对象强制转换为不是实例的子类时,抛出该异常。
    IllegalArgumentException 抛出的异常表明向方法传递了一个不合法或不正确的参数。
    IllegalMonitorStateException 抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程。
    IllegalStateException 在非法或不适当的时间调用方法时产生的信号。换句话说,即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。
    IllegalThreadStateException 线程没有处于请求操作所要求的适当状态时抛出的异常。
    IndexOutOfBoundsException 指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。
    NegativeArraySizeException 如果应用程序试图创建大小为负的数组,则抛出该异常。
    NullPointerException 当应用程序试图在需要对象的地方使用 null 时,抛出该异常
    NumberFormatException 当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。
    StringIndexOutOfBoundsException 此异常由 String 方法抛出,指示索引或者为负,或者超出字符串的大小。
    ... ...

    检测性异常:

    异常 描述
    ClassNotFoundException 应用程序试图加载类时,找不到相应的类,抛出该异常。
    CloneNotSupportedException 当调用 Object 类中的 clone 方法克隆对象,但该对象的类无法实现 Cloneable 接口时,抛出该异常。
    IllegalAccessException 拒绝访问一个类的时候,抛出该异常。
    InstantiationException 当试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象因为是一个接口或是一个抽象类而无法实例化时,抛出该异常。
    InterruptedException 一个线程被另一个线程中断,抛出该异常。
    NoSuchFieldException 请求的变量不存在
    NoSuchMethodException 请求的方法不存在
    IOException及其子类 对文件或流的操作有误时,抛出异常
    ... ...
    package step2;
    
    import java.util.Scanner;
    
    public class Task {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int num1 = sc.nextInt();
    		int num2 = sc.nextInt();
    		/********* Begin *********/
    		try{
    		System.out.println(num1/num2);
    		}
    		catch(ArithmeticException e){
    			System.out.println("除数不能为0");
    		}
    		/********* End *********/
    	}
    
    }
    

    请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

  • 异常的抛出和处理。
  • 测试说明

    补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。
    预期输出:该文件不存在

  • package step3;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    public class Task {
    	/********* Begin *********/
    	//请在合适的部位添加代码
    	public static void main(String[] args)throws FileNotFoundException {	
    		test();
    	}
    	public static void test()throws FileNotFoundException{
    		File file = new File("abc");
    		if(!file.exists()){		//判断文件是否存在
    			//文件不存在,则 抛出 文件不存在异常
    			  throw new FileNotFoundException("该文件不存在");
    		}else{
    			FileInputStream fs = new FileInputStream(file);
    		}
    	}
    	/********* End *********/
    }
    
    
    

    编程要求

    请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

  • 定义一个自定义异常,判断用户名是否小于三位,如果用户名小于三位,就抛出一个自定义异常。
  • 测试说明

    补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

    输入:

    admin

    输出:

    用户名格式正确

    输入:

    ab

    输出:

    Exception in thread "main" step4.MyException: 用户名小于三位Exception at step4.Task.main(Task.java:13)

    注意:因为抛出异常时会显示行号,请在13行抛出异常,否则评测可能不通过。

  • package step4;
    
    import java.util.Scanner;
    
    public class Task {
    	/********* Begin *********/
    	public static void main(String[] args) throws MyException {
    		Scanner sc = new Scanner(System.in);
    		String username = sc.next();
    		if(username.length()<3){
    			throw new MyException("用户名小于三位Exception");
    		}
    		else{
    			System.out.println("用户名格式正确");
    		}
    
    		//判断用户名
    		
    		
    	}
    }
    
    class MyException extends Exception{
    	public MyException(){
    
    	}
    	public MyException(String msg){
    		super(msg);
    	}
    }
    
    /********* End *********/

猜你喜欢

转载自blog.csdn.net/foxmaxiaoyu/article/details/124721267