关于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异常的一些总结》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. springmvc的foward和redirect跳转简单解析

    Spring MVC 中,我们在返回逻辑视图时,框架会通过 viewResolver 来解析得到具体的 View,然后向浏览器渲染.假设逻辑视图名为 hello,通过配置,我们 配置某个 ViewRe ...

  2. iOS —— 字典遍历排序

    字典NSDictionary一般的遍历方法都是: NSArray* arr = [yourdictonary allKeys]; for(NSString* str in arr) { NSLog(& ...

  3. JSON数据源提供多值参数的实现

    一.应用场景 (1)报表的数据内容需要根据某个参数进行过滤. (2)该参数是一个多值参数,即从一个下拉列表中选择一个或多个项目. (3)报表需要自动运行,因此参数必须有默认值. (4)参数默认值无法在 ...

  4. adaboost原理与实践

    Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器).其算法本身是通过改变数据分布来实现的,它根据 ...

  5. logistic原理与实践

    逻辑回归模型是一种将影响概率的不同因素结合在一起的指数模型,得到的是0~1之间的概率分布.自变量范围是,值域范围限制在0~1之间.在搜索广告.信息处理和生物统计中有广泛的应用.例如搜索广告的点击率预估 ...

  6. Lua 与 Redis

    Lua 与 Redis 标签: Java与NoSQL 从 2.6版本 起, Redis 开始支持 Lua 脚本 让开发者自己扩展 Redis - 案例-实现访问频率限制: 实现访问者 $ip 在一定的 ...

  7. Java之流程控制语句

    一.Java条件语句(if...else)    ifelse语法:                                              多重if语法:              ...

  8. js中this的使用

    this是Javascript语言的一个关键字. 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如, function test(){ this.x = 1; } 随着函数使用场合的 ...

  9. 让Git记住用户名和密码

    user/username/.gitconfig [credential] helper = store

  10. linux php redis 扩展安装

    安装redis服务端 1 进入软件的下载路径 cd /soft wget http://download.redis.io/redis-stable.tar.gz tar -zxvf redis-st ...