创建对象并将其传递给参数vs在类的构造函数中声明一个对象作为参数的区别是什么?像1)和2)有什么区别?在构造函数中传递对象
1)
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
2)
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
创建对象并将其传递给参数vs在类的构造函数中声明一个对象作为参数的区别是什么?像1)和2)有什么区别?在构造函数中传递对象
1)
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
2)
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
两个差异浮现在脑海中:
在理论,与所有功能于一身的建筑,如果外部构造函数抛出一个异常,你会有一个内部对象的实例你永远不会打电话给close
(因为你没有提及它,你可以用它来做),所以它不会被关闭,直到最终确定(如果那样)。在实践中,我不认为BufferedReader
的构造可以抛出一个异常,而是......
这是什么部分Java的新try-with-resources statement旨在帮助:
try (
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
)
{
// do your stuff here
}
使用try与资源,你可以肯定,即使第二个构造函数抛出,第一个对象被正确关闭。
注意,当您使用try-与资源与多个声明如上,close
被称为在它们出现的相反顺序,通常是你想要什么(在这种情况下,br.close()
之前被调用isr.close()
)。
通过一体化构造,您假设外部对象将关闭当您关闭它时传递它的对象(因为您再次没有提及用于关闭的内部对象它)。 BufferedReader
的确如此,但可能并不普遍。通过确保调用close
,再次尝试资源帮助。
如果你正在处理不需要close
或类似物体,有没有两者都相差无几。在调试时单步执行单个语句比单步执行更容易,但除此之外,其中没有多少内容。