05.Java-异常处理-23/04/23&05/04

        如果由于程序的错误或一些外部因素的影响导致用户在运行程序期间所有工作统统丢失,这个用户可能再也不会使用该程序了,为了尽量避免这类事情的发生,要做到以下几点: 

        1.向用户通知错误

        2.保存好所有的工作

        3.允许用户妥善的退出程序

异常可以看作是一种对象

一、处理异常

        异常处理是一种用于处理程序中出现的异常情况的机制,它允许程序员在程序执行期间检测和响应错误,以便程序可以更可靠地运行。

注:要捕获那些你知道如何处理的异常,传播你不知道怎样处理的异常

1.异常分类:

        Exception(异常):

                Check Exception(检查异常):需要在代码中明确声明和处理,否则编译不通过。

                        例如,IOException、SQLException

                Unchechked Exception(非检查异常):则不需要在代码中明确声明和处理

                        例如,NullPointerException、ArrayIndexOutOfBoundsException

        Error(错误):是由Java虚拟机抛出的严重问题,一般不需要处理,程序员一般解决不了。

2.运行时异常与非运行时异常的区别

         RuntimeException 是非受检查异常,这意味着它可以在代码中不必显式地处理或抛出。这些异常通常是由程序员编程错误(如访问 null 指针或使用错误的算法)引起的。

        其他Exception 类都是受检查异常,必须在代码中显式地处理或者抛出。如果不处理或抛出,则编译器会报错。

  1. 运行时异常不需要显式地在代码中捕获并处理,可以由JVM自动抛出。

  2. 运行时异常通常由程序逻辑错误引起,应该通过改正代码逻辑来避免。

  3. 运行时异常不会影响程序的编译,只有在运行时才会抛出,因此更具灵活性。

3.Error与Exception的区别

        Exception 表示程序本身可以处理的异常情况,通常可以通过 try-catch 块或 throws 声明来处理它们。

        Error 表示程序本身无法处理的错误,通常意味着程序运行时出现了致命的问题,无法恢复,需要进行紧急处理。

 4.异常处理器: 

        可以使用try-catch块来捕获和处理异常。try块包含可能抛出异常的代码,catch块用于捕获并处理特定类型的异常。如果try块中的代码抛出异常,程序的执行流程将跳转到与该异常类型匹配的catch块中。

        如果try语句块中的任何代码抛出了catch子句中指定的一个异常类,那么

        1.程序将跳过try语句块中的其他代码

        2.程序将执行catch子句中的处理器代码

        如果try语句块中的代码没有抛出任何异常,那么程序将跳过catch子句

        如果方法中抛出了catch子句中没有声明的一个异常类型,那么这个方法就会立即退出

try {
    // 可能会抛出异常的代码
} catch (ExceptionType1 e1) {
    // 处理 ExceptionType1 类型的异常
} catch (ExceptionType2 e2) {
    // 处理 ExceptionType2 类型的异常
} finally {
    // 在任何情况下都会执行的代码
    //finally块通常用于释放资源或执行清理操作,例如关闭文件或网络连接。
}

5.抛出异常:

        在Java中,可以使用throw关键字来抛出异常。当异常被抛出时,程序的执行流程将跳转到与该异常类型匹配的catch块中。

if (x < 0) {
    throw new IllegalArgumentException("x must be non-negative");
    //如果x小于0,将抛出一个IllegalArgumentException类型的异常,
    //并将异常信息设置为"x must be non-negative"。
}

        throws:表示抛异常,使用在方法上,提醒调用者该方法可能出现哪些异常

        语法:访问修饰符 返回值 方法名() throws 异常类型{}

throw与throws的区别:
  • throw用于在方法体中抛出一个异常对象,而throws用于方法签名中声明该方法可能抛出的异常类型。
  • throw是一个语句,可以在方法体中的任何位置使用;而throws是方法签名的一部分,必须在方法名和方法体之间声明。
  • throw可以抛出自定义的异常对象或Java内置的异常类型对象,但throws只能声明已有的异常类型,不能自定义新的异常类型。

6.创建异常类

有时可能遇到任何标准异常类都无法描述清楚的问题,这时就需要创建自己的异常类。

        语法:

class 异常类名 extends 父类名{
    public 异常类名() {}
    public 异常类名(String gripe){
        super(gripe)
    }
}

7.分析堆栈轨迹元素

查看异常信息:printStackTrace

stack trace为堆栈轨迹

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar=63141:/Applications/IntelliJ IDEA CE.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/cat.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/crs-agent.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/rt.jar:/Users/shenglei/Library/Mobile Documents/com~apple~CloudDocs/💻Code/🍀/i/out/production/i Task1 Exception in thread "main" java.lang.IllegalArgumentException: Error decoding percent encoded characters at sun.net.www.ParseUtil.decode(ParseUtil.java:216) at sun.misc.URLClassPath$FileLoader.<init>(URLClassPath.java:1366) at sun.misc.URLClassPath$3.run(URLClassPath.java:574) at sun.misc.URLClassPath$3.run(URLClassPath.java:569) at java.security.AccessController.doPrivileged(Native Method) at sun.misc.URLClassPath.getLoader(URLClassPath.java:568) at sun.misc.URLClassPath.getLoader(URLClassPath.java:533) at sun.misc.URLClassPath.getNextLoader(URLClassPath.java:498) at sun.misc.URLClassPath.getResource(URLClassPath.java:252) at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:363) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:362) at java.lang.ClassLoader.loadClass(ClassLoader.java:419) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352) at java.lang.ClassLoader.loadClass(ClassLoader.java:352) at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:304) at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401) FATAL ERROR in native method: processing of -javaagent failed 进程已结束,退出代码134 (interrupted by signal 6: SIGABRT)
06-06

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值