基础知识super&异常

1.构造函数不可以有返回值类型

2.如果定义了显示的构造函数,则默认构造函数就没了。

3.子类继承的时候不会继承构造函数,但是如果没有显示调用父类的方法,则会默认在所有构造函数中调用super(),如果父类中定义了又参数的构造函数,而没有定义无参数的构造函数,那么这个默认的调用就会失败,必须手动调用super(...),当手动调用super的时候,必须是构造函数第一句

4.在构造函数以外的地方也可以调用super,这时候就是一个单纯的直接父类的引用。当子类的元素覆盖了父类的成员时使用,不被覆盖也可以使用,但是没有必要,引用父类的变量super.xx,父类的函数super.func()

5.Java异常

Java中得异常分为i三种类型的异常:

  • 检查性异常最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
  • 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
  • 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

6.throws/throw关键字:
throws是在函数定义声明的时候用得,主要是告诉使用该函数的用户,我可能会抛出该异常,你需要进行处理。如果不声明则使用此接口的人就不知道需要捕获异常。throw关键字是用来抛出异常的和throws不也一样。一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。

public class className
{
   public void withdraw(double amount) throws IllegalArgumentExceptionArrayStoreException
   {
       // Method implementation
   }

}

<完>

<think>嗯,用户想了解Java基础中的异常处理。首先,我需要回顾一下Java异常的基本概念,然后分门别类地解释。异常处理是Java编程中的重要部分,正确理解它对于编写健壮的代码很关键。 首先,异常是什么?应该从Throwable开始讲,它是所有错误和异常的父类。然后分成Error和Exception。Error通常是严重的系统错误,比如OutOfMemoryError,这类错误一般应用程序无法处理,所以用户通常不需要关心。而Exception分为Checked Exception和Unchecked Exception,也就是RuntimeException。Checked Exception需要在代码中显式处理,而Unchecked则不需要。 接下来,应该说明异常处理的关键字:try、catch、finally、throw、throws。每个关键字的作用是什么。例如,try块用来包裹可能抛出异常的代码,catch捕获特定类型的异常,finally无论是否发生异常都会执行,常用于资源释放。throw用于抛出自定义异常,throws在方法签名中声明可能抛出的异常。 然后,需要举一些常见的异常例子,比如NullPointerException、ArrayIndexOutOfBoundsException,这些属于RuntimeException。而IOException、SQLException则是Checked Exception,必须处理或者声明抛出。 还有自定义异常的部分,用户可能需要知道如何创建自己的异常类,通常继承自Exception或者RuntimeException。自定义异常可以用来表示特定的业务错误情况。 另外,Java 7引入的try-with-resources语句也是一个重点,它简化了资源管理,自动关闭实现了AutoCloseable接口的资源,比如文件流。这比传统的finally块更简洁,减少了代码冗余。 异常处理的最佳实践也是需要提到的,比如不要忽略异常,避免空的catch块,选择捕获具体的异常而不是通用的Exception,保持异常信息的清晰等。这些建议能帮助用户写出更健壮的代码。 用户可能的问题还包括异常处理的性能影响,比如过多的异常捕获和处理会不会影响程序效率,但这个问题可能需要更深入的讨论,不过作为基础知识可能暂时不需要深入。 还需要注意,在讲解时结构要清晰,分点说明,每个部分用例子来辅助理解。比如在讲解try-catch-finally时,可以给出一个读取文件的例子,演示如何处理IOException,并在finally中关闭流,或者使用try-with-resources的改进版本。 最后,总结异常处理的重要性,以及正确使用异常处理机制如何提高程序的可靠性和可维护性。可能还要提醒常见的错误做法,比如捕获异常后不做任何处理,或者过度使用异常控制流程,这些都应该避免。</think>Java异常处理是编写健壮程序的核心机制。以下为结构化讲解: 一、异常分类体系(Java异常层次结构) 1. 根父类:`Throwable` $$Throwable \begin{cases} Error(系统级错误) \\ Exception \begin{cases} RuntimeException(非受检异常) \\ 其他Exception(受检异常) \end{cases} \end{cases}$$ 2. 常见类型: - Error示例:`OutOfMemoryError`(内存耗尽) - RuntimeException示例:`NullPointerException`(空指针)、`IndexOutOfBoundsException`(下标越界) - 受检异常示例:`IOException`(I/O错误)、`SQLException`(数据库操作错误) 二、异常处理机制 1. 基本结构 ```java try { // 可能抛出异常的代码 } catch (SpecificException e) { // 处理特定异常 } finally { // 必须执行的清理代码 } ``` 2. 关键字详解 - `throw`:主动抛出异常 ```java if(amount < 0) { throw new IllegalArgumentException("金额不能为负数"); } ``` - `throws`:方法声明可能抛出的异常 ```java public void readFile() throws IOException { // 文件操作代码 } ``` 三、异常处理最佳实践 1. 优先使用try-with-resources(Java 7+) ```java try (FileInputStream fis = new FileInputStream("file.txt")) { // 自动关闭资源 } catch (IOException e) { e.printStackTrace(); } ``` 2. 异常处理原则 - 不要吞没异常(避免空catch块) - 捕获具体异常而非通用Exception - 保持异常信息完整性 ```java catch (IOException e) { logger.error("文件读取失败: " + e.getMessage()); throw new CustomException("业务处理失败", e); // 异常链传递 } ``` 四、自定义异常 1. 创建步骤 ```java public class PaymentException extends Exception { public PaymentException(String message) { super(message); } public PaymentException(String message, Throwable cause) { super(message, cause); } } ``` 五、异常处理性能注意 1. 避免在循环内使用try-catch 2. 异常实例创建成本较高,不要用异常控制流程 通过合理的异常处理,可以使程序具备: 1. 错误隔离能力 2. 可恢复性 3. 清晰的错误诊断信息 4. 代码可维护性提升 建议结合具体业务场景选择合适的异常处理策略,同时注意日志记录的完整性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值