Java 在构造函数中传递对象
创建对象并将其传递给参数和在类的构造函数中将对象声明为参数之间的区别是什么。比如1)和2)之间的区别是什么 (一) (二)Java 在构造函数中传递对象,java,object,constructor,arguments,Java,Object,Constructor,Arguments,创建对象并将其传递给参数和在类的构造函数中将对象声明为参数之间的区别是什么。比如1)和2)之间的区别是什么 (一) (二) 我想到了两个不同点: 在理论中,对于一体式构造,如果外部构造函数抛出异常,您将有一个内部对象的实例,您永远不会调用close打开它(因为您没有可以用来执行此操作的对它的引用),因此它在完成之前不会关闭(如果有)。实际上,我认为BufferedReader的构造函数不能抛出异常,但是 这是Java的新功能的一部分,旨在帮助: try ( InputStreamRead
我想到了两个不同点:
close
打开它(因为您没有可以用来执行此操作的对它的引用),因此它在完成之前不会关闭(如果有)。实际上,我认为BufferedReader
的构造函数不能抛出异常,但是
这是Java的新功能的一部分,旨在帮助:
try (
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
)
{
// do your stuff here
}
使用try with resources,可以确保即使第二个构造函数抛出,第一个对象也会正确关闭
请注意,当您将try with resources与上述多个声明一起使用时,close
将按它们出现的相反顺序调用,这通常正是您想要的(在本例中,br.close()
在isr.close()
之前调用)BufferedReader
,但可能并非普遍适用。再次尝试使用资源帮助,确保调用close
close
或类似内容,那么两者之间没有太大区别。在调试时,单步跳过单独的语句比使用一体化结构更容易,但除此之外,没有太多内容
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
try (
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
)
{
// do your stuff here
}