java不求有功,但求无过—异常处理

java不求有功,但求无过—异常处理

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

   在程序开发中,错误往往有两种。一种是编译时出现的错误,该种错误比較easy发现。还有一种是执行时出现的错误,该种错误是开发者比較头疼的。异常就是一个执行时的错误,比如,除数为0 ,数组越界等。 


   异常处理,就是我们定义一个代码段(可能出错的代码段)来捕获和处理异常。 这样当异常情况发生时,一个代表该异常的对象会被创建,并在产生异常的方法中被引发。该方法能够选择自己处理异常,也能够抛出该异常,但不管是哪种,终于异常都会被处理。  

比例如以下面的代码:

import java.io.*;


public class TestEx{
	public static void main(String[] args){
		int[] arr= {1,2,3};
		System.out.println(arr[2]);
		try{
			System.out.println(2/0);
		} catch(ArithmeticException ae){
			System.out.println("系统正在维护,请稍候!");
			ae.printStackTrace();//错误的堆栈信息
		}
	}
}


   当中 
System.out.println(2/0); 则是我们可能出现错误的代码段。
Catch 中我们自定义异常出错的对象,即ae ,一旦出现错误就被初始化。

   System.out.println(“系统正在维护,请稍候!”);

   ae.printStackTrace();

则是我们对捕获到的异常做出的处理 。

异常的分类 :



java不求有功,但求无过—异常处理



如上图,Throwable 是全部异常的父类。  在它之下有两个子类,Error和Exception。

   Error: 是指系统错误,比如虚拟机错误,不能被处理。 

   Exception: 可以处理的异常 
   RuntimeException:能处理但不处理,比如除数为0 ; 数组下标越界

   java异常处理keyword


   Try:意思就是试试它包括的代码段中是否会发生异常。
   catch:捕捉的意思,就是有异常发生时进行捕获,并进行对应的处理。 
       Try 和catch的关系能够是1对1 ,也能够是多对多 ;catch的出现必须有try。
   Finally:因为try块中代码段出现异常时,不被运行。可是有时候我们希望不管异常是否发生,某段代码都被运行,比如释放分配中的资源时。

FileInputString in = null;
        try{
                in = new FileInputStream("myfile.txt");
                int b; 
                b = in.read();
                while (b !=-1){
                        System.out.println((char) b);
                        b = in.read();
                }
                
        }catch (FileNotFoundException e){
        
                System.out.println(e.getMessage());
                
        }finally{
        
                try {
                        in.close();
                        
                } catch(IOException e){
                
                        e.printStackTrace();
                }
        }
        


   getMessage和printStackTrace两个方法用于输出异常信息。 前者用于获得异常信息的字符串,后者能够将方法调用堆栈中的打印信息出来,方便程序猿測试。 


   使用自己定义的异常

private int getTotalRecords(Connection conn)throws SQLException
	{
		String sql = "select count(*) from t_user where user_id <> 'root'";
		PreparedStatement pstmt = null; 		
		ResultSet rs = null;	
		int count = 0;
		try{
			pstmt =conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			rs.next();
			count = rs.getInt(1);
		}finally{
			DBUtil.close(rs);
			DBUtil.close(pstmt);
		}
		return count;
	}


}



   说明:
定义一个getTotalRecords 的方法,并用throws语句说明能够跑出用户自己定义的异常类SQLException。 

throws是用来声明一个方法可能抛出的全部异常信息

throw则是指抛出的一个详细的异常类型。

   通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个详细的异常信息。

   总结:人生道路不可能是那么的一帆风顺的。就好像你开车去旅行的时候,也许你会碰到你车子哪个零部件坏了,引发了Error异常。也也许是前面有大石头挡着你的去路,引发了 Exception异常。遇到这样的情况,你有两种选择,一是你自己找个大的木棍把它撬走。二是打电话交给管理道路的人员处理。可是事实上你在旅行的道路中,还会遇到非常多非常多的小石子,这就相当于是RuntimeException,可是我们不可能一个个的去处理这些小石子,由于工作过于繁杂。

   总的来说,引入异常处理机制,能够方便我们开发者调试; 保证程序在出现异常情况下能正确运行,提高程序的健壮性 。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/118916.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mysql 取消外键约束_主键约束和外键约束什么意思

    mysql 取消外键约束_主键约束和外键约束什么意思**Mysql中取消外键约束**Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构。解决方法是在Mysql中取消外键约束:SETFOREIGN_KEY_CHECKS=0;然后将原来表的数据导出到sql语句,重新创建此表后,再把数据使用sql导入,然后再设置外键约束:SETFOREIGN_KEY_CHECKS=1;…

    2022年10月21日
  • MySQL的JDBC连接

    MySQL的JDBC连接MySQL的JDBC连接MySQL的JDBC概念MySQL的JDBCJDBC添加数据封装连接工具更新数据和事务删除数据查询数据MySQL的JDBC概念JDBC是JavaDatabaseConnective的缩写,表示使用Java去连接数据库进行数据操作的过程MySQL的JDBC创建动态项目-以eclipse为例,首先要创建动态项目连接开发包(在www.mvnrepositor…

  • [新详细]让Keil5续签到2032年的办法,不可商用

    [新详细]让Keil5续签到2032年的办法,不可商用使用方法和以前的版本一样,MDK或者C51以及ARM等均适用,软件来自网络,如有纠纷请留言。仅供学习与参考,商业用途请购买正版。非新手,直接看文章最后流程打开你的Keil主页面,添加证书激活的位置在File→LicenseManagement复制CID将CID复制进软件,通过Target选择你用的类型,复制后,点击Generate计算出新的licenseID码复制…

  • verilog和vhdl区别大吗_verilog hdl和vhdl的区别

    verilog和vhdl区别大吗_verilog hdl和vhdl的区别这两种语言都是用于数字电路系统设计的硬件描述语言,而且都已经是IEEE的标准。VHDL1987年成为标准,而Verilog是1995年才成为标准的。这是因为VHDL是美国军方组织开发的,而Verilog是由一个公司的私有财产转化而来。为什么Verilog能成为IEEE标准呢?它一定有其独特的优越性才行,所以说Verilog有更强的生命力这两者有其共同的特点:能形式化地抽象表示电路的行为和结构;支持逻辑设计中层次与范围地描述;可借用高级语言地精巧结构来简化电路行为和结构;支持电路描述由高层到低层

  • pycharm 2021.9激活码_最新在线免费激活

    (pycharm 2021.9激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlS32PGH0SQB-eyJsaWNlbnNlSW…

  • CSS 下拉菜单_下拉菜单html

    CSS 下拉菜单_下拉菜单html使用CSS创建一个鼠标移动上去后显示下拉菜单的效果。

    2022年10月23日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号