Java:函数局部变量初始化

Java:函数局部变量初始化,java,Java,我有一个java函数。在第一个函数中,使用第二个函数中的声明初始化返回变量“ret”,必要时在try内部初始化。你们觉得哪一个更好?请考虑列表作为一个例子,它可以是字符串和类型。多谢各位 第一个功能: public List<String> getNames() { List<String> ret = new ArrayList<String>(); try { // use ret } catch(Exception e){

我有一个java函数。在第一个函数中,使用第二个函数中的声明初始化返回变量“ret”,必要时在try内部初始化。你们觉得哪一个更好?请考虑列表作为一个例子,它可以是字符串和类型。多谢各位

第一个功能:

public List<String> getNames() {
  List<String> ret = new ArrayList<String>();
  try {
       // use ret
  } catch(Exception e){

  }
}
public List<String> getNames() {
  List<String> ret = null;
  try {
       //  some more code
       ret = new ArrayList<String>();
       // use ret
  } catch(Exception e){

  }
}
public List getNames(){
List ret=new ArrayList();
试一试{
//使用ret
}捕获(例外e){
}
}
第二个功能:

public List<String> getNames() {
  List<String> ret = new ArrayList<String>();
  try {
       // use ret
  } catch(Exception e){

  }
}
public List<String> getNames() {
  List<String> ret = null;
  try {
       //  some more code
       ret = new ArrayList<String>();
       // use ret
  } catch(Exception e){

  }
}
public List getNames(){
列表ret=null;
试一试{
//还有代码吗
ret=新的ArrayList();
//使用ret
}捕获(例外e){
}
}

第一个更好,因为将
ret
分配给
new ArrayList()
不会失败。最好将
try
块的内容限制为可能引发异常的操作。

第一个更好,因为将
ret
分配给
new ArrayList()
不会失败。最好将
try
块的内容限制为可能引发异常的操作。

这取决于您的目标。如果在创建
ArrayList
实例之前必须满足某些依赖项或条件,那么可以选择第二个选项。我建议使用第二个选项,因为它可以在需要时立即创建实例。只有在创建和使用
ArrayList
实例之前看到代码,才能完成整个决策。这将使
列表
引用在创建之前失败时保留为空。我们也可以在
try catch块之后进行初始化

public List<String> getNames() {
  List<String> ret = null;
  try {
       // code which is prone to exception
  } catch(Exception e){

  }
   ret = new ArrayList<>();
   //set the values in ret and return it
}
public List getNames(){
列表ret=null;
试一试{
//易发生异常的代码
}捕获(例外e){
}
ret=新的ArrayList();
//在ret中设置值并返回它
}
}


最佳做法是仅在需要时初始化对象。这取决于您的目标。如果在创建
ArrayList
实例之前必须满足某些依赖项或条件,那么可以选择第二个选项。我建议使用第二个选项,因为它可以在需要时立即创建实例。只有在创建和使用
ArrayList
实例之前看到代码,才能完成整个决策。这将使
列表
引用在创建之前失败时保留为空。我们也可以在
try catch块之后进行初始化

public List<String> getNames() {
  List<String> ret = null;
  try {
       // code which is prone to exception
  } catch(Exception e){

  }
   ret = new ArrayList<>();
   //set the values in ret and return it
}
public List getNames(){
列表ret=null;
试一试{
//易发生异常的代码
}捕获(例外e){
}
ret=新的ArrayList();
//在ret中设置值并返回它
}
}


最佳做法是仅在需要时初始化对象。

这取决于需要。
在第一种方法中,如果发生异常,您仍然可以控制
ret
,而在后一种方法中,您不能控制它。

这实际上取决于需要。
在第一种方法中,如果发生异常,您仍然可以控制
ret
,在后一种方法中,您不能控制它。

这取决于您正在做什么。如果您可能在try和catch中都使用ret,请使用第一种形式。如果您只想在try块中使用ret,请将ret的增量放在try块中

public List<String> getNames() {
  try {
       //  some more code
       List<String> ret = new ArrayList<String>();
       // use ret
  } catch(Exception e){

  }
}
public List getNames(){
试一试{
//还有代码吗
List ret=new ArrayList();
//使用ret
}捕获(例外e){
}
}

这取决于你在做什么。如果您可能在try和catch中都使用ret,请使用第一种形式。如果您只想在try块中使用ret,请将ret的增量放在try块中

public List<String> getNames() {
  try {
       //  some more code
       List<String> ret = new ArrayList<String>();
       // use ret
  } catch(Exception e){

  }
}
public List getNames(){
试一试{
//还有代码吗
List ret=new ArrayList();
//使用ret
}捕获(例外e){
}
}

这取决于具体情况。如果在特定操作中没有要捕获的内容。没有必要把它放在
try catch

 List<String> ret = new ArrayList<String>(); // here no exception will throw. 
List ret=new ArrayList();//这里没有例外。

这取决于具体情况。如果在特定操作中没有要捕获的内容。没有必要把它放在
try catch

 List<String> ret = new ArrayList<String>(); // here no exception will throw. 
List ret=new ArrayList();//这里没有例外。

我个人使用第一种方法。我不一定认为在
try/catch
中初始化它有什么好处,尽管从技术上讲,您是通过在
try/catch
之前的第二个代码块中将它设置为
null
来初始化它的。要声明它,请使用
List-ret

我个人使用第一种方法。我不一定认为在
try/catch
中初始化它有什么好处,尽管从技术上讲,您是通过在
try/catch
之前的第二个代码块中将它设置为
null
来初始化它的。要声明它,请使用
List-ret

在第一种情况下,即使try块中发生异常,也可以确保发送一个空白的
ArrayList
,而在第二种情况下,如果异常发生在
ArrayList
初始化之前,则会发回一个
null
。第二种方法的另一个好处是,仅在需要时才创建数组列表,而不是之前不必要的创建


这两种方法都可以,但最好使用第二种方法,因为返回
null
特别意味着出现了一些问题,因此可以适当地处理和解释
null
,然而,一个空白的
Arraylist
可能并不总是能够在没有返回记录的情况下区分异常和正确执行。

在第一种情况下,即使在try块中发生异常,也可以确保发送一个空白的
Arraylist