【问题标题】:Can I Declare private variables inside a public method?我可以在公共方法中声明私有变量吗?
【发布时间】:2018-11-12 04:03:01
【问题描述】:

这个问题是我在一次采访中问到的。

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

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

public class GetUser {

public String getUserName(){

    private String user="David"; 

return user;

}}

【问题讨论】:

  • 如果你需要一个不可更改的变量,它可以是“最终的”

标签: java oop access-modifiers


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

编辑:阅读更多关于Inner Class here

【讨论】:

    【解决方案2】:

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

    public class Test {
        public String getUserName(){
    
            user="David"; 
            return user;
    
        }
        private String user;
    }
    

    此外,给类命名GetUser 有点尴尬。 更好的类名是UsergetUser 更适合作为方法名。

    【讨论】:

      【解决方案3】:

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

      访问修饰符用于确定类的某些成员(属性、构造函数、方法)的范围。方法变量的作用域只是那个方法,所以你不需要显式指定作用域。

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

      【讨论】:

        【解决方案4】:

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

        也可以在方法中嵌入一个内部类声明inside;匿名内部类或命名内部类。内部类可以声明字段,并且这些字段可以具有除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 只会是句法噪音。语言不允许。

        【讨论】:

          猜你喜欢
          • 2017-05-15
          • 2016-08-29
          • 1970-01-01
          • 2013-06-11
          • 2022-01-26
          • 1970-01-01
          • 1970-01-01
          • 2015-03-27
          • 1970-01-01
          相关资源
          最近更新 更多