《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 安装并启动 ...
随机推荐
- java中的IO操作
IO流是用来处理设备之间的数据传输,Java对数据的操作是通过流的方式进行,而操作流的对象都封装到java.io包中.根据操作数据的种类可以把IO流分为字节流(InputStream,OutputSt ...
- python迭代器
首先解释以下迭代器跟可迭代对象(Iterable)的区别,可以直接作用于for循环或者实现了__iter__的对象统称为可迭代对象(Iterable).可以被next()函数调用并不断返回下一个值的对 ...
- H5离线存储
如何使用 首先,我们建立一个html文件,类似这样: <!DOCTYPE html> <html lang="en" manifest="manifes ...
- 最佳的 14 个免费的响应式 Web 设计测试工具
一旦你决定要搭建一个网站就应该已经制定了设计标准.你认为下一步该做什么呢?测试!我使用“测试”这个词来检测你网站对不同屏幕和浏览器尺寸的响应情况.测试在响应式网页设计的过程中是很重要的一步.如果你明白 ...
- javascript 字符串总结
match():查找字符串中特定的字符,如果找到这个字符,则返回这个字符: indexOf():定位这个字符串中某一个指定的字符首次出现的位置: sub():把字符串显示为下标: sup():把字符串 ...
- 删除Kafka的topic
刚接触Kafka,开始认为删除一个topic只是运行一下Kafka-topic.sh的delete命令就行了,但是,事实却不是这样,会出现两种情况:(1) 如果topic没有使用过即没有传输过消息,可 ...
- volatile关键字及编译器指令乱序总结
本文简单介绍volatile关键字的使用,进而引出编译期间内存乱序的问题,并介绍了有效防止编译器内存乱序所带来的问题的解决方法,文中简单提了下CPU指令乱序的现象,但并没有深入讨论. 以下是我搭建的博 ...
- python【6】-函数式编程
一.高阶函数 map,reduce 1.map() 函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. def f(x): retur ...
- javascript和jquey的自定义事件小结
“通过事件机制,可以将类设计为独立的模块,通过事件对外通信,提高了程序的开发效率.” 可以把多个关联但逻辑复杂的操作利用自定义事件的机制灵活地控制好 对象之间通过直接方法调用来交互 1)对象A直接调用 ...
- JAVA 多线程随笔 (一) 可见性和volatile关键字
// 先上代码 1 public class NoVisibility { private static boolean ready; private static int number; priva ...