首页 > 编程语言 >10 个问题搞定 Java 异常处理,值得收藏!

10 个问题搞定 Java 异常处理,值得收藏!

时间:2023-01-28 22:01:20浏览次数:439  
标签:10 搞定 Java try File FileInputStream catch new 异常

本文总结了关于Java异常的十大常见问题。

1. 有检查的与无检查的

简而言之,检查型异常必须在方法中明确捕获,或者在方法的throws子句中声明。未检查的异常是由无法解决的问题引起的,例如除以零、空指针等。被检查的异常特别重要,因为你希望使用你的API的其他开发者知道如何处理这些异常。

例如,IOException是一个常用的检查异常,RuntimeException是一个未检查的异常。在阅读其他内容之前,你可以先看看《Java 异常层次图》。

10 个问题搞定 Java 异常处理,值得收藏!_抛出异常

Java 异常层次图

2. 异常管理的最佳实践

如果一个异常可以被正确处理,那么它就应该被捕获,否则,它就应该被抛出。

3. 为什么在try中定义的变量不能在catch或final中使用?

在下面的代码中,在try块中声明的字符串s不能在catch子句中使用。这段代码没有通过编译。

try {
File file = new File("path");
FileInputStream fis = new FileInputStream(file);
String s = "inside";
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println(s);
}

原因是你不知道在尝试块的什么地方会抛出异常。很有可能在对象被声明之前就抛出了异常。在这个特定的例子中,情况就是如此。

4. 为什么Double.parseDouble(null)和Integer.parseInt(null)会产生不同的异常?

它们实际上抛出了不同的异常。这是JDK的一个问题。它们是由不同的开发者开发的,所以不值得过多的思考。

Integer.parseInt(null); 
// throws java.lang.NumberFormatException: null

Double.parseDouble(null);
// throws java.lang.NullPointerException

5. Java中常用的运行时异常

下面是其中的一些。

非法参数异常(IllegalArgumentException

ArrayIndexOutOfBoundsException

当条件不满足时,它们可以在if语句中使用,如下所示:

if (obj == null) {
throw new IllegalArgumentException("obj can not be null");

6. 我们可以在同一个捕获子句中捕获多个异常吗?

答案是肯定的。只要这些异常类可以追溯到类继承层次中的同一个超类,你就可以只使用那个超类。

7. 在java中构造函数可以抛出异常吗?

答案是肯定的。构造器是一种特殊的方法。下面是一个代码例子。

8. 在最终子句中抛出异常

以下做法是合法的:

public static void main(String[] args) {
File file1 = new File("path1");
File file2 = new File("path2");
try {

FileInputStream fis = new FileInputStream(file1);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
FileInputStream fis = new FileInputStream(file2);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}

但为了提高代码的可读性,你应该把嵌入的try-catch块包装成一个新的方法,然后把方法的调用放在finally子句中。

public static void main(String[] args) {
File file1 = new File("path1");
File file2 = new File("path2");
try {

FileInputStream fis = new FileInputStream(file1);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
methodThrowException();
}
}

9. return可以在finally块中使用吗?

是的,可以。

10. 为什么开发人员要默默地消耗异常?

有很多像下面这样的代码段发生。如何处理异常是如此重要,为什么开发人员一直这样做?

try {
...
} catch(Exception e) {
e.printStackTrace();
}

忽视只是简单的。频繁出现并不意味着正确性。

标签:10,搞定,Java,try,File,FileInputStream,catch,new,异常
From: https://blog.51cto.com/u_14279308/6025176

相关文章

  • JAVA的JDBC基础
    JDBC概念JDBC就是使用Java语言操作关系型数据库的一套API全称:(JavaDataBaseConnectivity)Java数据库连接 JDBC好处各数据库厂商使用相同的接口,Java代码......
  • 跟我学Java设计模式第7天:行为型设计模式
    Java设计模式文章目录​​跟我学Java设计模式第一天:设计模式概述和软件设计原则​​​​跟我学Java设计模式第二天:简单工厂模式、工厂方法模式、抽象工厂模式​​​​跟我学......
  • Win10系统 JDK环境变量配置
    (1)右击“此电脑”,点击属性,找到高级系统设置。(2)新建,添加变量名JAVA_HOME,变量值为之前自己jdk的安装路径C:\ProgramFiles\Java\jdk1.8.0_231(3)找到系统变量里变量为Path的,选......
  • 互联网大厂(字节、华为)Java EE面试题:Servlet/JSP 部分解析+答案,最强八股文
    文章目录​​1.请列举至少6种javaEE技术,并简述其作用。​​​​解析:​​​​参考答案:​​​​2.在web.xml文件中配置Servlet时,主要配置哪些信息?​​​​解析:​​​​参考答......
  • Java零基础05篇:运算符的实际应用
    文章目录​​一、关系运算符(应用)​​​​二、逻辑运算符(应用)​​​​三、三元运算符(理解)​​​​三元运算符案例:​​​​1.需求​​​​2.需求:​​一、关系运算符(应用)关系......
  • Java枚举(Enum)类型原理探求
    Enum枚举类型Enum的全写是Enumeration,这个词的翻译是列举、逐条陈述、细目。在程序语言中,枚举类型是一种特殊的数据类型(常用的数据类型比如字符串、整型),这种数据类型的变量......
  • java面试技巧:Integer和int的那些事⼉
    最近在招聘⾯试的过程中,考察⼀些候选⼈的基础掌握能⼒中发现,还是有⼤多数⼲了有1~3年的开发者在基础这块⼉掌握的不够牢靠,没有去思考过为什么这样做,以及这样做的原因是什么?......
  • C# 10 Lambda 语法的改进
    C#10包括了对Lambda表达式的处理方式的许多改进:Lambda表达式可以具有自然类型,这使编译器可从Lambda表达式或方法组推断委托类型。如果编译器无法推断返回类型,Lam......
  • java四大引用详解!
    什么是java四大引用? 是JDK1.2版本开始引入,把对象的引用分为4个等级,我们平时学习的就是四种的第一级的强引用,说白了,就Objecto=newObject(),四个引用分别是强引用、软引......
  • Java程序员必看:Solr vip竞价排名
    功能介绍本文将使用solr完成vip等级排名,这里并不是简单的按照vip等级排序。而是在使用solr条件查询(不使用排序)的时候将符合条件并且具有vip等级的数据显示在前面,这个时候......