java中需要释放的资源有哪些(java中需要释放的资源有哪些种类)

发布时间:2022-11-15

本文目录一览:

  1. java 类中的构造函数和析构函数名都是什么,java需要手动释放资源吗?
  2. Java中有类似C++ 的delete ,free语句来释放资源吗
  3. java什么时候该写.close()释放资源?

java 类中的构造函数和析构函数名都是什么,java需要手动释放资源吗?

java中 构造函数 名与类名相同,java没有 析构函数 ,java不需要手动释放资源,它是有垃圾回收机制的。

Java中有类似C++ 的delete ,free语句来释放资源吗

java采用了垃圾回收机制,程序员无法操作内存释放 可以通过编程的手段来影响,让对象符合垃圾回收条件。

  1. 将无用对象赋值为null.
  2. 重新为引用变量赋值。比如:
    Person p = new Person("aaa");
    p = new Person("bbb");
    
    这样,new Person("aaa") 这个对象就是垃圾了——符合垃圾回收条件了。
  3. 让相互联系的对象称为“岛”对象
    Person p1 = new Person("aaa");
    Person p2 = new Person("bbb");
    Person p3 = new Person("ccc");
    p1 = p2; 
    p2 = p3; 
    p3 = p1;
    p1 = null; 
    p2 = null; 
    p3 = null;
    
    在没有对 p1p2p3null 之前,它们之间是一种三角恋关系。分别置 null,三角恋关系依然存在,但是三个变量不再使用它们了。三个 Person 对象就组成了一个孤岛,最后死在堆上——被垃圾回收掉。
  4. 强制的垃圾回收 System.gc() 实际上这里的强制,是程序员的建议,什么时候执行还是 JVM 的垃圾回收器说了算。

java什么时候该写.close()释放资源?

在 Java 中对资源的读写最后要进行 close 操作,以下是 2 种释放资源处理方式: 第 1 种:把 close() 放在 try 中。

try {
    PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("out.txt", true)));
    pw.println("This is a test.");
    pw.close();
} catch (IOException e) {
    e.printStackTrace();
}

第 3 种:使用 try-with-resource 语句。

try (PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("out.txt", true)))) {
    pw.println("This is a test.");
} catch (IOException e) {
    e.printStackTrace();
}

无论是否有异常发生,close() 方法都应该被调用,因此 close() 应放在 finally 中。而从 Java 7 开始,可以使用 try-with-resource 语句。