月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂)
央是一片海洋,海乃百川,代表着一块海绵(吸纳万物)
泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出)
月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容
希望大家一起坚持这个过程,也同样希望大家最终都能从零到零,把知识从薄变厚,再由厚变薄!
3.举例说明1.这个接口是作用于一些掌握某些资源的对象(比如一些文件或者建立连接),而这个接口可以在这些对象 退出之前迅速的释放这些资源,避免出现一些异常和错误
2.即使一个基类下的部分子类和实例并不持有某些可释放的资源,实现该接口也并不意外,意思就是多实现AutoCloseable也没有什么问题
3.对于一些需要去释放资源的对象,推荐使用try-catch-resource的形式来释放资源,但是也有一些特殊情形,比如Stream中的Nio 并不是必须的
通俗的讲,就是这个接口实现了一种新的释放资源的结构方式,之前没有这个接口的时候,我们都需要在finally{}块中去手动释放资源,但是现在只需要在try()中去定义即可,等到try代码块的结束(无论是正常结束,还是异常结束,只要离开该代码块)完成后资源会自动释放掉.
package text.lang;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class AutoCloseableText {
public static class CustomeObject implements AutoCloseable{
@Override
public void close() throws Exception {
System.out.println("自动关闭了....");
}
}
public static void releaseBefore(){
InputStream inputStream = null ;
try {
inputStream = new FileInputStream("123");
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
if (inputStream != null){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void releaseNow(){
try( CustomeObject customeObject = new CustomeObject()) {
//当离开当前代码块,资源会被自动释放
System.out.println("正常结束....");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void releaseNowErro(){
try( CustomeObject customeObject = new CustomeObject()) {
//当离开当前代码块,资源会被自动释放
int i = 10/0;
} catch (Exception e) {
e.printStackTrace();
System.out.println("异常了...");
}
}
public static void main(String[] args) {
//正常演示
releaseNow();
System.out.println("============================");
//异常演示
releaseNowErro();
}
}
演示结果:
可以看到,无论是正常执行,还是异常结束都会自动关闭相关资源(前提是当前对象实现了AutoCloseable接口).
二.AutoCloseable方法
void close() throws Exception;
三.总结
AutoCloseable接口,让释放资源变得更加智能化.
说明时候csdn也能让月央泽,更加智能化...



