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

2021年全新Vultr VPS主机开通云服务器和选择机房教程(附IP不通问题)

昨天有分享到"2021年Vultr新用户福利注册账户赠送50美元"文章,居然还有网友曾经没有注册过他家的账户,薅过他们家的羊毛。通过一阵折腾居然能注册到账户,但是对于如何开通云服务器稍微有点不对劲,对于新人来说确实有点疑惑。因为Vultr采用的是预付费充值方式,会在每月的一号扣费,当然我们账户需要存留余额或者我们采用自动扣费支付模式。把笔记中以前的文章推送给网友查看,他居然告诉我界面不同,看的不对...

buyvm迈阿密机房VPS国内首发测评,高性能平台:AMD Ryzen 9 3900x+DDR4+NVMe+1Gbps带宽不限流量

buyvm的第四个数据中心上线了,位于美国东南沿海的迈阿密市。迈阿密的VPS依旧和buyvm其他机房的一样,KVM虚拟,Ryzen 9 3900x、DDR4、NVMe、1Gbps带宽、不限流量。目前还没有看见buyvm上架迈阿密的block storage,估计不久也会有的。 官方网站:https://my.frantech.ca/cart.php?gid=48 加密货币、信用卡、PayPal、...

Megalayer促销:美国圣何塞CN2线路VPS月付48元起/香港VPS月付59元起/香港E3独服月付499元起

Megalayer是新晋崛起的国外服务器商,成立于2019年,一直都处于稳定发展的状态,机房目前有美国机房,香港机房,菲律宾机房。其中圣何塞包括CN2或者国际线路,Megalayer商家提供了一些VPS特价套餐,譬如15M带宽CN2线路主机最低每月48元起,基于KVM架构,支持windows或者Linux操作系统。。Megalayer技术团队行业经验丰富,分别来自于蓝汛、IBM等知名企业。Mega...

finalize为你推荐
ISDNisdn是什么意思weakhashmapMap接口,HashMap和HashTable的相同点和不同点分别是什么?md5值哈希值 散列值 MD5值 都是什么意思啊郭凡生馬云的簡介3Qbindservice安卓里 remote service到底有什么用索引超出了数组界限什么是索引超出了数组界限丁奇请全面剖析一下黑胡子丁奇这个人物。smartupload为什么使用smartupload执行上传保存操作时用这句smart.save("upload")失败用smart.save("/upload")成功imqq官网中国v家官网网址系统论坛安卓系统论坛哪个好?
域名注册信息查询 免费二级域名申请 过期已备案域名 idc评测 便宜服务器 国外服务器网站 优key 网站实时监控 警告本网站 免费网络电视 web服务器架设软件 老左正传 789电视剧 德隆中文网 服务器防火墙 创速 香港ip 美国vpn代理 WHMCS 服务器是什么 更多