备案网站打不开,php 7 wordpress,计算机网络技术专业,有公网ip 如何做一网站try#xff0c;Catch异常处理详解 一、异常分类概述二、什么是try-catch异常处理机制及其使用格式格式1格式2格式3 三、try、catch使用实例实例异常处理机制注意事项 三、finally使用实例finally概述以下是几种比较特殊的情况#xff0c;看看在这些情况下finally是否会被执行… tryCatch异常处理详解 一、异常分类概述二、什么是try-catch异常处理机制及其使用格式格式1格式2格式3 三、try、catch使用实例实例异常处理机制注意事项 三、finally使用实例finally概述以下是几种比较特殊的情况看看在这些情况下finally是否会被执行案例1案例2案例3 一、异常分类概述 其中Error是指改变代码无法改变的异常比如内存溢出通常需要对硬件进行改变才能解决比如要增加电脑的内存。
受检异常是指在编译的时候能检查出的一些问题。
非受检异常则是必须要在程序运行的时候才可能出现的异常比如输入有误要求输入int却输入了字符串两个数字相除却把除数设置为0。
二、什么是try-catch异常处理机制及其使用格式
try-catch是一种针对程序运行时出错的响应手段对于一些可以预料到的出错类型在发生时对其进行报告和补救。 其使用流程如下首先执行try中的语句如果try中的语句报错了那么就转入对应的catch语句中执行处理异常的措施catch后的中的内容是对应的错误类型。 其使用的格式如下
格式1
try{ //可能出错的代码1 //可能出错的代码2 //… }catch(异常类型1){ //这里可以使用System.out.println语句报错 //也可以针对这种异常的处理方式 }catch异常类型2{ //同上 }
格式2
try{ //可能出错的代码1 //可能出错的代码2 //… }catch(异常类型1|异常类型2){ //这里可以使用System.out.println语句报错 //也可以针对这种异常的处理方式 }catch异常类型2{ //同上 }
格式3
try{ //可能出错的代码1 //可能出错的代码2 //… }catch(RuntimeException e){//运用了java中多态的思想所有RuntimeException均在此处理 //这里可以使用System.out.println语句报错 //也可以针对这种异常的处理方式 }catch异常类型2{ //同上 }
三、try、catch使用实例
实例
功能选择菜单输入1,2,3选择所需的功能代码如下示例 public static int menu() {System.out.println(请输入需要执行的功能\n1.aaaaa\n2.bbbbb\n3.ccccc);Scanner in new Scanner(System.in);try {int num in.nextInt();if (num 0 || num 3) {//必须是1~3这三个数字中的一个System.out.println(请输入0,1,2,3这几个数字);//报错return menu();//递归调用menu相当于重新开始}return num;} catch (InputMismatchException a) {//输入格式出错System.out.println(输入数字);return menu();}}异常处理机制注意事项
主函数代码 public static void main(String[] args) {menu();System.out.println(程序执行完毕);}在程序的运行过程中如果出现了异常但是异常被catch所处理那么程序还是会继续执行一直到程序结束也就是会打出“程序执行完毕”但如果遇到没有catch的异常程序则会直接终止不执行System.out.println(“程序执行完毕”)这条语句。
三、finally使用实例
finally概述
finally是必然会执行的异常统一出口无论异常是否发生finally中的内容一定是会被执行的。
以下是几种比较特殊的情况看看在这些情况下finally是否会被执行
案例1
功能选择菜单输入1,2,3选择所需的功能代码如下示例
package Yichang;
public class Test_trycatch {public static void main(String[] args) {test();}static void test(){try{System.out.println(1);System.out.println(2);System.out.println(3);return;}catch (Exception e){}finally {System.out.println(执行finally);}}
}在这段代码中程序没有进入异常看起来程序在执行了try块的return后就结束了那么 finally有没有执行呢 来看运行结果 实际上finally中的内容还是执行了 因为return之后其实程序还没有结束这时要准备一个返回值即使是void函数没有返回值那也当成返回一个没有返回值的返回值在准备返回值到程序真正结束的这段时间里finally中的内容被执行了。
案例2
主函数代码
package Yichang;
public class Test_trycatch_finally2 {public static void main(String[] args) {Person p test();System.out.println(p.age);}static class Person{int age;}static Person test(){Person p new Person();try{p.age 18;return p;}catch(Exception e){return null;}finally {p.age 99;}}
}这里没有发生异常try块中的代码执行后返回了age为18的p然后finally里虽然改变了age但是没有返回所以按照这种思路输出结果应该是18 然而实际的输出结果是 因为return执行时复制了一个pp作为引用指向person的实例在finally改变了实例之后p引用指向的依然是这一块age为99的实例然后程序真正结束因此输出99。
案例3
主函数代码
package Yichang;public class Test_trycatch_finally2 {public static void main(String[] args) {int a test();System.out.println(a);}static int test(){int a 0;try{a 18;return a;}catch(Exception e){return 0;}finally {a 99;}}}将案例2中的返回值从对象Person改成int输出结果
这里由于返回值不再是指针因此在try块中复制了一个值为10 的int的后在finally对原像a的改变并不会对被复制的int造成改变因此输出18.