Java中的析构函数可以通过Java中的finalize方法来学习。概念与finalize方法相同。 Java 在垃圾收集的帮助下适用于除析构函数之外的所有函数。因此,如果需要调用析构函数,可以借助finalize方法来完成。此方法不是独立的,因为它依赖于垃圾收集。垃圾收集器是删除或销毁堆区域中未使用的对象的线程。假设对象连接到文件或某些数据库应用程序或网络连接,在删除或销毁对象之前,它必须在垃圾收集发生之前关闭与这些资源相关的所有连接。函数的关闭是通过调用 Finalize 方法来完成的。
“ 析构函数是在对象销毁时调用的方法。 “ 析构函数的主要目标是释放分配的内存并清理资源,例如关闭打开的文件、关闭数据库连接、关闭网络资源等,
广告 该类别中的热门课程 JAVA 掌握 - 专业化 | 78 课程系列 | 15 次模拟测试语法
class Object { protected void finalize() { //statements like the closure of database connection } }
析构函数在java中有一个finalize()方法,与C++中的析构函数类似。当对象被创建时,它们被存储在堆内存中。这些可由主线程或子线程访问。因此,当主线程或其子线程不再使用这些对象时,它们就有资格进行垃圾回收,并且现在获取的内存可供创建的新对象使用。在对象被垃圾收集器收集之前,JRE(Java Runtime Environment)会调用finalize()方法来关闭输入输出流、数据库连接、网络连接等。注意,调用的finalize方法是受保护的。为什么 Finalize 是受保护的,因为它既可以被基类调用,也可以被派生类调用? Finalize 方法存在于 Object 类中。因此,如果您想从其他对象调用此 Finalize 方法,您可以将其更改为 public。
语法:
protected void finalize throws Throwable() { //Keep some resource closing operations here }
finalize() 方法
在下面的程序中,调用了 String 类相应的 Finalizes 方法,而不是程序中存在的 Finalize 方法。这里重写了finalize方法。
代码:
public class Demo { public static void main(String[] args) { Integer i = new Integer(2); i = null; System.gc(); System.out.println("In the Main Method"); } protected void finalize() { System.out.println("object is garbage collected "); } }
输出:
在下面的程序中,内部调用了finalize方法;无需显式调用。
代码
public class Demo { public static void main(String[] args) { Demo dm = new Demo(); dm = null; System.gc(); System.out.println("In the Main Method"); } protected void finalize() { System.out.println("object is garbage collected "); } }
输出:
在下面的程序中,根据创建的对象数量在内部调用finalize。
代码
public class NewProgram{ public void finalize(){ System.out.println("object is garbage collected"); } public static void main(String args[]){ NewProgram np1=new NewProgram(); //first instantiation of Class NewProgram NewProgram np2=new NewProgram(); //second instantiation of Class NewProgram np1=null; np2=null; System.gc(); System.out.println("In the Main Method"); } }
输出:
在下面的程序中,创建了两个对象,并且调用了一次 Finalize,因为这两个对象都指向同一个对象。
代码:
public class NewProgram{ public void finalize(){ System.out.println("garbage collected"); } public static void main(String args[]){ NewProgram np1=new NewProgram(); //first instantiation of Class NewProgram NewProgram np2=new NewProgram(); //second instantiation of Class NewProgram np1 = np2; // both now pointing to same object System.gc(); System.out.println("in the Main Method"); } }
O输出:
在下面的程序中,finalize 方法将被显式和内部调用两次。
代码
public class Demo { public static void main(String[] args) { Demo dm = new Demo(); dm.finalize(); dm = null; System.gc(); System.out.println("In the Main Method"); } protected void finalize() { System.out.println("garbage collected "); } }
输出:
在下面的程序中,在显式调用 Finalize 方法时调用了算术异常,这进一步导致了异常并停止了剩余程序的执行。
代码:
public class Demo { public static void main(String[] args) { Demo dm = new Demo(); dm.finalize(); dm = null; System.gc(); System.out.println("In the Main Method"); } protected void finalize() { System.out.println("garbage collected "); System.out.println(10 / 0); } }
输出:
下面的程序中没有调用异常,因为它没有显式调用并继续执行其余程序。
Code:
public class Demo { public static void main(String[] args) { Demo dm = new Demo(); dm = null; System.gc(); System.out.println("In the Main Method"); } protected void finalize() { System.out.println("garbage collected "); System.out.println(10 / 0); } }
Output:
I hope this article was interesting and informative both for you to learn the topic. This article given has covered almost all the topics you are looking for, and I hope fulfills all of your requirements.
以上是Java 中的析构函数的详细内容。更多信息请关注PHP中文网其他相关文章!