java中final、finally、finalized使用方法
首先需要明白 final和finally是关键字,finalize是一个方法。
1. final关键字
final可以修饰类、方法、变量,
- 修饰类表示类不可以被继承
- 修饰方法表示此方法不可以被重写(覆盖)但是可以被重载
- 修饰变量表示变量不可变(引用不可变--也就是不可以重新指向另一个对象,但是引用内容可以变),而且static final 经常用作常量处理。
package cn.qlq.fina;
/**
* final 关键字使用
* @author Administrator
*
*/
public class TestCla { private static final int a = 1; private static final User u = new User();; public static void main(String[] args) {
// a = 2;// final修饰的变量不可改变(引用不可变) // u=new User();//引用不可变,不可再指向其他对象,但是引用内容可以改变 u.setUsername("sssssss");
u.setUsername("XXXXXXX");
} public void test1(final int x ){
// x=1;//final修饰的变量不可改变,方法上的形参也不可以变
}
}
2.finally的使用:---通常用于try..catch..之后关闭一些IO流等操作
try语句没有被执行,如在try语句之前就返回了,这样finally语句就不会执行;因此说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。
如果在try代码块中执行System.exit(0)语句;那么将终止Java虚拟机JVM,因此,finally语句也不会被执行到。
finally块的语句在try或catch中的return语句执行之后返回之前执行且finally里的修改语句可能影响也可能不影响try或catch中return已经确定的返回值,如果返回值类型为传址类型,则影响;传值类型,则不影响。若finally里也有return语句则覆盖try或catch中的return语句直接返回。
测试代码:
package cn.qlq.test; /**
*
* @author Administrator
*
*/
public class MyTest { public static final int i = 6; @SuppressWarnings("finally")
public static long test1() {
String val = "5d";
long value = 5;
try {
value = Long.parseLong(val);
} catch (NumberFormatException e) {
System.out.println("catch...");
return value++;
} finally {
System.out.println("finally...");
value--;
return value;
}
} public static void main(String[] args) {
System.out.println(MyTest.test1());
}
}
结果:
catch...
finally...
5
3.finalize()析构方法的使用
finalize()在JVM回收对象的时候会调用该对象的此方法,用于垃圾回收的时候处理一些事情。
package cn.qlq.test; /**
*
* 测试finalize()方法,对象消亡的时候调用的方法,类似于C++的析构函数
* @author Administrator
*
*/
public class MyTest { public static final int i = 6; @Override
protected void finalize() throws Throwable {
System.out.println("对象要死亡");
}
@SuppressWarnings("finally")
public long test1() {
String val = "5d";
long value = 5;
try {
value = Long.parseLong(val);
} catch (NumberFormatException e) {
System.out.println("catch...");
return value++;
}finally {
System.out.println("finally...");
value--;
return value;
}
} public static void main(String[] args) {
MyTest my = new MyTest();
System.out.println(my.test1());
my = null;//清空对象的引用,使其被垃圾回收
System.gc();//调用GC回收垃圾
}
}
结果:
catch...
finally...
5
对象要死亡
java中final、finally、finalized使用方法的更多相关文章
- java中final关键字的使用方法
[java中为什么会有final变量]: final这个关键字的含义是"这是无法改变的"或者"终态的": 那么为什么要阻止改变呢? java语言的发明者可 ...
- [面试题]java中final finally finalized 的差别是什么?
final 是修饰符,能够用于修饰变量.方法和类.修饰变量时.代表变量不能够改动,也就是常量了.常量须要在定义时赋值或通过构造函数赋值,两者仅仅能选其一:修饰方法时,代表方法仅仅能调用,不能被 ove ...
- Java 中extends与implements使用方法
Java 中extends与implements使用方法 标签: javaclassinterfacestring语言c 2011-04-14 14:57 33314人阅读 评论(7) 收藏 举报 分 ...
- Java中的equals和hashCode方法
本文转载自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要 ...
- Java中final的作用
Java中Final可以被用于变量,方法,类.具体来说: 1, Final 变量 修饰主类型时,制定变量为常数,不希望被改变 修饰类类型时,表示变量的句柄不变,不能被指定指向新的变量 修饰参数时,参数 ...
- Java中各种(类、方法、属性)访问修饰符与修饰符的说明
类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所 ...
- 深刻理解Java中final的作用(一):从final的作用剖析String被设计成不可变类的深层原因
声明:本博客为原创博客,未经同意,不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(原文链接为http://blog.csdn.net/bettarwang/article/det ...
- java中final的意义
1.如果一个数据既是static又是final,那么它会拥有一块无法改变的存储空间. 2.final data: 当final用于基本数据类型时,final让其值(value)保持不变,但是当用于ob ...
- Java中的equals和hashCode方法详解
Java中的equals和hashCode方法详解 转自 https://www.cnblogs.com/crazylqy/category/655181.html 参考:http://blog.c ...
- Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能
Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能. 下面是个例子: import org.junit.Test; import java. ...
随机推荐
- C++ 派生类构造函数和析构函数
几个问题 一个类的各数据成员的构造顺序? 按他们在类定义中出现的先后顺序:先定义者先构造. 类的对象成员的构造函数与类自身的构造函数的执行顺序? 先执行对象成员的构造函数,再执行类自身的构造函数. 构 ...
- Daily Scrum NO.2
工作概况 符美潇(PM) 昨日完成的工作 1.Daily Scrum.日常会议及日常工作的分配和查收. 2.为两名团队新成员制定了任务并录入TFS. 今日工作 1.Daily Scrum.日常会议及日 ...
- javascript 函数的几种声明函数以及应用环境
本页只列出常用的几种方式,当然还有比如new Function()以及下面三种的组合. 1.函数式声明 例子:function sum(a,b){ return a+b; }; 2.函数表达式声明(匿 ...
- 2013 C#单元测试
首先安装Unit Test Generator. 点击拓展和更新——>联机搜索Unit Test Generator 新建项目 新建一个测试类 add函数 选定test 类名 ——>右键 ...
- 动态规划刷题集python代码
1 爬楼梯(Fibonacci) #有一楼梯共M级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? def fun(m): c = [0]*m c[0] = 1 c[1] = 2 for i ...
- php 中间件
PHP ::双冒号,意为静态成员的访问形式. 中间件$request 速查表:
- Beta冲刺——day4
Beta冲刺--day4 作业链接 Beta冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602134 王龙 ...
- memcache安装以及php_memcache.dll 扩展安装
php_memcache.dll扩展下载地址:http://windows.php.net/downloads/pecl/releases/memcache/3.0.8/ 下载注意事项:选择匹配自己环 ...
- python学习:python的星号(*)和双星号(**)用法
原帖地址见:[Python]-12-星号变量的特殊用法 在Python中,星号除了用于乘法数值运算和幂运算外,还有一种特殊的用法"在变量前添加单个星号或两个星号",实现多参数的传入 ...
- thnkphp框架面试问题
Thinkphp面试问题 1.如何理解TP中的单一入口文件? 答:ThinkPHP采用单一入口模式进行项目部署和访问,无论完成什么功能,一个项目都有一个统一(但不一定是唯一)的入口.应该说,所有项目都 ...