本地与成员变量正确的代码放置

时间:2016-09-08 20:55:10

标签: java variables methods

我还是一个新手,但现在想开始正确编码,而不是以后。如果我错了,请纠正我,但方法应该是自给自足和程序的独立功能。那么这是否意味着给定方法需要操作的所有内容都应该在该方法中实例化?我不知道内存是如何运行的,但是如果多次使用以下方法,理论上它是否也创建了它的局部变量的多个实例?如果我运行此方法100次,我不会在内存中有100个String变量(因为字符串是最终的),以及实例化我的扫描仪变量100次?如果我理解正确,会成员变量专门为对象的属性声明。该对象不包含正则表达式变量,而是引用它,这就是我将其从成员变量声明中删除的原因。

这个方法可以在一个类中实现,没有麻烦,可以自己操作;从我的理解中,这是创建方法的正确方法。

如果这是标准的,那么我将继续以这种方式创建方法。您是否可以批评或阐述成员与地方变量的位置?

/**
 * Verifies proper phone number format.
 * @param phone 
 */
public void checkPhone(String phone)
{

    //local scanner variable***
    Scanner in= new Scanner(System.in);
    //regex***
    String phoneRegex = "\\d{3}-\\d{3}-\\d{4}";

    while(!phone.matches(phoneRegex))
    {
      System.out.println("You have entered an invalid phone format.");
      System.out.println("Proper format example: 123-999-1234");
      System.out.print("Re-enter phone number: ");
      phone = in.nextLine();

    }

    this.mPhoneNumber = phone;

}

2 个答案:

答案 0 :(得分:1)

  

应该在该方法中实例化给定方法需要操作的所有内容吗?

这取决于具体情况。

如果有更多方法需要相同的对象,最好不要多次为多个方法实例化。只需将它一次插入主类(例如)。

因此,请小心选择放置的位置并实例化对象。

答案 1 :(得分:0)

每次调用checkPhone()时,都会创建一个新的Scanner和regex String。一旦函数结束,Scanner和phoneRegex对象就有资格进行垃圾收集,因为你没有在任何地方保留对它们的引用,因此在任何给定的时间内,它们可能只有一个实例存储在内存中。 (实际上,正则表达式可能会被缓存,因为它是一个文字字符串,所以只创建一次)。

但是,如果将Scanner和regex String作为类的实例变量,在构造函数而不是checkPhone()中创建,那会更好。这样,您就不会为每次通话重新创建它们。

对于参数“phone”,它取决于调用者如何编码多个调用是否有多个字符串。