TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
1.构造函数
要点:
构建器(Constructor)属于一种较特殊的方法类型,因为它没有返回值.这与void返回值存在着明显的区别。对于void返回值,尽管方法本身不会自动返回什么,但仍然可以让它返回另一些东西。构建器则不同,它不仅什么也不会自动返回,而且根本不能有任何选择.若创建一个没有构件器的类,则编译器会自动创建一个默认构件器.
2.finalize()和gc()
(1)问题:finalize()函数是干嘛的?java不是有Garbage Collection(以下简称gc)来负责回收内存吗?
回答:
gc只能清除在堆上分配的内存(纯java语言的所有对象都在堆上使用new分配内存),而不能清除栈上分配的内存(当使用JNI技术时,可能会在栈上分配内存,例如java调用c程序,而该c程序使用malloc分配内存时).因此,如果某些对象被分配了栈上的内存区域,那gc就管不着了,对这样的对象进行内存回收就要靠finalize().
举个例子来说,当java 调用非java方法时(这种方法可能是c或是c++的),在非java代码内部也许调用了c的malloc()函数来分配内存,而且除非调用那个了free() 否则不会释放内存(因为free()是c的函数),这个时候要进行释放内存的工作,gc是不起作用的,因而需要在finalize()内部的一个固有方法调用它(free()).
finalize的工作原理应该是这样的:一旦垃圾收集器准备好释放对象占用的存储空间,它首先调用finalize(),而且只有在下一次垃圾收集过程中,才会真正回收对象的内存.所以如果使用finalize(),就可以在垃圾收集期间进行一些重要的清除或清扫工作.
(2)问题:finalize()在什么时候被调用?
回答:
有三种情况
1.所有对象被Garbage Collection时自动调用,比如运行System.gc()的时候.
2.程序退出时为每个对象调用一次finalize方法。
3.显式的调用finalize方法
除此以外,正常情况下,当某个对象被系统收集为无用信息的时候,finalize()将被自动调用,但是JVM不保证finalize()一定被调用,也就是说,finalize()的调用是不确定的,这也就是为什么sun不提倡使用finalize()的原因.
相关文章:
逐渐挖掘Static Import,更简单的访问静态成员 2005-11-18
Java中static用法 2005-11-18
ergo-0.93围棋客户端源码 2005-11-17
用Java Robot对象实现服务器屏幕远程监视 2005-11-16
Java基本功----Reference 2005-11-16
Java通过命令行取得MAC地址 2005-11-12
深入理解Java对象实例生成的例子 2005-11-11
java实现的简单的端口扫描程序 2005-11-08
jdk1.5中的元数据一例 2005-11-07
我也用字典探表单密码 2005-11-06
网页表单密码破解程序 2005-11-06
一个简单的web浏览器源码 2005-11-06
在 Java 的注释上做文章 2005-11-05
在 Java 的注释上做文章 2005-11-05
java枚举类型入门 2005-11-04
时间/次数双机制缓存管理器 2005-11-04
java垃圾收集 2005-11-03
断言 2005-11-02
看看别人是怎样求质数的! 2005-11-01
JAVA中的控件重绘 2005-10-30
java反射 2005-10-29
java 词汇表速查 2005-10-28
克隆一例 2005-10-27
用 JAVA 开发游戏连连看 2005-10-21
跟我学Java Swing之游戏设计 2005-10-21
java 循环语句 2005-10-21
java 跳转语句 2005-10-20
数据结构上的4种简单排序算法。 2005-10-20
输出菱形的程序 2005-10-19
找回文数 2005-10-16
i=i++的迷惑 2005-10-14
二分查找 2005-10-09
replaceAll函数 2005-10-09
Unicode简介 2005-10-02
六个简单循环 2005-10-01
SUN JAVA 培训专用教材SCJP考试用书中文版 2005-09-28
随机产生没有重复数字的四位数字 2005-09-25
Exception 处理之最佳实践 2005-09-25
线程基础---wait(),notify的应用一例 2005-09-23
jsp或者说JAVA到底有多快? 2005-09-21
java编程介绍 2005-09-20
如何创建自解压的jar文件 2005-09-17
短路运算符 2005-09-15
手把手教您如何编写一个动画Applet实例 2005-09-11
JDK1.5爱之初体验 2005-09-10
魔幻正方形 2005-09-10
辗转相除法求最大公约数 2005-09-09
JDK5新特性之二----新的格式化输出 2005-09-09
安装java2平台专业版5.0 2005-09-08
位图排序 2005-09-08
为什么需要重载equals? 2005-09-02
Java性能优化技巧集锦 2005-09-02
工厂方法-模式进阶 2005-08-31
介绍JDK 5.0 中的泛型 2005-08-30
一个文件切割器 2005-08-30
Java 日期选择控件 DateChooser 2005-08-29
java 正则表达式(regular expression)调试工具 2005-08-29
用Java实现Windows系统托盘图标源码1.79b 2005-08-28
java编写的简单下载管理器(带源码) 2005-08-28
J2SE 5.0中的泛型 2005-08-28
一个BASIC语言解释器(带源码) 2005-08-27
一个表达式解析器 2005-08-27
带源码的Ftp程序 2005-08-24
简单聊天程序 2005-08-24
Sun Microsystems公司的声音演示程序(带源码) 2005-08-23
一个简单的带源码的聊天程序 2005-08-23
Java服务器端图形编程 2005-08-23
根据标记分割字符串 2005-08-23
实战MVC模式 2005-08-23
用Java日志包进行调试 2005-08-22
在Java中处理日志记录 2005-08-22
告别System.out.print() 2005-08-22
JAVA与正则表达式(1) 2005-08-22
在应用程序中嵌入数据库功能 2005-08-21
如何用java启动windows命令行程序 2005-08-21 |
|