finalize一,final, finally, finalize的区别

finalize  时间:2021-07-16  阅读:()

Java中的finalize()方法

回收integer,要调用integer的finalize()方法。

你这里重写的是Gctest的finalize(),自然不会调用。

自己定义个对象,重写它的finalize(),再试试。

而且System.gc();只是通知jvm,回不回收完全看人家心情,就是调用了也未必会执行,要想看效果可加一下这句System.runFinalization()。

finalize是什么意思

finalize 英 [?fa?n?la?z] 美 [?fa?n??la?z] vt. 完成; 使结束; 使落实 vi. 定案; 把…最后定下来 网络 结束; 方法; 定妥 第三人称单数: finalizes 现在分词: finalizing 过去式: finalized 过去分词: finalized

java中的final, finally, finalize的区别,越详细越好

这是一道再经典不过的面试题了,我们在各个公司的面试题中几乎都能看到它的身影。

final、finally和finalize虽然长得像孪生三兄弟一样,但是它们的含义和用法却是大相径庭。

这一次我们就一起来回顾一下这方面的知识。

我们首先来说说final。

它可以用于以下四个地方: 定义变量,包括静态的和非静态的。

定义方法的参数。

定义方法。

定义类。

我们依次来回顾一下每种情况下final的作用。

首先来看第一种情况,如果final修饰的是一个基本类型,就表示这个变量被赋予的值是不可变的,即它是个常量;如果final修饰的是一个对象,就表示这个变量被赋予的引用是不可变的,这里需要提醒大家注意的是,不可改变的只是这个变量所保存的引用,并不是这个引用所指向的对象。

在第二种情况下,final的含义与第一种情况相同。

实际上对于前两种情况,有一种更贴切的表述final的含义的描述,那就是,如果一个变量或方法参数被final修饰,就表示它只能被赋值一次,但是JAVA虚拟机为变量设定的默认值不记作一次赋值。

被final修饰的变量必须被初始化。

初始化的方式有以下几种: 在定义的时候初始化。

在初始化块中初始化。

在类的构造器中初始化。

静态变量也可以在静态初始化块中初始化。

通过下面的代码可以验证以上的观点: Java代码 public class FinalTest { public final int A = 10; // 在定义时初始化 public final int B; B=20; // 在初始化块中初始化 public static final int STATIC_C = 30; // 静态常量,在定义时初始化 public static final int STATIC_D; // 静态常量,在静态初始化块中初始化 static { STATIC_D = 40; } public final int E; public static int STATIC_F; // 在构造器中初始化 public FinalTest() { E = 50; // 静态变量也可以在构造器中初始化 STATIC_F = 60; // 给final的变量第二次赋值时,编译会报错 // A = 99; // STATIC_C = 99; } // 静态变量不能在初始化块中初始化 // public static final int STATIC_G; // { // STATIC_G = 70; // } // final变量未被初始化,编译时就会报错 // public final int H; // 静态final变量未被初始化,编译时就会报错 // public static final int STATIC_I; } 我们运行上面的代码之后出了可以发现final变量(常量)和静态final变量(静态常量)未被初始化时,编译会报错;另外还可以发现,静态final变量可以在构造器中初始化,却不可以在初始化块中初始化。

用final修饰的变量(常量)比非final的变量(普通变量)拥有更高的效率,因此我们在实际编程中应该尽可能多的用常量来代替普通变量,这也是一个很好的编程习惯。

当final用来定义一个方法时,会有什么效果呢?正如大家所知,它表示这个方法不可以被子类重写,但是它这不影响它被子类继承。

我们写段代码来验证一下: Java代码 class ParentClass { public final void TestFinal() { System.out.println("父类--这是一个final方法"); } } public class SubClass extends ParentClass { /** * 子类无法重写(override)父类的final方法,否则编译时会报错 */ // public void TestFinal() { // System.out.println("子类--重写final方法"); // } public static void main(String[] args) { SubClass sc = new SubClass(); sc.TestFinal(); } } 这里需要特殊说明的是,具有private访问权限的方法也可以增加final修饰,但是由于子类无法继承private方法,因此也无法重写它。

编译器在处理private方法时,是按照final方法来对待的,这样可以提高该方法被调用时的效率。

不过子类仍然可以定义同父类中的private方法具有同样结构的方法,但是这并不会产生重写的效果,而且它们之间也不存在必然联系。

一,final, finally, finalize的区别

1、final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。

因此一个类不能既被声明为 abstract的,又被声明为final的。

将变量或方法声明为final,可以保证它们在使用中不被改变。

被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。

被声明为final的方法也同样只能使用,不能重载。

finally—再异常处理时提供 finally 块来执行任何清除操作。

如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

finalize—方法名。

Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。

这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。

它是在 Object 类中定义的,因此所有的类都继承了它。

子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。

finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

2、匿名的内部类是没有名字的内部类。

不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3、Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。

Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。

注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 4、&是位运算符,&&是布尔逻辑运算符而且是短路与操作符。

5、都属于Map接口的类,实现了将惟一键映射到特定的值上。

HashMap 类没有分类或者排序。

它允许一个 null 键和多个 null 值。

Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。

它也比 HashMap 慢,因为它是同步的。

6、Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。

Collection是个java.util下的接口,它是各种集合结构的父接口。

GeorgeDatacenter:洛杉矶/达拉斯/芝加哥/纽约vps云服务器;2核/8GB/250GB/2TB流量/1Gbps端口,$84/年

georgedatacenter怎么样?GeorgeDatacenter是一家2017年成立的美国商家,正规注册公司(REG: 10327625611),其实是oneman。现在有优惠,有几款特价VPS,基于Vmware。支持Paypal付款。GeorgeDatacenter目前推出的一款美国vps,2核/8GB内存/250GB NVMe空间/2TB流量/1Gbps端口/Vmware/洛杉矶/达拉...

RAKsmart:美国圣何塞服务器限量秒杀$30/月起;美国/韩国/日本站群服务器每月189美元起

RAKsmart怎么样?RAKsmart是一家由华人运营的国外主机商,提供的产品包括独立服务器租用和VPS等,可选数据中心包括美国加州圣何塞、洛杉矶、中国香港、韩国、日本、荷兰等国家和地区数据中心(部分自营),支持使用PayPal、支付宝等付款方式,网站可选中文网页,提供中文客服支持。本月商家继续提供每日限量秒杀服务器月付30.62美元起,除了常规服务器外,商家美国/韩国/日本站群服务器、1-10...

SoftShellWeb:台湾(台北)VPS年付49美元起,荷兰VPS年付24美元起

SoftShellWeb是一家2019年成立的国外主机商,商家在英格兰注册,提供的产品包括虚拟主机和VPS,其中VPS基于KVM架构,采用SSD硬盘,提供IPv4+IPv6,可选美国(圣何塞)、荷兰(阿姆斯特丹)和台湾(台北)等机房。商家近期推出台湾和荷兰年付特价VPS主机,其中台湾VPS最低年付49美元,荷兰VPS年付24美元起。台湾VPSCPU:1core内存:2GB硬盘:20GB SSD流量...

finalize为你推荐
策略组组策略完全使用方法最开放的浏览器网页浏览器有哪些啊?天融信防火墙天融信下一代防火墙有那些特点和优势?jqlJQL JINQILIN注册过商标吗?还有哪些分类可以注册?vipjr大家觉得vipjr少儿英语怎么样?靠谱不数秦科技天津数沃科技公司怎么样?待遇和发展如何?有人知道么?ruby语言ruby什么意思?什么含义?imqq官网如何伸请QQ?弹幕网站视频弹幕网站推荐图片存储手机照片的保存方法?
日本vps 万网域名管理 阿里云搜索 awardspace 狗爹 linkcloud 免费名片模板 天猫双十一秒杀 seovip info域名 xfce typecho 网站实时监控 panel1 绍兴高防 java虚拟主机 个人域名 数字域名 最好的免费空间 网站卫士 更多