《java异常的一些总结》
关于Java中异常的一些总结:
3 有些时候,程序在try块里打开了一些物理资源(例如数据库连接,网络连接、
4 和磁盘文件等),这些物理资源都必须显示回收。
5
6 注意:Java的垃圾回收机制不会回收任何物理资源,垃圾回收机制只能回收堆内存
7 中对象所占用的空间。
8
9 异常处理语法结构中只有try块是必须的,也就是说,如果没有try块,则不能有后面
10 的catch块和finally块;catch块和finally块都是可选的,但catch块和finally块
11 至少出现其中之一,也可以同时出现;可以有多个catch块,捕获父类异常的catch
12 块必须位于捕获子类异常的后面;但不能只有try块,既没有catch块(但是Java7的自动关闭
13 资源的try语句中可以只有try块,其实它也是包含了隐式的finally块),也没有finally
14 块;多个catch块必须位于try块后,finally块必须位于所有的catch块之后,
15
16 例如下面的程序:
package myclass;
import java.io.IOException;
import java.io.FileInputStream;
public class FinallyTest
{
public static void main(String[] args)
{
FileInputStream fis = null;
try
{
fis = new FileInputStream("a.txt");
}
catch (IOException ioe)
{
System.out.println(ioe.getMessage());
//return语句强制方法返回.
return; //(1)
//使用exit退出虚拟机.
//System.exit(0); //(2)
}
finally
{
if(fis != null)
{
try
{
fis.close();
System.out.println("文件已成功关闭");
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
System.out.println("执行finally块里的资源回收!");
}
}
} /*
运行上面的程序,结果如下:
a.txt (系统找不到指定的文件夹。)
执行finally块里的资源回收! 将(1)处的代码注释掉,取消(2)处的代码注释,运行程序结果如下:
a.txt (系统找不到指定的文件夹。) 因为在异常处理块catch中使用System.exit(0)语句退出了JVM,所以不会执行到finally块。 注意:除非在try catch块中调用了退出虚拟机的方法,否则不管在try块,catch块
中执行怎样的代码,出现怎样的情况,异常处理的finally块总会被执行。
在通常情况下,不要在finally块中使用如return或throw等导致方法终止的语句,
一旦在finally块中使用了return或throw语句,将会导致try块,catch块中的return
,throw语句失效,看下面的程序,输出结果为false
----------------------------------------------------------------------------
package myclass;
public class FinallyFlowTest
{
public static void main(String[] args)throws Exception
{
boolean a = test();
System.out.println(a);
}
public static boolean test()
{
try
{
return true;
}
finally
(
return false;
)
}
}
--------------------------------------------------------------------------- 下面讲解一下System.exit(0)和System.exit(1)的区别。
System.exit(0) 正常退出
System.exit(1) 或参数为“非0”非正常退出 但是 但是,“正常退出” 和 “非正常退出” 有什么区别?本人目前还不清楚。
*/
《java异常的一些总结》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- C#操作SQL Server数据库
http://www.cnblogs.com/rainman/archive/2012/03/13/2393975.html
- 离线更新VSAN HCL数据库
从VSAN 6.0起,VSAN提供了Health Check功能,其中就包括VSAN HCL数据库,通过此运行状况检查验证用于 HCL 检查的 VMware 兼容性指南数据库是否是最新的.这些 VCG ...
- mmorpg手游中的战斗系统
目前的项目是一款mmorpg手游, 非常不幸的是,当前战斗系统的实现非常脆弱, 也毫无技巧可言.具体存在如下问题: 1.战斗层逻辑与自动战斗AI逻辑混在一起, 互相纠缠. 2.战斗层自身逻辑混乱不堪, ...
- Sprint three
登录界面: 首页: 点餐界面: 查看购物车: 结账: 经历了一个月的时间,我们小组做出了我们的餐厅点餐系统APP.对于这次团队合作,我们的小组成员分工合作做出了我们的餐厅点餐系统APP,通过这次的项目 ...
- Hadoop集群配置过程中需要注意的问题
环境:VMwareWorkstation8.0 和 Ubuntu14.04 1. 使用三台虚拟机搭建Hadoop集群 2. 一定要在每台机器上配置ssh免密码登录 3. 由于需要给/etc/hosts ...
- css中左侧固定,右侧自适应
谈谈我开始出来工作时候的一道面试题吧 当初我记得在太平洋网络面试的时候,面试官给我出了这么一道题: 有一个外层的div 中间有左右两个div 要求左侧的div 1.只告诉你宽度; 2.只告 ...
- continue用法
之前,一直没搞懂continue的用法,现在知道其中一个了: continue语句用于终止本轮循环,返回循环头部,开始下一轮循环 var i = 0; while (i < 10){ i++; ...
- Jenkins构建时报错:No Space left on device
Jenkins在自动化构建服务的同时也在消耗服务器的磁盘空间,如果构建的项目个数很多,而Jenkins 服务器磁盘空间又不是非常大的话,每隔一段时间磁盘空间就会爆满导致,就会出现磁盘空间不足无法构建的 ...
- 文顶顶iOS开发博客链接整理及部分项目源代码下载
文顶顶iOS开发博客链接整理及部分项目源代码下载 网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程 ...
- ubuntu 终端快捷键
快捷键 功能Tab 自动补全Ctrl+a 光标移动到开始位置Ctrl+e 光标移动到最末尾Ctrl+k 删除此处至末尾的所有内容Ctrl+u 删除此处至开始的所有内容Ctrl+d 删除当前字符Ctrl ...