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下的接口,它是各种集合结构的父接口。

牦牛云(3.5USD/月 )阿里云国际版云服务器 1核1G40G

收到好多消息,让我聊一下阿里云国际版本,作为一个阿里云死忠粉,之前用的服务器都是阿里云国内版的VPS主机,对于现在火热的阿里云国际版,这段时间了解了下,觉得还是有很多部分可以聊的,毕竟,实名制的服务器规则导致国际版无需实名这一特点被无限放大。以前也写过几篇综合性的阿里云国际版vps的分析,其中有一点得到很多人的认同,那句是阿里云不管国内版还是国际版的IO读写速度实在不敢恭维,相对意义上的,如果在这...

青果云(590元/年),美国vps洛杉矶CN2 GIA主机测评 1核1G 10M

青果网络QG.NET定位为高效多云管理服务商,已拥有工信部颁发的全网云计算/CDN/IDC/ISP/IP-VPN等多项资质,是CNNIC/APNIC联盟的成员之一,2019年荣获国家高薪技术企业、福建省省级高新技术企业双项荣誉。那么青果网络作为国内主流的IDC厂商之一,那么其旗下美国洛杉矶CN2 GIA线路云服务器到底怎么样?官方网站:https://www.qg.net/CPU内存系统盘流量宽带...

Webhosting24:€15/年-AMD Ryzen/512MB/10GB/2TB/纽约&日本&新加坡等机房

Webhosting24是一家始于2001年的意大利商家,提供的产品包括虚拟主机、VPS、独立服务器等,可选数机房包括美国洛杉矶、迈阿密、纽约、德国慕尼黑、日本、新加坡、澳大利亚悉尼等。商家VPS主机采用AMD Ryzen 9 5950X CPU,NVMe磁盘,基于KVM架构,德国机房不限制流量,网站采用欧元计费,最低年付15欧元起。这里以美国机房为例,分享几款套餐配置信息。CPU:1core内存...

finalize为你推荐
诺诺云代账诺诺云代账系统好用吗?有同行的分享下经验不?公司准备换个财务系统。md5值哈希值 散列值 MD5值 都是什么意思啊md5值md5值什么用空白代码html空格代码怎么写foxmail邮箱注册如何注册一个foxmail邮箱网关和路由器的区别网关和路由器有什么区别jdk6jdk-6u14-windows-i586.exe是什么,具体点,谢谢faq是什么意思fans是什么意思?layoutsubviews如何让NSSplitView的子View的大小固定cf加速器玩CF需要用加速器吗?
如何申请域名 瓦工 便宜服务器 老鹰主机 Hello图床 外国域名 12306抢票助手 一点优惠网 蜗牛魔方 免费个人空间 可外链网盘 傲盾官网 上海联通宽带测速 常州联通宽带 美国独立日 starry 全能空间 谷歌台湾 服务器防火墙 服务器论坛 更多