首页 > 编程语言 >java异常机制和File类

java异常机制和File类

时间:2022-11-17 09:25:43浏览次数:38  
标签:java int System File println 机制 异常 out

Error类用于描述java虚拟机无法解决的严重错误,通常无法编码解决。如:JVM垮掉了
Exception用于描述因编程错误或者偶然外在因素导致的轻微错误,通常可以通过编码解决。如0作为除数

异常分类
java.lang.Exception是所有异常的超类,分为以下2种

  • RuntimeException 运行时异常 也叫非检测性异常
  • IoException和其他异常称为其他异常 也叫检测性异常(编译器在编译阶段能够检测出来)

对于Error我们无能为力,主要解决对Execption的处理

检测异常和非检测异常

常见异常

异常的处理

程序出现异常后,如果程序员没有进行处理将由JVM按照默认的方式进行处理并结束程序的执行

package com.cn.hello;
import java.io.IOException;
public class Animal  {
    public static void main(String[] args) {
       int a=4;
       int b=0;
       System.out.println(a/b);//算术异常
        int c[]=new int[3];
        int d=3;
        System.out.println(c[d]);//数组下标越界异常
        String str=null;
        System.out.println(str.length());//空指针异常
        Exception ex=new Exception();
        IOException IO=(IOException) ex;//类的类型转换异常
        String str1="hdhh123";
        int m=Integer.parseInt(str1);//数字格式异常
        System.out.println("程序执行完毕");

    }
}

当出现异常时程序会终止执行,以上的程序会报出算术异常,之后的程序将不会再执行

用if判断进行程序异常的避免
那个类转换异常的阻止类可以使用,程序会先进行类的加载

package com.cn.hello;
import java.io.IOException;
public class Animal  {
    public static void main(String[] args) {
       int a=4;
       int b=0;
       if(b!=0) {
           System.out.println(a / b);//算术异常
       }
        int c[]=new int[3];
        int d=3;
        if(d>=0&&d<3) {
            System.out.println(c[d]);//数组下标越界异常
        }
        String str=null;
        if(str!=null) {
            System.out.println(str.length());//空指针异常
        }
        Exception ex=new Exception();
        if(ex instanceof IOException) {
            IOException IO = (IOException) ex;//类的类型转换异常
        }
        String str1="hdhh123";
        if(str1.matches("\\d+")) {
            int m = Integer.parseInt(str1);//数字格式异常
        }
        System.out.println("程序执行完毕");

    }
}
output:程序执行完毕

用if判断成功阻止了程序的中断
但用if判断会加长代码, 可读性差

当程序出现异常后直奔catch分支进行处理

手动处理异常和没有处理异常的区别在于代码是否向下执行

虽然用Execption类可以接收所有的异常的对象,但这样写影响代码的可读性,在开发中推荐用try cath 的接连组合进行对象的接收

Exception类接收的异常,要放在最后

Fanally的使用

finally里面 面向无论是否发生异常都要执行的代码

当出现当有一些意想不到的异常没有被捕获,然后交由JVM进行处理,导致程序终止执行,Finally里面的代码此时还可以执行
举例:

package com.cn.hello;
import java.io.IOException;
public class Animal  {
    public static void main(String[] args) {
      int a=5;
      int b=0;
      try {
          System.out.println(a / b);
      }catch (ArithmeticException e){//进行算术异常的处理
          e.printStackTrace();
          System.out.println("我捕获了异常哦");
          String str=null;
          str.length();

      }

      finally {
          System.out.println("我还可以执行哦");
      }
        System.out.println("程序截至");
    }
}
output:
        java.lang.ArithmeticException: / by zero
        at com.cn.hello.Animal.main(Animal.java:8)
        Exception in thread "main" java.lang.NullPointerException
        at com.cn.hello.Animal.main(Animal.java:13)
        我捕获了异常哦
        我还可以执行哦

finally通常用于善后 如文件的关闭

finally的笔试----可能存在改变方法返回值的问题

package com.cn.hello;
import java.io.IOException;
public class Animal  {
    public static int test(){
        int a=4;
        int b=0;
        try{
            System.out.println(a/b);//该步异常跳转到catch处理 return 0不执行
            return 0;
        }catch (ArithmeticException e){
            e.printStackTrace();//该步执行完后 有finally必须让其语句最后执行
            return 1;//return 2执行后程序截至,该句没有执行
        }
        finally {
            return 2;
        }
    }
    public static void main(String[] args) {
        System.out.println(Animal.test());//输出2
    }
}

方法异常的抛出
当在某些情况下有些异常不能处理或者不便处理时,就可以将该异常转移给该方法的调用者,这种方式就叫异常的抛出
底层是生成了一个异常类的对象然后抛出

package com.cn.hello;
import java.io.FileInputStream;
import java.io.IOException;
public class Animal  {
    public static void show()throws IOException{//此时利用多态有IoException接收2个子异常
        FileInputStream fis=new FileInputStream("d:/a.txt");
        System.out.println("hello");
        fis.close();
    }
    public static void main(String[] args)/*此时可以在main方法中继续抛出但不建议throws IOException*/ {

        try {
            show();
        } catch (IOException e) {
           e.printStackTrace();
        }
        System.out.println("world");
    }
}
java.io.FileNotFoundException: d:\a.txt (系统找不到指定的文件。)
        at java.io.FileInputStream.open0(Native Method)
       
        world

子类重写父类抛出异常分析

异常可以抛出也可以捕获,开发种怎样处理?

第二种方式举例

自定义异常的抛出

标签:java,int,System,File,println,机制,异常,out
From: https://www.cnblogs.com/swtaa/p/16895593.html

相关文章

  • java线程
    1.线程的历史单进程人工切换-纸带机CPU利用率不高,CPU在等人切换纸带.多进程批处理-多个任务批量执行ABCDE5个任务(一个QQ,一个微信,一个传奇,一个QQ音乐,一个WP......
  • Java新特性(1):Java 9和Java10
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 自从Java在2009年被Oracle收购之后,就不再开源,除了Oracle官方发布的版本之外,还有OpenJDK版本,这两者的区别可以自行找某度......
  • 牛客java基础语法在线编程-知识点小结(待完善)
    知识点小结一、输入输出Scanner类Scanner类在java.util包下,导包格式如下:importjava.util.Scanner;使用示例:importjava.util.Scanner;classMain01{publ......
  • 空间分配担保机制
    抛几个问题:1.谁进行空间担保?JVM使用分代收集算法,将堆内存划分为年轻代和老年代,两块内存分别采用不同的垃圾回收算法,空间担保指的是老年代进行空间分配担保2.什么是空间......
  • LiquibaseException java.lang.ClassCastException: class java.time.LocalDateTime c
      https://forum.liquibase.org/t/liquibaseexception-java-lang-classcastexception-class-java-time-localdatetime-cannot-be-cast-to-class-java-lang-string/5059......
  • JAVA IO流
    纯文本字符流比字节流效率高.1.这个理解的特别好:http://t.zoukankan.com/liaozuheng-p-13046873.html2.节点流与处理流的介绍:https://blog.csdn.net/wcg920212/article/d......
  • JAVA课程设计(附源码)
    Java课程设计选题Java课程设计说明本次课程设计的目的是通过课程设计的各个项目的综合训练,培养学生实际分析问题、编程和动手能力,提高学生的综合素质。本课程设计尝试使......
  • Linux环境下配置vscode的C/C++ 的make编译环境(编写makefile方式)代码Demo版
    以前写过同样话题下的图文版的,这里给出一个代码Demo版本,上一个图文版本参见:​​Linux环境下配置vscode的C/C++的make编译环境(编写makefile方式)​​  ===================......
  • pytest文档82 - 用例收集钩子 pytest_collect_file 的使用
    前言pytest提供了一个收集用例的钩子,在用例收集阶段,默认会查找test_*.py文件或者*_test.py文件。如果我们想运行一个非python的文件,比如用yaml文件写用例,那么就需要......
  • java——API—— Object类——equals方法
                                                        ......