Java 如何使变量的作用域成为全局的(而不使其实际成为全局的)

Java 如何使变量的作用域成为全局的(而不使其实际成为全局的),java,function,global,string,Java,Function,Global,String,如何使字符串变量(在Java中)的作用域成为全局变量,以便从另一个函数访问它 乙二醇 任何帮助。。。感谢OOP中的一个基本概念是范围的概念:在几乎所有情况下,明智的做法是将变量的范围(即从可见的位置)缩小到其最小可行范围 我假设你绝对需要在两个函数中使用这个变量。因此,在这种情况下,最低可行范围将涵盖这两项职能 public class YourClass { private String yourStringVar; public int pleaseGiveYourFuncti

如何使字符串变量(在Java中)的作用域成为全局变量,以便从另一个函数访问它 乙二醇


任何帮助。。。感谢

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"