[英]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.