Java 如何使变量的作用域成为全局的(而不使其实际成为全局的)
如何使字符串变量(在Java中)的作用域成为全局变量,以便从另一个函数访问它 乙二醇Java 如何使变量的作用域成为全局的(而不使其实际成为全局的),java,function,global,string,Java,Function,Global,String,如何使字符串变量(在Java中)的作用域成为全局变量,以便从另一个函数访问它 乙二醇 任何帮助。。。感谢OOP中的一个基本概念是范围的概念:在几乎所有情况下,明智的做法是将变量的范围(即从可见的位置)缩小到其最小可行范围 我假设你绝对需要在两个函数中使用这个变量。因此,在这种情况下,最低可行范围将涵盖这两项职能 public class YourClass { private String yourStringVar; public int pleaseGiveYourFuncti
任何帮助。。。感谢OOP中的一个基本概念是范围的概念:在几乎所有情况下,明智的做法是将变量的范围(即从可见的位置)缩小到其最小可行范围 我假设你绝对需要在两个函数中使用这个变量。因此,在这种情况下,最低可行范围将涵盖这两项职能
public class YourClass
{
private String yourStringVar;
public int pleaseGiveYourFunctionProperNames(String s){
this.yourStringVar = s;
}
public void thisFunctionPrintsValueOfMyStringVar(){
System.out.println(yourStringVar);
}
}
根据具体情况,您必须评估变量所需的范围,并且必须理解增加范围的含义(更多访问=潜在更多依赖项=更难跟踪)
例如,假设您绝对需要它成为一个全局变量(正如您在问题中所说的)。具有全局范围的变量可以被应用程序中的任何对象访问。这是非常危险的,我将证明这一点
要创建具有全局作用域的变量(确切地说,Java中没有全局变量),需要创建一个具有静态变量的类
public class GlobalVariablesExample
{
public static string GlobalVariable;
}
如果我要修改原始代码,它现在看起来是这样的
public class YourClass
{
public int pleaseGiveYourFunctionProperNames(String s){
GlobalVariablesExample.GlobalVariable = s;
}
public void thisFunctionPrintsValueOfMyStringVar(){
System.out.println(GlobalVariablesExample.GlobalVariable);
}
}
这可能非常强大,也非常危险,因为它会导致您意想不到的奇怪行为,并且您会失去面向对象编程所提供的许多功能,因此请小心使用它
public class YourApplication{
public static void main(String args[]){
YourClass instance1 = new YourClass();
YourClass instance2 = new YourClass();
instance1.pleaseGiveYourFunctionProperNames("Hello");
instance1.thisFunctionPrintsValueOfMyStringVar(); // This prints "Hello"
instance2.pleaseGiveYourFunctionProperNames("World");
instance2.thisFunctionPrintsValueOfMyStringVar(); // This prints "World"
instance1.thisFunctionPrintsValueOfMyStringVar(); // This prints "World, NOT Hello, as you'd expect"
}
}
始终评估变量的最小可行范围。不要让它比需要的更容易访问
另外,请不要将变量命名为a、b、c。不要将变量命名为func1,func2。它不会使你的应用程序变得更慢,而且输入几个额外的字母也不会让你丧命。嗯。你显然需要一些面向对象编程的课程。在OO中没有“全局”变量。但任何定义为类中(方法外部)成员的变量在该类中都是全局的
public class MyClass {
private String myVar; // this can be accessed everywhere in MyClass
public void func1(String s) {
myVar = s;
}
public void func2(String q) { // why is q needed here? It's not used
System.out.println(myVar);
}
}
因此,只有先调用func1时,func2才会输出s的值
final Myclass myClass = new MyClass();
myClass.func1("value");
myClass.func2("whatever"); // will output "value"
另外,为什么在您的示例中这些方法返回int?它们应该是空的。如果从
func1()
@guilloum()赋值,则“myVar”不能是最终值您不明白我的意思。。。我的观点是,func1改变了S的值并将其保存在b中,然后func2根据最终编辑的b打印出改变后的S值,感谢Bala R,我不应该在晚上编写代码:)不,user841852,func2打印b,句号。它不关心之前或之后发生了什么。
final Myclass myClass = new MyClass();
myClass.func1("value");
myClass.func2("whatever"); // will output "value"