异常处理(一):java中的那套异常,和.net大同小异

.net常见异常类

System.Object 

   System.Exception 

    System.SystemException

ApplicationException

 

 1SystemException:该类是System命名空间中所有其他异常类的基类。(建议:公共语言运行时引发的异常通常用此类)

     2ApplicationException类:该类表示应用程序发生非致命错误时所引发的异常(建议:应用程序自身引发的异常通常用此类)

 

java异常类层次图:

java.lang.Object

  java.lang.Throwable

      java.lang.Exception

       java.lang.RuntimeException

   java.lang.CheckedException

   java.lang.Error
 

Throwable类是 Java语言中所有错误或异常的超类

Error:表示由JVM所侦测到的无法预期的错误,由于这是属于JVM层次的严重错误,导致JVM无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。

Exception:可捕捉到的,进而对其进行处理的异常

Java提供了两类主要的异常:runtime exceptioncheckedexceptionchecked 异常也就是我们经常遇到的IO异常,以及SQL异常都是这种异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch。所以,面对这种异常不管我们是否愿意,只能自己去写catch块去处理可能的异常。

    但是另外一种异常:runtime exception,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。

 

为什么要捕获异常

把程序从异常中恢复出来,比如避免服务终止,事务回滚等。

出现异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。

  如果不想终止,则必须扑捉所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而影响下面对正常数据的处理。

 

捕获异常,打印错误信息,记录程序运行日志信息。

 

抛出特定异常或者捕获异常,可以显示给用户指定错误页面。

 

声明式

简单,不灵活

 

根据特定异常类别,跳到指定错误页

xml配置

<error-page>

<exception-type>com.java.drp.util.ApplicationException</exception-type>

<location>/error.jsp</location>

</error-page>

 

如果没有手动捕获,遇到异常时就会跳到错误页。错误页加入isErrorPage="true",才可以使用jsp隐含对象exception

 

error.jsp

<%@page contentType="text/html;charset=GB18030"%>

<%@ page isErrorPage="true"%>

 

<html>

<head>

<title>错误信息!</title>

</head>

<body>

<center>

<tablewidth="500">

<tr>

<tdalign="center">

<palign="left">

<spanclass="STYLE1">错误信息:</span>

</td>

</tr>

</table>

<hr>

<tablewidth="500">

<tr>

<td>

<%=exception.getMessage()%></td>

</tr>

<tr>

<tdalign="center" colspan="2">

<p>

<inputtype="button" name="goback" value="返回"

onClick=javascript:history.go(-1);>

</td>

</tr>

</table>

</center>

</body>

</html>

 

根据异常错误码(404500等),跳到指定错误页

xml配置

<error-page>

<error-code>404</error-code>

<location>/http_error.jsp</location>

</error-page>

<error-page>

<error-code>500</error-code>

<location>/http_error.jsp</location>

</error-page>

iebug,使用跳转

 

http_error.jsp

<%@page language="java" import="java.util.*"pageEncoding="GB18030"%>

<html>

  <head>

    <title>My JSP 'http_error.jsp'starting page</title>

  </head>

 

  <body>

    <%

           Integer errorCode =(Integer)request.getAttribute("javax.servlet.error.status_code");

           if(errorCode == 404){

                   response.sendRedirect(request.getContextPath()+ "/404.jsp");

           } else if (errorCode ==500){

                   response.sendRedirect(request.getContextPath()+ "/500.jsp");

           }

    %>

  </body>

</html>

 

 

编程式

几种处理方式

  1. 根据每种业务语义创建不同的异常,如:UserNotFoundException
  2. 每层抛出相应的异常,如:DaoExceptionServiceException
    1. Dao层异常最好不要直接抛给用户,最好由业务层转换成用户理解的异常再抛出。如果dao向上抛SQLException或者FileExceptionManager就知道了具体信息,所以不管发生啥,只抛DaoException;同样,Manager只抛ServiceExceptionServlet
  1. 每个模块抛出一种异常,如:SysMgrException
  2. 只抛出一种异常,如:AppException
  3. 错误码可以做到异常细粒度划分,采用错误码可以减少异常类的建立,参见:java.sql.SQLException



各个语言有各自的一套异常处理机制,基础上大同小异。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
对一堆大同小异的 PDF 文档提取指定的有用信息,可以使用 Apache PDFBox 库进行自动化处理。下面是一个简单的例子,演示如何使用 PDFBox 提取多个 PDF 文件的指定信息: ```java import java.io.File; import java.io.IOException; import java.util.List; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.text.PDFTextStripper; public class PdfBoxTest { public static void main(String[] args) throws IOException { // 指定要提取的信息 String regex = "Name:\\s*(.*)\\s*Age:\\s*(\\d+)\\s*"; // 指定 PDF 文件所在文件夹 String folderPath = "pdfs/"; // 遍历文件夹的所有 PDF 文件 File folder = new File(folderPath); File[] files = folder.listFiles((dir, name) -> name.endsWith(".pdf")); for (File file : files) { // 加载 PDF 文件 PDDocument document = PDDocument.load(file); // 创建一个 PDFTextStripper 对象 PDFTextStripper stripper = new PDFTextStripper(); // 获取 PDF 文件的文本内容 String text = stripper.getText(document); // 在文本内容查找指定信息 String name = null; int age = 0; String[] lines = text.split("\\r?\\n"); for (String line : lines) { line = line.trim(); if (line.matches(regex)) { name = line.replaceAll(regex, "$1"); age = Integer.parseInt(line.replaceAll(regex, "$2")); break; } } // 输出提取的信息 System.out.println(file.getName() + ": Name = " + name + ", Age = " + age); // 关闭 PDF 文件 document.close(); } } } ``` 该程序会遍历指定文件夹的所有 PDF 文件,提取每个文件的指定信息,并输出到控制台。其,使用正则表达式来匹配 PDF 文件的文本内容,提取所需信息。可以根据实际需求修改正则表达式,提取不同的信息。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值