我可以在公共方法中声明私有变量吗?
Posted
技术标签:
【中文标题】我可以在公共方法中声明私有变量吗?【英文标题】: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;
【问题讨论】:
如果你需要一个不可更改的变量,它可以是“最终的” 【参考方案1】: 您不能在 a 中声明任何带有访问说明符的变量 方法。 可以通过定义内部类并声明私有变量来实现 在里面。 是的,可以通过该方法访问。编辑:阅读更多关于Inner Class here
【讨论】:
【参考方案2】:不,你不能。 方法内的变量被认为是局部的,不能有修饰符。 你可以在一个类中拥有私有字段,但这是不同的:
public class Test
public String getUserName()
user="David";
return user;
private String user;
此外,给类命名GetUser
有点尴尬。
更好的类名是User
。 getUser
更适合作为方法名。
【讨论】:
【参考方案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
只会是句法噪音。语言不允许。
【讨论】:
以上是关于我可以在公共方法中声明私有变量吗?的主要内容,如果未能解决你的问题,请参考以下文章
我可以在公共标头中而不是在私有标头中将变量声明为const吗?