【3.0】异常

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

【3.0】异常的相关文章

Hibernate String index out of range 0 异常的一种情况

Hibernate String index out of range 0 异常 执行代码如下: 因为数据库有两个字段值是空 不是null ,所以hibernate抛出 String index out of range 0 异常

Django2.0异常:Specifying a namespace in include() without providing an app_name is not supported.

Django2.0异常:Specifying a namespace in include() without providing an app_name is not supported. 新建 模板 小书匠 欢迎使用 小书匠(xiaoshujiang)编辑器,您可以通过设置里的修改模板来改变新建文章的内容. Django2.0异常:Specifying a namespace in include() without providing an app_name is not supporte

【逆向知识】除0异常-编程与逆向

1.简介 重温编程和反调试的知识. 2.编程知识 整体界面长这个样子,然后拖控件,按钮点击事件. 按钮点击事件的函数编写 获取用户名与密码的值,然后取出用户名的最后一位判断是不是0,如果是0就进入判断函数内,否则就输出注册失败的提示. void CSehDlg::OnReg() { // TODO: Add your control notification handler code here CString strName; CString strCode; GetDlgItemText(ID

记Android R(SDK=30)系统执行UiAutomator1.0异常

最近Android发布了AndroidStudio 3.6稳定版,升级后明显能体验到好多细节的提升,最大的提升莫过于可以创建Android R预览版的模拟器了,并且模拟器可以设置多个尺寸的屏幕.Android R的xm6模拟器可以直接运行arm架构的程序,以后开发过程中再也不用为测试机担忧了.但是在执行UiAutomator1脚本时就存在了不兼容问题. 异常情况 但是在使用Android R模拟器进行开发工作中发现执行UiAutomator1.0脚本出现如下异常: Warning: This v

8.0 异常控制流 第8章 《深入理解计算机系统 原书第2版》

异常控制流 定义:现代操作系统对于控制流发生突变所作出的反应 全称:Exception Control Flow 缩写:ECF 各层形态: 1.硬件层:硬件检测到的事件会触发控制突然转移到异常处理程序: 2.操作系统层:在操作系统层,内核通过上下文转换,将控制从一个用户进程转移到另外一个用户进程: 3.应用层:一个进程可以发信号到另外一个进程,而接收者会将控制突然转移到它的一个信号处理程序. 描述:一个程序可以通过回避通常的栈规则,并执行到其他函数中任意位置的非本地跳转来对错误做出的反应. 工作

Ambiguous HTTP method Actions require an explicit HttpMethod binding for Swagger 2.0 异常

网上看了很多关于此异常的解决方案,但是大多数都是不能用的,今天把正确的解决方案记录下来,以帮助需要的人 问题:有些接口没有设置HttpPost或HttpGet,非接口设置访问权限为private,控制台可以看到报错位置为UserController.Info 接口错误示例: public object Get() { MongoDbContext dbContext = new MongoDbContext(); return new { API = true, Database = dbCon

Spring和CXF整合时报Unsupported major.minor version 51.0异常

好吧,官网上有写:The current plan is that CXF 3.1 will no longer support Java 6 and will require Java 7 or newer. Users are strongly encouraged to start moving to Java 7. http://fanshuyao.iteye.com/blog/2246409

【C/C++学院】0831-类与对象的异常/面试100题1-100

类与对象的异常 Cpp异常 #include <iostream> #include <string.h> using namespace std; //标识错误的类型 class wrong { }; int intdiv(int a, int b) { try { if (b==0) { throw 10;//能够是不论什么对象 wrong(); } int c = a / b; return c; } catch (int data )//类型名 { cout <<

python——异常类型

捕获异常try...except...finally...else python为高级语言,就是通过try...except...finally...else机制来处理错误. 让我们来看一下这段错误代码: 1 try: 2 print("try...") 3 s = 10/0 #异常,之后代码不执行 4 print("not run this code") 5 except ZeroDivisonError as e: #有错误执行一下语句 6 print(&quo

java.util.regex.PatternSyntaxException: Dangling meta character &#39;*&#39; near index 0

使用repalceAll 方法出现java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0异常 代码如下: 1 @Test 2 public void testReplaceAll(){ 3 String sql = "select * from per_handle where id not in('3ce7405509414105a65e7456987e7393')"; 4 St