Java基础系列--throw、throws关键字
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8484697.html
一、概述
throw和throws就是异常相关的关键字,在java中异常机制是一个非常重要的机制,我们需要重点掌握。
既然说到了异常,简单描述下异常机制很有必要,这也对后文的讲述提供前提。
二、Java异常机制
在Java中表示异常的接口是Exception,与其同一层次的还有一个Error接口,用于描述不可挽回的系统级错误,它们两个都继承自Throwable接口,这个接口是所有异常和错误的超接口。
在Java中只有Throwable的实例才能在虚拟机或者java代码中被抛出,一切想要抛出的异常都必须作为Throwable的子类。
异常又分为两种,一种是受检异常,另一种是未受检异常。
受检异常是Java内部定义的一系列异常类,它们都实现了Exception接口,这些异常必须被手动捕捉或者手动抛出,否则无法通过编译,处于强制处理异常,属于编译期异常。
未受检异常则是一些可以不进行捕捉的异常,这些异常一般是由运行时逻辑引发,这些异常可以不捕捉,也可以进行捕捉或抛出,如果未进行捕捉、抛出处理,那么一旦运行时引发了这些异常,那么会被JVM直接处理,它包括运行时异常和Error。
运行时异常是典型的未受检异常,Java内部为我们提供了一部分这类型异常,其中最常见的空指针异常就属此类。
其实正确的做法是尽可能的对异常进行捕捉处理。
三、throw作用
异常的抛出需要使用throw关键字,抛出的是一个异常对象,一般我们采用下面的方式进行抛出
throw new NullPointerException();
再结合try...catch语句,或者if语句进行组合使用,将可能的异常抛出。
有时候我们使用try...catch语句的catch块中加入throw语句,可以将一个受检异常转化为一个未受检异常。
四、throws作用
当我们没有条件在当前的方法中进行某个异常的处理时,可以在方法声明处抛出,在这里抛出异常将被调用者捕捉处理,或者再次抛出,多个异常可用逗号隔开。
public void test()throws NullPointerException,ParseException{ }
----------------------------------------
以下内容来自(http://blog.csdn.net/luoweifu/article/details/10721543)
五、异常习惯
好的编程习惯:
1.在写程序时,对可能会出现异常的部分通常要用try{...}catch{...}去捕捉它并对它进行处理;
2.用try{...}catch{...}捕捉了异常之后一定要对在catch{...}中对其进行处理,那怕是最简单的一句输出语句,或栈输入e.printStackTrace();
3.如果是捕捉IO输入输出流中的异常,一定要在try{...}catch{...}后加finally{...}把输入输出流关闭;
4.如果在函数体内用throw抛出了某种异常,最好要在函数名中加throws抛异常声明,然后交给调用它的上层函数进行处理。
Java基础系列--throw、throws关键字的更多相关文章
- [ 原创 ] Java基础9--final throw throws finally的区别
final修饰的类不可被继承,final修饰的方法可以被继承但不能被重写(覆盖) final用于可以声明属性和方法,分别表示属性的不可变及方法的不可覆盖.不是方法的不可继承 throw是用来明确地抛出 ...
- 夯实Java基础系列4:一文了解final关键字的特性、使用方法,以及实现原理
目录 final使用 final变量 final修饰基本数据类型变量和引用 final类 final关键字的知识点 final关键字的最佳实践 final的用法 关于空白final final内存分配 ...
- Java基础系列--static关键字
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8477914.html 一.概述 static关键字是Java诸多关键字中较常使用的一个,从 ...
- 夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!
目录 目录 string基础 Java String 类 创建字符串 StringDemo.java 文件代码: String基本用法 创建String对象的常用方法 String中常用的方法,用法如 ...
- 夯实Java基础系列9:深入理解Class类和Object类
目录 Java中Class类及用法 Class类原理 如何获得一个Class类对象 使用Class类的对象来生成目标类的实例 Object类 类构造器public Object(); register ...
- 夯实Java基础系列10:深入理解Java中的异常体系
目录 为什么要使用异常 异常基本定义 异常体系 初识异常 异常和错误 异常的处理方式 "不负责任"的throws 纠结的finally throw : JRE也使用的关键字 异常调 ...
- 夯实Java基础系列15:Java注解简介和最佳实践
Java注解简介 注解如同标签 Java 注解概述 什么是注解? 注解的用处 注解的原理 元注解 JDK里的注解 注解处理器实战 不同类型的注解 类注解 方法注解 参数注解 变量注解 Java注解相关 ...
- Java基础系列-ArrayList
原创文章,转载请标注出处:<Java基础系列-ArrayList> 一.概述 ArrayList底层使用的是数组.是List的可变数组实现,这里的可变是针对List而言,而不是底层数组. ...
- 夯实Java基础系列11:深入理解Java中的回调机制
目录 模块间的调用 多线程中的"回调" Java回调机制实战 实例一 : 同步调用 实例二:由浅入深 实例三:Tom做题 参考文章 微信公众号 Java技术江湖 个人公众号:黄小斜 ...
随机推荐
- 数据库的Connection、Cursor两大对象
Python 数据库图解流程 Connection.Cursor比喻 Connection()的参数列表 host,连接的数据库服务器主机名,默认为本地主机(localhost). user,连接数据 ...
- 2000 ASCII码排序
声明:从今天开始每周至少做七道杭电ACM题,锻炼思考能力. 2000 ASCII码排序 Problem Description 输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符. ...
- 自定义导航栏 tabBarController 笔记
#import "LeeNavigationController.h" @interface LeeNavigationController () @end @implementa ...
- python基础自学 第二天
注释 分类 单行注释 多行注释 作用 使用自己熟悉的语言,在程序中对某些代码进行标注说明,增强程序可读性 单行注释(行注释) 以 # 开头,#右边所有的东西就被当成说明文字,而不是要执行的程序,只是说 ...
- Redis-03.事务
Redis事务: 在一个队列(queue)中依次执行一系列的命令. 事务的三个阶段: 1.开始事务(MULTI) 2.命令加入队列 (QUEUE) 3.执行事务 (EXEC) 示例1: MULTI & ...
- Windows 10 IoT Serials 11 – 如何设置微软认知服务中EndPoint
1.问题描述 在UWP应用开发过程中,如果要使用微软认知服务,很多开发者会使用Microsoft.Oxford.Face.Microsoft.Oxford.Vision的NuGet包来完成.如果在vi ...
- 背水一战 Windows 10 (121) - 后台任务: 推送通知
[源码下载] 背水一战 Windows 10 (121) - 后台任务: 推送通知 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 推送通知 示例演示如何接收推送通知/WebA ...
- Python selenium webdriver设置js操作页面滚动条
js2 = "window.scrollTo(0,0);" #括号中为坐标 当不知道需要的滚动的坐标大小时: weizhi2 = driver.find_element_by_id ...
- php安全编程&python测试实例编写
前言 本文首发i春秋论坛. 本篇文章主要分享一个python暴破脚本,该脚本采用optparse模块,支持自定义字典位置:用了多线程(虽然我感觉和单线程速度差不多..是我的错觉还是线程写的不对..求表 ...
- puppetdb搭建
puppetdb搭建 在agent端跑puppet agent -t 正常的情况下,安装puppetdb 部署postgresql数据库 部署puppetdb 建立puppetserver与puppe ...