我可以在公共方法中声明私有变量吗?

时间:2018-06-02 03:02:45

标签: java oop access-modifiers

我在接受采访时问过这个问题。

我们可以在公共方法中声明私有变量吗?
如果可以,我们可以通过公共方法访问变量吗?

我尝试使用java但是它不允许在方法中定义私有变量为什么会这样?

public class GetUser {

public String getUserName(){

    private String user="David"; 

return user;

}}

4 个答案:

答案 0 :(得分:2)

不,你不能。 方法内的变量被认为是局部的,不能有修饰符。 您可以在一个类中拥有私有字段,但这是不同的:

public class Test {
    public String getUserName(){

        user="David"; 
        return user;

    }
    private String user;
}

此外,命名一个类GetUser有点尴尬。 一个更好的类名是UsergetUser更适合方法名称。

答案 1 :(得分:1)

  • 您不能在a中声明具有访问说明符的任何变量 方法
  • 您可以通过定义内部类并声明私有变量来实现 在里面。
  • 是的,可以从该方法访问。

编辑: 详细了解Inner Class here

答案 2 :(得分:0)

不,这是语法错误,您无法在方法中使用访问修饰符。

访问修饰符用于确定类的某些成员(属性,构造函数,方法)的范围。方法变量的范围仅是该方法,因此您无需明确指定范围。

  

有关访问修饰符的更多信息:   https://www.javatpoint.com/access-modifiers

答案 3 :(得分:0)

直接在方法中声明的变量是局部变量。局部变量不能声明为private。实际上,您可以在局部变量声明中使用的唯一修饰符是final

也可以在方法中嵌入内部类声明;匿名内部类或命名内部类。内部类可以声明字段,并且这些字段可以具有除static之外的所有修饰符。从某种意义上说,字段是封闭方法“内部”的变量。这是一个例子:

public void myMethod () {

   class Inner() {
       private int field1;
       public int field2;
       /* .... */
   }

   Inner inner = new Inner();
   // do stuff with the inner object
}

如果您使用上述代码,您会发现myMethod中的代码可以完全访问Inner的私有字段。但是,这是一个private变量在一个方法“内部”声明的例子。

回到正常情况,访问修饰符的目的是实现封装。并且封装的主要目的是最小化代码库的不同部分之间的不期望的耦合。 (类很难能够访问另一个类的内部变量,因为它很难改变第二个类代码......而不会破坏第一个类。)

但是唯一可以访问方法的局部变量的代码就在附近;即在相同的源代码文件中,并在方法的主体内。假设是正文中的任何代码都可能需要访问本地变量,并且任何不应该访问的代码(例如,为了避免耦合)应该采用不同的方法。

因此,局部变量的“自然”可见性等同于private,其他可见性设置毫无意义。因此,假设所有局部变量都是“自然”私有的,那么明确地将它们声明为private只会是语法噪声。该语言不允许。