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

HostKvm香港VPS七折:$5.95/月KVM-2GB内存/40GB硬盘/500GB月流量

HostKvm是一家成立于2013年的国外主机服务商,主要提供VPS主机,基于KVM架构,可选数据中心包括日本、新加坡、韩国、美国、俄罗斯、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。商家本月针对香港国际机房提供特别7折优惠码,其他机房全场8折,优惠后2G内存香港VPS每月5.95美元起,支持使用PayPal或者支付宝付款。下面以香港国际(HKGlobal)为...

Ceranetworks顶级合作伙伴 香港E3 16G 299元 香港E5 32G 650元 美国E3 16G 650元

提速啦(www.tisula.com)是赣州王成璟网络科技有限公司旗下云服务器品牌,目前拥有在籍员工40人左右,社保在籍员工30人+,是正规的国内拥有IDC ICP ISP CDN 云牌照资质商家,2018-2021年连续4年获得CTG机房顶级金牌代理商荣誉 2021年赣州市于都县创业大赛三等奖,2020年于都电子商务示范企业,2021年于都县电子商务融合推广大使。资源优势介绍:Ceranetwo...

御云(RoyalYun):香港CN2 GIA VPS仅7.9元每月起,美国vps仅8.9/月,续费同价,可叠加优惠

御云怎么样?炎炎暑期即将来临,御云(royalyun)香港、美国服务器开启大特惠模式。御云是新成立的云服务提供商,主要提供香港、美国的云服务器,不久将开启虚拟主机业务。我们的香港和美国主机采用CN2 GIA线路。目前,香港cn2 gia vps仅7.9元每月起,美国vps仅8.9/月,续费同价,可叠加优惠,香港云服务器国内延迟一般在50ms左右,是搭建网站的最佳选择,但是请不要用于违法用途。点击进...

finalize为你推荐
元数据管理请问metadata是什么意思?开票系统怎样开普通发票系统附清单weakhashmapWeakHashMap和HashMap的区别空白代码空白名字代码webcrack我用WebCrack4 在破解路由器密码的时候为什么在破解密码的中途自动关闭掉slideshare如何通过slideshare扩充LinkedIn人脉jql建筑设计图纸上JQL 梁,是不是地下正负零基础梁?急急!保留两位有效数字什么叫保留两位有效数字memsql如何自己实现一个关系型数据库medias请帮我详细解释一下 chronological order和in medias res
出租服务器 泛域名绑定 电影服务器 tier cdn服务器 la域名 香港新世界电讯 阿里云代金券 100x100头像 最好的免费空间 91vps 网络空间租赁 息壤代理 33456 四核服务器 国内域名 买空间网 宿迁服务器 ssl加速 广州主机托管 更多