网站建设及解析流程,哪个网站做脚本,网站制作与建设教程下载,网站建设jsThrowable(所有error和exception的父类:超类)Java将错误变成对象交给异常处理机制Error(仅靠程序本身无法恢复的严重错误)一般是环境的问题#xff0c;JVM的问题#xff0c;并非程序的问题#xff1b;最典型的就是虚拟机中运行的程序过多#xff0c;造成的虚拟机内存溢出JVM的问题并非程序的问题最典型的就是虚拟机中运行的程序过多造成的虚拟机内存溢出虚拟机错误还有系统崩溃之类的应用程序是无法处理此类错误的。Error不在我们调试代码可以处理的范围中。AWTErrorThreadDeath... ...Exception(由java应用程序抛出和处理的非严重型错误)Checked异常(检查时异常)程序必须处理的异常(代码调用调用方声明有风险)SQLExceptionClassNotFoundException......例如文件调用I/O 有可能找不到的风险对于以上的文件读取可能发生的异常我们有两种处理方式1. 抛出继续往上抛2. 现场处理这个异常运行时异常不要求程序必须对它们做出处理(运行时才能抛出异常)RuntimeException(运行时错误)NullPointerException对象没有被初始化生成的NumberFormatExceptionArrayIndexOutOfBoundsException数组越界错误......ArithmeticExecption数学异常(类似除零错误)Java中的异常处理是通过5个关键字来实现的捕获try 执行可能产生异常的代码Catch异常捕获Finally无论是否发生异常总能执行的代码抛出Throw手动抛出异常Throws声明方法可能要抛出的各种异常使用try、catch、finally的三种情况1.程序正常运行(不经过catch)2.程序发生异常经过catch且异常匹配3.程序发生异常但是不能被catch和catch的不匹配如果出现不能被catch那么程序就会报错将异常往上抛抛给JVM。上面讲的是一段代码只有一种异常的最简单的情况更多的时候一段代码不止一种异常这里的try中有多行代码可能出现的异常有多种数学异常String字符串的空指针异常在try中如果出现了异常时会在catch中寻找对应可以解决的catch块但是如果将exception放在三个catch的最前面就会报错因为exception是所有异常的超类出现异常必然会进入到exception中后面的两个catch就会失效了使用throw和throws在java本身的语法中就是对异常执行抛出的动作java本身的语法 会把异常一层一层的往上抛方法中出现了异常则会把异常抛给调用它的主函数主函数无法解决就会把异常再次往上抛出最后抛到JVM导致JVM死掉。使用throws抛出的运行时异常相当于提示调用者该方法有风险至于是否处理该风险由调用者决定如果throws抛出的是检查时异常那么调用者自己就必须在调用的时候进行处理(利用try ... catch)当然通过throws可以同时抛出多个异常.------------------------------异常案例------------------------------------packagejavaexception;publicclassExceptionTest1{publicstaticvoidmain(String[]args){WorkerworkernewWorker();try{worker.work(11);}catch(Exceptione){DoctordoctornewDoctor();try{doctor.cure(worker);System.out.println(治好了);}catch(Exceptione1){System.out.println(die);}}}}classWorker{privatebooleanalivetrue;publicbooleanisAlive(){returnalive;}publicvoidsetAlive(booleanalive){this.alivealive;}//工作的方法publicvoidwork(intcount)throwsException{if(count10){thrownewException(生病);}else{System.out.println(正常工作);}}}classDoctor{publicvoidcure(Workerworker)throwsException{intt(int)(Math.random()*10000);if(t4512){worker.setAlive(false);thrownewException(death);}else{worker.setAlive(true);}}}--------------------------------------------运行时异常捕获特别提醒在try... catch... finally中 finally最好不省略因为finally是保证程序是否发生异常都必须执行的代码(即使我们在try块中强行return之后finally中依然会执行)(例如我们在I/O流里面必须做的关闭操作就应该放在finally中)||需要强调的是唯一能终止finally执行的操作就是System.exit(0);及其它相关类似操作这一类操作是直接终止程序的运行关闭JVM。如果在finally中发生异常的话照样也会程序中断因为没有人处理这个异常。抛出Throw表示手动抛出一个异常throws是声明该方法可能会抛出的异常(运行时异常调用者不用必须处理只是知道这里会抛出这样一个异常)检查时异常捕获printStackTrace是打印异常堆栈但是一般我们不建议打印异常堆栈(IDE工具里JVM默认生成的)具体问题具体处理一层一层的打印堆栈是比较耗性能的。抛出如果抛出的是检查时异常那么就必须被处理要么在手动抛出的地方立马用try catch进行处理要么继续往上抛抛给调用这个方法的方法或者主函数如下例