1-17finally关键字
finally的特点
被finally控制的语句体一定会执行,除非在执行finally语句体之前JVM退出(比如System.exit(0)),一般用于关闭资源
finally如何使用?
finally语句块可以直接和try语句块联用:try….finally…(这种用的比较少)
也可以这样使用:try…catch….finally
package com.monkey1024.exception;
public class FinallyTest01 {
public static void main(String[] args) {
try {
System.out.println(1024 / 0);
} catch (ArithmeticException e) {
e.printStackTrace();
} finally{
System.out.println("finally中的内容");
}
}
}
即使在方法里面执行了return,finally中的代码也会执行
package com.monkey1024.exception;
public class FinallyTest02 {
public static void main(String[] args){
int i = m1();
System.out.println(i);
}
public static int m1(){
int i = 10;
try{
return i;
}finally{
System.out.println("finally中的语句");
}
}
}
只有当finally语句执行之前,JVM退出了,finally才不会执行:
package com.monkey1024.exception;
public class FinallyTest02 {
public static void main(String[] args){
int i = m1();
System.out.println(i);
}
public static int m1(){
try {
int i = 1024;//try里面的变量在外部是无法被访问的
System.exit(0);//让jvm退出,所以finally中的语句不会执行
return i;
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("finally中的语句");
}
return 10;
// System.out.println(i);无法访问i,因为i是在try中声明的
}
}
小练习
1.下面程序的打印结果是什么?
package com.monkey1024.exception;
public class FinallyTest03 {
public static void main(String[] args){
int i = m1();
System.out.println(i);
}
public static int m1(){
int i = 10;
try{
return i;
//这里没有catch,所以不用在后面写return了
}finally{
i++;
System.out.println("finally中的i=" + i);
}
}
}
2.final,finally和finalize的区别?
答案
1.程序在执行到return i时,会先将i赋给一个临时变量,return的是这个临时变量:int temp = i;return temp;,然后再执行finally中的语句,打印出了11,之后再执行main方法中的语句,打印出10。
2.这三个关键字其实没有什么关系,只不过在单词的拼写上面相似。
final
final可以修饰类,不能被继承
修饰方法,不能被重写
修饰变量,只能赋值一次
finally是try语句中的一个语句体,不能单独使用,语句体中的语句一定会执行
finalize是Object中的一个方法,当没有引用指向这个对象时,由对象的垃圾回收器在回收之前调用此方法。
1-17finally关键字的更多相关文章
- 作为一个新手的Oracle(DBA)学习笔记【转】
一.Oracle的使用 1).启动 *DQL:数据查询语言 *DML:数据操作语言 *DDL:数据定义语言 DCL:数据控制语言 TPL:事务处理语言 CCL:指针控制语言 1.登录 Win+R—cm ...
- JavaScript var关键字、变量的状态、异常处理、命名规范等介绍
本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...
- java面向对象中的关键字
1,super关键字 super:父类的意思 1. super.属性名 (调用父类的属性) 2. super.方法名 (调用父类的方法) 3. super([参数列表])(调用父类的构造方法) 注意: ...
- 关于javascript中的this关键字
this是非常强大的一个关键字,但是如果你不了解它,可能很难正确的使用它. 下面我解释一下如果在事件处理中使用this. 首先我们讨论一下下面这个函数中的this关联到什么. function doS ...
- transient关键字的用法
本篇博客转自 一直在路上 Java transient关键字使用小记 1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,Java ...
- Java关键字:static
通常,当创建类时,就是在描述那个类的外观和行为.只有用new创建类的对象时,才分配数据存储空间,方法才能被调用.但往往我们会有下面两种需求: 1.我想要这样一个存储空间:不管创建多少对象,无论是不创建 ...
- Core Java 总结(关键字,特性问题)
2016-10-19 说说&和&&的区别 初级问题,但是还是加入了笔记,因为得满分不容易. &和&&都可以用作逻辑与的运算(两边是boolean类型), ...
- Net中的常见的关键字
Net中的关键字有很多,我们最常见的就有new.base.this.using.class.struct.abstract.interface.is.as等等.有很多的,在这里就介绍大家常见的,并且有 ...
- php多关键字查询
php单一关键字查询 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 tdansitional//EN" "http: ...
- Keil> 编译器特有的功能 > 关键字和运算符 > __weak
__weak 此关键字指示编译器弱导出符号. 可以将 __weak 关键字应用于函数和变量声明以及函数定义. 用法 函数和变量声明 对于声明,此存储类指定一个 extern 对象声明,即使不存在,也不 ...
随机推荐
- Mac 上VitrualBox安装CentOS6.5 调整root分区的大小
安装centOS的时候由于选择了动态调整磁盘大小.所以分配磁盘空间的时候就没多想,直接用的default的8G,以为不够了自己会调整,没想到是个大坑 发现提示空间不足的时候root仅仅有0k了.... ...
- ACM在线题库
现在网上有许多题库,大多是可以在线评测,所以叫做Online Judge.除了USACO是为IOI准备外,其余几乎全部是大学的ACM竞赛题库. USACO http://ace.delos.com/u ...
- ORACLE数据库忘记SYS和SYSTEM密码,SYSTEM被锁定怎么办?
本人忘性太大,竟然将ORACLE的Sys用户和system用户密码搞忘,而且多次尝试登录system后,造成system被锁定. 经过一番尝试,终于解决.过程如下: 首先,重建sys密码文件.重建方式 ...
- Hadoop如何计算map数和reduce数
阅读本文可以带着下面问题: 1.map和reduce的数量过多会导致什么情况? 2.Reduce可以通过什么设置来增加任务个数? 3.一个task的map数量由谁来决定? 4.一个task的reduc ...
- ssh原理【转】
1 转自 http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html 2 ssh远程登陆的原理 普通用户远程登陆 ssh jason@ho ...
- 在Qt Creator中为Qt工程添加资源
1.右键单击工程 -> Add New ... -> Qt -> Qt Resource File -> Choose... -> Name: -> Next -& ...
- Spark理论学习笔记(一)
1.调度 分为FIFO和FAIR两种模式 创建调度池:sc.setLocalProperty("spark.scheduler.pool", "pool6") ...
- 星星dom
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>星星&l ...
- WPF之Binding深入探讨 转载:http://blog.csdn.net/fwj380891124/article/details/8107646
1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...
- 格式化磁盘,提示 is apparently in use by the system
一般是被mdadm占用着. 使用 cat /proc/mdstat 查看所有 找到欲格式化盘符号. 使用 mdadm --stop /dev/md0 mdadm --remove /dev/md0 ...