1.异常的分类和自定义异常:(参考该博文:http://blog.csdn.net/zhangliangzi/article/details/51290026)
2.非检查时时异常和检查时异常的区别(感谢博主:http://blog.csdn.net/swpihchj/article/details/8058129)
1.2检查型异常(CheckedException)
在Java中所有不是RuntimeException派生的Exception都是检查型异常。当函数中存在抛出检查型异常的操作时该函数的函数声明中必须包含throws语句。调用改函数的函数也必须对该异常进行处理,如不进行处理则必须在调用函数上声明throws语句。
检查型异常是JAVA首创的,在编译期对异常的处理有强制性的要求。在JDK代码中大量的异常属于检查型异常,包括IOException,SQLException等等。
1.3非检查型异常(UncheckedException)
在Java中所有RuntimeException的派生类都是非检查型异常,与检查型异常相对抛出非检查型异常可以不在函数声明中添加throws语句,调用函数上也不需要强制处理。
常见的NullPointException,ClassCastException是常见的非检查型异常。非检查型异常 可以不使用try...catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。对于RuntimeException的子类最好也使用异常处理机制。虽然RuntimeException的异常可以不使用try...catch进行处理,但是如果一旦发生异常,则肯定会导致程序中断执行,所以,为了保证程序再出错后依然可以执行,在开发代码时最好使用try...catch的异常处理机制进行处理。
3.自定义异常【为了更好的知道和表达异常信息】
参考博文:http://blog.csdn.net/u012110719/article/details/46391599
package 自定义异常; //或者继承RuntimeException(运行时异常) public class MyException extends Exception { private static final long serialVersionUID = 1L; // 提供无参数的构造方法 public MyException() { } // 提供一个有参数的构造方法 public MyException(String message) { super(message);// 把参数传递给Throwable的带String参数的构造方法 } }
package 自定义异常; public class CheckScore { // 检查分数合法性的方法check() 如果定义的是运行时异常就不用抛异常了 public void check(int score) throws MyException {// 抛出自己的异常类 if (score > 120 || score < 0) { // 分数不合法时抛出异常 throw new MyException("分数不合法,分数应该是0--120之间");// new一个自己的异常类 } else { System.out.println("分数合法,你的分数是" + score); } } }
package 自定义异常; import java.util.Scanner; /* * 自定义的异常测试类 */ public class Student { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int score = sc.nextInt(); CheckScore check = new CheckScore(); try { check.check(score); } catch (MyException e) {// 用自己的异常类来捕获异常 e.printStackTrace(); } } }
4.补充【自定义异常在项目中的应用】
package serialException; /*定义一个端口占用异常*/ public class PortInUse extends Exception { /** * */ private static final long serialVersionUID = 1L; public PortInUse() {} @Override public String toString() { return "端口已被占用!打开串口操作失败!"; } }
时间: 2024-10-18 00:32:02