[Java]关于throw,throws,try{}catch(){}

一、异常的产生
1. 在java代码中,如果发生异常,JVM就会中断程序代码的运行,然后创建异常对象并抛出。例如:
int a=2, b=0;
int i=a/b;  //除数不能为0,发生异常
System.out.println(i);
程序会在执行第2行代码时中断,并抛出异常,导致后面的代码无法执行。
2. 但是,有些情况程序员认为是异常的,而在JVM看来却是正常的,比如说:
int age;
age = -100;
System.out.println(age);
对于JVM来说,这只是正常的赋值语句,但在我们眼中这就不正常了,谁的年龄会是负的呢。
所以,在这种情况下我们就需要自己手动创建并抛出异常,这就需要用到throw了:
int age;
age = -100;
if (age<0)
{
Exception e = new Exception("Age Exception");  //创建异常对象
  throw e;  //抛出异常
}
System.out.println(age);
注:JVM创建的异常对象会由JVM自动抛出,而程序员创建并抛出的对象必须通过throws或try{}catch(){}进行相应处理。
二、异常的处理
当异常发生后就要作相应处理,常用的处理手法有throws和try{}catch(){}:
1. 定义一个方法时如果使用throws,如:
public void someMethod() throws Exception
{
//do something
}
就表示该方法可能抛出某种异常,那么该方法的调用者就必须处理该方法抛出的异常,可以继续使用throws抛出或者使用try{}catch(){}捕捉,如果异常被抛到顶层都没有捕捉就会将异常信息显示于顶层(控制台或页面);
2. 如果在一段代码中使用try{}catch(){},如:
public void someMethod()
{
try
{
int a=2, b=0;
int i=a/b;  //除数不能为0,发生异常,try{}块中止运行
System.out.println(i); //无法执行
}
catch(Exception e)
{
System.out.println("发生异常!");  //捕捉到异常并处理
}
System.out.println("我仍然继续!");  //正常执行 
}
当try{}块中的代码产生异常时,try{}块中的代码就会中断运行,并由catch(){}块捕捉到产生的异常并作相应处理,而 try{}catch(){}后面的代码仍可正常执行。但是,一般不要简单地捕捉顶层的Exception,因为Exception是所有异常的父类,包 括RuntimeException,简单捕捉Exception会将所有类型的Exception全部捕捉,这样不利于异常处理。
当可能发生的异常不止一种时,如:SQLException, IOException,有两种catch方式:
(1)SQLException, IOException无论catch哪种都进行统一处理,如:
try{}
catch(SQLException se, IOException ie)  //不推荐
{
//do something
}
(2)分开处理,如:
try{}
catch( IOException ie)
{
//do something
}
catch(SQLException se)
{
//do something
}
在(2)中,如果两种异常属于继承关系,则应按继承关系中从子到父的顺序进行处理,如:
try{}
catch( IOException ie)
{
//do something
}
catch(Exception e)
{
//do something
}
因为IOException继承自Exception,Exception包含IOException,所以,如果将 catch(Exception e){}放到前面就会连IOException一起catch,这样后面的catch(IOException ioe){}就变得毫无意义。
另外,由于Java有垃圾回收器,所以异常处理并不需要处理内存的回收问题,但是依然有一些资源需要程序员来处理,比如文件、网络连接和图片等 资源,这种情况可以在try{}catch(){}后加上finally{}块进行程序的清理工作,无论try{}块中有没有发生异 常,finally{}块中的代码都一定会被执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PL/SQL Developer 9 注册机

软件下载&#xff1a;下载 注册机下载&#xff1a;下载 说明&#xff1a;测试版本--9.0.1.1613&#xff08;无需替换文件&#xff0c;输入注册信息即可&#xff09; 附图&#xff1a; 转载于:https://www.cnblogs.com/zhanqi/archive/2011/10/12/2208750.html

程序图片运行效果存在偏差问题

2019独角兽企业重金招聘Python工程师标准>>> 当图片放到高分辨率的文件夹下&#xff0c;运行程序的手机却是低分辨率时就会出现该问题。解决办法很容易&#xff0c;就是把图片换个文件夹。比如图片放到drawable-xhdpi下&#xff0c;而模拟器是480*800&#xff0c;图…

如何将android例子程序添加到Eclipse进行调试运行

website&#xff1a;http://blog.csdn.net/whwzm88/article/details/6342583 1、打开Eclipse,选择File->new->Android Project,如附图所示窗口: 2、选择Create project from existing source单选框,然后点击->Browse..., 找到想要查看的android例子目录: 备注&…

计算几何——圆卡精度cf1059D

double 在1e17以后就不能顾及小数&#xff0c;所以用一下加精度的技巧 sqrt(r*r-d*d)sqrt(rd)*sqrt(r-d) 遇到误差在几位以内的注意要修改二分的精度&#xff0c;用最大的数据去乘以精度即可 #include<bits/stdc.h> using namespace std;const double esp 1e-7; const d…

坦克大战 Java版

由于博客开通不久&#xff0c;以前没有博客&#xff0c;顺便把以前做的项目也介绍下 希望大家支持&#xff0c;谢谢 坦克大战 IDE&#xff1a;MyEclipse 9.0 语言&#xff1a;Java SE 数据库&#xff1a;由于是单机版&#xff0c;不需要较高的安全性&#xff0c;且数据量较小&a…

c# 扩展方法奇思妙用高级篇五:ToString(string format) 扩展

在.Net中&#xff0c;System.Object.ToString()是用得最多的方法之一&#xff0c;ToString()方法在Object类中被定义为virtual&#xff0c;Object类给了它一个默认实现&#xff1a; 1 publicvirtualstringToString()2 {3 returnthis.GetType().ToString();4 }.Net中原生的class…

MFC中OnDraw与OnPaint的区别

OnPaint是WM_PAINT消息的消息处理函数&#xff0c;在OnPaint中调用OnDraw&#xff0c;一般来说&#xff0c;用户自己的绘图代码应放在OnDraw中。 OnPaint()是CWnd的类成员&#xff0c;负责响应WM_PAINT消息。OnDraw()是CVIEW的成员函数&#xff0c;没有响应消息的功能.当视图变…

Windows Internet

网址:http://baike.baidu.com/view/560670.htm WinInet 求助编辑百科名片 WinInet&#xff08;“Windows Internet”&#xff09;API帮助程序员使用三个常见的Internet协议&#xff0c;这三个协议是用于World Wide Web万维网的超文本传输协议&#xff08;HTTP&#xff1a;Hyper…

PHP使用CURL抓取页面

cURL的基本原理 curl是利用URL语法在命令行方式下工作的开源文件传输工具&#xff0c;他能够从互联网上获得各种各样的网络资源。简单来说&#xff0c;curl就是抓取页面的升级版。 <?php//1.初始化&#xff0c;创建一个新cURL资源$ch curl_init(); //2.设置URL和相应的选…

Lync Server 2010迁移至Lync Server 2013故障排错 Part3 :内外网共享PPT提示证书问

最近在公司生产环境中部署Lync Server 2013并对公网发布后&#xff0c;发现公网未加域客户端在与内网用户共享PPT时&#xff0c;会报证书错误&#xff0c;如下图所示&#xff1a;但是内网是正确的&#xff0c;经过查询了一下Lync 客户端自身的日志信息后发现&#xff0c;公网客…

用WinInet开发Internet客户端应用指南

一&#xff1a;http://www.vckbase.com/document/viewdoc/?id545 二&#xff1a;http://www.vckbase.com/document/viewdoc/?id546 用WinInet开发Internet客户端应用指南&#xff08;一&#xff09; 编译/NorthTibet 一、概述一个Internet客户端程序的目的是通过Internet…

WebService的基本概念:java webservice,什么是webservice

WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求&#xff0c;轻量级的独立的通讯技术。 这种技术允许网络上的所有系统进行交互。随着技术的发展&#xff0c;一个Web服务可以包含额外的指定功能并且可以在多个B2B应用中协作通讯。 Web服务可以理解…

掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...

掌握常见的内部排序方法&#xff08;插入排序&#xff0c;冒泡排序&#xff0c;选择排序&#xff0c;快速排序&#xff0c;堆排序&#xff0c;希尔排序&#xff0c;归并排序&#xff0c;基数排序等&#xff09;。数组高级以及Arrays(掌握)排序方法空间复杂度时间复杂度稳定性插…

关于Android错误 View requires API level 14 (current...

2019独角兽企业重金招聘Python工程师标准>>> 问题描述&#xff1a;在界面配置文件main.xml中&#xff0c;可能用上某些控件&#xff08;例如GridLayout&#xff09;遇上下面所说的错误:View requires API level 14(current min is 8), 但将项目clear后&#xff0c;再…

socket-select函数

最近在用socket编程&#xff0c;用到select函数&#xff0c;于是上网查找资料&#xff0c;如下这篇是讲的比较详细易懂的&#xff1a;Select在Socket编程中还是比较重要的&#xff0c;可是对于初学Socket的人来说都不太爱用Select写程序&#xff0c;他们只是习惯写诸如 connect…

javascript 基础 转

最近面试过一些人, 发现即使经验丰富的开发人员, 对于一些基础的理论和细节也常常会模糊. 写本文是因为就我自己而言第一次学习下面的内容时发现自己确实有所收获和感悟. 其实我们容易忽视的javascript的细节还有更多, 本文仅是冰山一角. 希望大家都能通过本文有所斩获.一. Jav…

从表到里学习JVM实现

在社会化分工、软件行业细分专业化的趋势下&#xff0c;会真的参与到底层系统实现的人肯定是越来越少&#xff08;比例上说&#xff09;。真的会参与到JVM实现的人肯定是少数。但如果您对JVM是如何实现的有兴趣、充满好奇&#xff0c;却苦于没有足够系统的知识去深入&#xff0…

2019春第二次课程设计实验报告

2019春第二次课程设计实验报告 一、实验项目名称 用数组实现反弹球消砖块 二、实验项目功能描述 利用键盘按键控制小球方向让小球碰到挡板后反弹上去消除砖块。 三、项目模块结构介绍 四、实现界面展示 五、代码托管链接 https://gitee.com/huangxuannn/events 六、实验总结 上…

[SharePoint 2010] Client Object Model 跨时区查询list item的方法

SharePoint将所有的Datetime类型的数据都以universal的形式(UTC)存储在数据库中&#xff0c;当要在页面上显示类似list item的"Created", "Modified"等时间日期信息时&#xff0c;将数据库中的UTC时间取出来&#xff0c;然后根据当前Site的Regional Settin…

Linux下静态库和动态库的编译连接

http://blog.sina.com.cn/s/blog_4090ba590100t3nu.html .a文件 gcc -c test.c ar rc libtest.a test.o ranlib libtest.a 静态库只要编译出.o文件然后用ar打入包中就可以 动态库或共享库不用libtool工具&#xff1a; gcc -fpic -o test.o -c test gcc -shared -o te…