Java核心编程

本文详细介绍了Java中的异常处理机制,包括Error和Exception的区别,异常处理的try-catch-finally关键字的使用,以及自定义异常。此外,还讲解了Lambda表达式的基本概念,如何使用Lambda作为参数,访问变量,以及Lambda在集合操作中的应用。文章最后提到了Iterable接口的forEach方法和Iterator迭代器在遍历集合中的角色。
摘要由CSDN通过智能技术生成
  1. Error和Exception的异同

           Error(错误)和 Exception(异常)都是 java.lang.Throwable 类的子类,在 Java 代码中只有继承了 Throwable 类的实例才能被 throw 或者 catch。

    Error 错误是任何处理技术都无法恢复的情况,肯定会导致程序非正常终止。并且 Error 错误属于未检查类型,大多数发生在运行时。Exception 又分为可检查(checked)异常和不检查(unchecked)异常,可检查异常在源码里必须显示的进行捕获处理,这里是编译期检查的一部分。不检查异常就是所谓的运行时异常,通常是可以编码避免的逻辑错误,具体根据需要来判断是否需要捕获,并不会在编译器强制要求。

    如下是常见的 Error 和 Exception:

    1)运行时异常(RuntimeException):

    ​                            NullPropagation:空指针异常;

    ​                            ClassCastException:类型强制转换异常

    ​                            IllegalArgumentException:传递非法参数异常

    ​                            IndexOutOfBoundsException:下标越界异常

    ​                            NumberFormatException:数字格式异常

    2)非运行时异常:

    ​                            ClassNotFoundException:找不到指定 class 的异常

    ​                            IOException:IO 操作异常

    3)错误(Error):

    ​                            NoClassDefFoundError:找不到 class 定义异常

    ​                            StackOverflowError:深递归导致栈被耗尽而抛出的异常

    ​                            OutOfMemoryError:内存溢出异常

    异常处理机制

           Java 的异常处理通过 5 个关键字来实现:try、catch、throw、throws 和 finally。try catch 语句用于捕获并处理异常,finally 语句用于在任何情况下(除特殊情况外)都必须执行的代码,throw 语句用于拋出异常,throws 语句用于声明可能会出现的异常。

        Java 的异常处理机制提供了一种结构性和控制性的方式来处理程序执行期间发生的事件。异常处理的机制如下:

    ​1、在方法中用 try catch 语句捕获并处理异常,catch 语句可以有多个,用来匹配多个异常。

    ​2、对于处理不了的异常或者要转型的异常,在方法的声明处通过 throws 语句拋出异常,即由上层的调用方法来处理。

    try catch语句

           在 Java 中通常采用 try catch 语句来捕获异常并处理。语法格式如下:

    try {

        // 可能发生异常的语句

    } catch(ExceptionType e) {

        // 处理异常语句

    }

    在以上语法中,把可能引发异常的语句封装在 try 语句块中,用以捕获可能发生的异常。catch 后的( )里放匹配的异常类,指明 catch 语句可以处理的异常类型,发生异常时产生异常类的实例化对象。

    如果 try 语句块中发生异常,那么一个相应的异常对象就会被拋出,然后 catch 语句就会依据所拋出异常对象的类型进行捕获,并处理。处理之后,程序会跳过 try 语句块中剩余的语句,转到 catch 语句块后面的第一条语句开始执行。

    如果 try 语句块中没有异常发生,那么 try 块正常结束,后面的 catch 语句块被跳过,程序将从 catch 语句块后的第一条语句开始执行。

    注意:try...catch 与 if...else 不一样,try 后面的花括号{ }不可以省略,即使 try 块里只有一行代码,也不可省略这个花括号。与之类似的是,catch 块后的花括号{ }也不可以省略。另外,try 块里声明的变量只是代码块内的局部变量,它只在 try 块内有效,其它地方不能访问该变量。

           printStackTrace() 方法:指出异常的类型、性质、栈层次及出现在程序中的位置。

    ​       getMessage() 方法:输出错误的性质。

    ​       toString() 方法:给出异常的类型与性质。

    多重catch语句

    如果 try 代码块中有很多语句会发生异常,而且发生的异常种类又很多。那么可以在 try 后面跟有多个 catch 代码块。多 catch 代码块语法如下:

    try {

        // 可能会发生异常的语句

    } catch(ExceptionType e) {

        // 处理异常语句

    } catch(ExceptionType e) {

        // 处理异常语句

    } catch(ExceptionType e) {

        // 处理异常语句

    ...

    }

    ​       在多个 catch 代码块的情况下,当一个 catch 代码块捕获到一个异常时,其它的 catch 代码块就不再进行匹配。

    注意:当捕获的多个异常类之间存在父子关系时,捕获异常时一般先捕获子类,再捕获父类。所以子类异常必须在父类异常的前面,否则子类捕获不到。

           finally 语句可以与前面介绍的 try catch 语句块匹配使用,语法格式如下:

    try {

        // 可能会发生异常的语句

    } catch(ExceptionType e) {

        // 处理异常语句

    } finally {

        // 清理代码块

    }

    finally 语句也可以和 try 语句匹配使用,其语法格式如下:

    try {

        // 逻辑代码块

    } finally {

        // 清理代码块

    }

    使用 try-catch-finally 语句时需注意以下几点:

    ​1、异常处理语法结构中只有 try 块是必需的,也就是说,如果没有 try 块,则不能有后面的 catch 块和 finally 块;

    ​2、catch 块和 finally 块都是可选的,但 catch 块和 finally 块至少出现其中之一,也可以同时出现;

    ​3、可以有多个 catch 块,捕获父类异常的 catch 块必须位于捕获子类异常的后面;

    ​4、不能只有 try 块,既没有 catch 块,也没有 finally 块;

    ​5、多个 catch 块必须位于 try 块之后,finally 块必须位于所有的 catch 块之后。

    ​6、finally 与 try 语句块匹配的语法格式,此种情况会导致异常丢失,所以不常见。

    throws 声明异常

    当一个方法产生一个它不处理的异常时,那么就需要在该方法的头部声明这个异常,以便将该异常传递到方法的外部进行处理。使用 throws 声明的方法表示此方法不处理异常。throws 具体格式如下:

    returnType method_name(paramList) throws Exception 1,Exception2,…{…}

Java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上Java开发工具箱发展的步伐,而且每一版都重新改写了部分内容,以便适应Java的最新特性。本版也不例外,它反映了Java SE 6的新特性。全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理、Swing用户界面组件、部署应用程序和Applet、异常日志断言和调试、泛程序设计、集合以及多线程等内容。. 全书对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量示例,从而帮助读者充分理解Java语言以及Java类库的相关特性。对于想将Java应用于实际项目中的程序员来说,《Java核心技术——基础知识》修订版是一本权威性的指导书籍。对于Java SE 6平台的全部更新,这本实用的教程和可靠的参考书通过大量测试过的示例说明了最重要的语言特性和类库特性。示例程序经过精心地设计,不但具有实用价值,而且易读、易理解,可以作为自己编写程序的良好开端。.. 卷I试图让读者快速地了解Java SE 6的新特性,并帮助有效地从Java早期版本升级到最新版本,或从一种其他的语言变换为使用Java语言。作者十分注重Java语言的基本概念以及用户界面程序设计基础。下面是本卷详细介绍的主要内容: Java语言基础知识面向对象程序设计接口与内部类事件监听器模 Swing图形用户界面程序设计打包应用程序异常处理登陆与调试泛化程序设计集合框架多线程... 【作译者介绍】 本书提供作译者介绍 Cay S. Horstmann参与编写《Core JavaServer Faces》第2版(Prentice Hall, 2007)。Cay是圣何塞州立大学计算机科学系教授、Java的倡导者,并经常在计算机会议上讲演。. Cray Cornell已经编写并教授程序设计专业课程20余年,是Apress的创始人。他撰写的程序设计专业书籍十分畅销,是Jolt Award的最终获奖者之一,并通过Visual Basic资料赢得了Readers Choice。...
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>