网站虚拟空间过期,wordpress flash加载,区域信息网站怎么做,wordpress 会员权限目录
1、异常体系介绍
1.1、异常是什么?
1.2、运行时异常和编译时异常的区别?
2、异常的用法 2.1、捕获异常
2.2、异常中的常见方法
2.3、抛出异常
2.4、自定义异常 1、异常体系介绍
1.1、异常是什么? java异常是指在程序运行时可能出现的一些错误#xff0c;如如文件找不到、网络连接失败、非法参数等。异常是一个事件它发生在程序运行期间中断了正在执行的程序的正常指令流。Java通过API中Throwable类的众多子类描述各种不同的异常。因而Java异常都是对象是Throwable子类的实例描述了出现在一段编码中的错误条件。当条件生成时错误将引发异常。 简单来说异常就是程序中可能出现的问题。 Java异常类层次结构图 Java所有异常类都是 Throwable的子类两个重要的子类是Error 和 Exception ErrorError及其子类用来描述Java运行系统中的内部错误以及资源耗尽的错误代表的系统级别错误是程序无法处理的错误这属于严重问题系统一旦出现这种问题Java虚拟机JVM一般会选择线程终止。 Exception这类异常可以通过捕捉处理使程序继续执行是程序自身可以处理的异常也称为非致命性异常类。根据错误发生原因可分为运行时异常RuntimeException和除RunTimeException之外的编译时异常 就是说异常与错误是有区别的异常可以通过程序自身捕捉处理而错误是程序自身无法处理的。 1.2、运行时异常和编译时异常的区别? 运行时异常RuntimeException本身和其子类运行时异常在编译阶段没有错误提示因为Java编译器不会检查它当程序中出现这类异常时也会编译通过在运行时这类异常才会出现错误提示一般是由于参数传递错误带来的问题 编译时异常这类异常是没有继承RuntimeExcpetion的异常直接继承于Excpetion在编译阶段需要进行处理然后就会错误提示作用在于提醒程序员 程序中应当尽可能去处理这两种异常 异常的作用 1异常是用来查询bug的关键参考信息 2异常可以作为方法内部的一种特殊返回值以便通知调用者底层的执行情况 2、异常的用法 2.1、捕获异常
捕获异常书写格式: try { //可能出现异常的代码 } catch异常类名 变量名{ //异常的处理代码; } finally { //不管前面的try有没有捕获到异常被finally控制的语句一定会执行除非IVM退出 } 捕获异常的目的当代码出现异常时可以让程序继续往下执行。 捕获异常示例
在下面代码中的try中写了一条有数组越界异常的代码然后用catch去捕获异常看看之后的代码会不会继续执行
public static void main(String[] args) {int[] arr {1,3,2,4,5};try {System.out.println(arr[10]);//此处出现了异常程序就会在这里创建一个ArrayIndex0utOfBoundsException对象//new ArrayIndexOutofBoundsException();//拿着这个对象到catch的小括号中对比看括号中的变量是否可以接收这个对象1//如果能被接收就表示该异常就被捕获(抓住)执行catch里面对应的代码//当catch里面所有的代码执行完毕继续执行try...catch体系下面的其他代码} catch (ArrayIndexOutOfBoundsException e) {//如果出现了ArrayIndex0utOfBoundsException异常我该如何处理System.out.println(索引越界了);}System.out.println(看看我执行了吗);
}
运行结果 捕获异常时的各种情况 1如果try中没有遇到问题系统会把try里面所有的代码全部执行完毕不会执行catch里面的代码。注意只有当出现了异常才会执行catch里面的代码 2如果try中遇到多个问题要写多个catch与之对应并且如果我们要捕获多个异常这些异常中如果存在父子关系的话那么父类一定要写在下面。了解在JDK7之后我们可以在catch中同时捕获多个异常中间用 | 进行隔开表示如果出现了A异常或者B异常的话采取同一种处理方案 3如果try中遇到的问题没有被捕获相当于try...catch的代码白写了最终还是会交给虚拟机进行处理。 4如果try中遇到了问题那么下面的代码就不会执行了直接跳转到对应的catch当中执行catch里面的语句体但是如果没有对应catch与之匹配那么还是会交给虚拟机进行处理。 2.2、异常中的常见方法 Throwable 的成员方法 方法名称 说明 public String getMessage返回此 throwable 的详细消息字符串 public string toString返回此可抛出的简短描述 public void printStackTrace把异常的错误信息输出在控制台 注意仅仅是打印出错误信息并不会停止程序运行 方法示例
public String getMessage和 public string toString示例
public static void main(String[] args) {int[] arr {1,3,2,4,5};try {System.out.println(arr[10]);} catch (ArrayIndexOutOfBoundsException e) {String message e.getMessage();System.out.println(message);//打印 Index 10 out of bounds for length 5String str e.toString();System.out.println(str);//打印 java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 5//e.printStackTrace();}System.out.println(看一下我执行了没有);
} 结果 public void printStackTrace示例
public static void main(String[] args) {int[] arr {1,3,2,4,5};try {System.out.println(arr[10]);} catch (ArrayIndexOutOfBoundsException e) {e.printStackTrace();}System.out.println(看一下我执行了没有);
} 结果 扩展用System.err.println打印出来的信息是红色的
//正常的输出语句
System.out.println(123);
//错误的输出语句(而是用来打印错误信息)
System.err.println(123); 2.3、抛出异常 抛出异常处理有两种方式是throw 和 throws throws 注意写在方法定义处表示声明一个异常 告诉调用者使用本方法可能会有哪些异常 public void 方法throws 异常类名1异常类名2 . . . { . . . } 编译时异常必须要写运行时异常可以不写。 throw 注意写在方法内结束方法 手动抛出异常对象交给调用者 方法中下面的代码不再执行了 public void 方法{ throw new NullPointerException; } 示例
public static void main(String[] args) {// 需求:// 定义一个方法求数组的最大值int[] arr {};int max 0;try {max getMax(arr);} catch (NullPointerException e) {System.out.println(数组空指针异常);} catch (ArrayIndexOutOfBoundsException e) {System.out.println(数组索引越界异常);}System.out.println(max);
}public static int getMax(int[] arr) {if (arr null) {//手动创建一个异常对象并把这个异常交给方法的调用者处理//此时方法就会结束下面的代码不会再执行了throw new NullPointerException();}if (arr.length 0) {//手动创建一个异常对象并把这个异常交给方法的调用者处理//此时方法就会结束下面的代码不会再执行了throw new ArrayIndexOutOfBoundsException();}int max arr[0];for(int i1; iarr.length; i) {if (max arr[i]) {max arr[i];}}return max;
}
2.4、自定义异常 自定义异常书写步骤 1定义异常类 2写继承关系 3空参构造 4带参构造 自定义异常定义时取名意义就是为了让控制台的报错信息更加的见名之意 示例
自定义异常NameFormException
public class NameFormException extends RuntimeException{//技巧://NameFormat:当前异常的名字表示姓名格式化问题//Exception:表示当前类是一个异常类//运行时:自定义的异常就继承 RuntimeException 核心 就表示由于参数错误而导致的问题//编译时:自定义的异常就继承 Exception 核心 提醒程序员检查本地信息public NameFormException() {}public NameFormException(String message) {super(message);}
}
自定义AgeOutOfBoundsException
public class AgeOutOfBoundsException extends RuntimeException{public AgeOutOfBoundsException() {}public AgeOutOfBoundsException(String message) {super(message);}
}
定义Student类如果在给属性name和age赋值时数据不符合要求时就抛出相应的自定义异常
public class Students {private String name;private int age;public Students() {}public Students(String name, int age) {this.name name;this.age age;}public String getName() {return name;}public void setName(String name) {int len name.length();if (len 3 || len 10) {throw new NameFormException(name 格式有误名字长度应为3~10);}this.name name;}public int getAge() {return age;}public void setAge(int age) {if (age 18 || age 40) {throw new AgeOutOfBoundsException(age 超出18~40这个范围);}this.age age;}public String toString() {return student{ name name , age age };}
}
测试类Test
public class Test {public static void main(String[] args) {//1.创建键盘录入的对象ScannerScanner sc new Scanner(System.in);//2.创建学生的对象Students stu new Students();while (true) {try {System.out.println(请输入学生姓名);String name sc.nextLine();stu.setName(name);System.out.println(请输入学生年龄);String ageStr sc.nextLine();int age Integer.parseInt(ageStr);stu.setAge(age);//如果所有的数据都是正确的那么跳出循环break;} catch (NumberFormatException e) {e.printStackTrace();} catch (NameFormException e) {e.printStackTrace();} catch (AgeOutOfBoundsException e) {e.printStackTrace();}}System.out.println(stu);}
} 推荐
【计算机网络】DHCP原理与配置-CSDN博客https://blog.csdn.net/m0_65277261/article/details/136230649?spm1001.2014.3001.5501
【数据结构】二叉查找树和平衡二叉树以及二者的区别_二叉查找树和其他二叉树的区别-CSDN博客https://blog.csdn.net/m0_65277261/article/details/136137098?spm1001.2014.3001.5501
【数据结构】前缀树的模拟实现-CSDN博客https://blog.csdn.net/m0_65277261/article/details/136086068?spm1001.2014.3001.5501