繁体   English   中英

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

[英]Can I Declare private variables inside a public method?

我在一次采访中问了这个问题。

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

我尝试使用Java,但不允许在方法内部定义私有变量,为什么呢?

public class GetUser {

public String getUserName(){

    private String user="David"; 

return user;

}}

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

public class Test {
    public String getUserName(){

        user="David"; 
        return user;

    }
    private String user;
}

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

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

编辑: 在此处了解有关内部类的更多信息

不,这是一个语法错误,您不能在方法内使用访问修饰符。

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

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

直接在方法内声明的变量是局部变量。 局部变量不能声明为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将只是语法上的噪音。 语言不允许。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM