如何从静态方法访问全局非静态变量

问题描述 投票:-1回答:2

我在Java程序中有main方法,我想将值存储在全局变量中,因为我想从类的不同方法访问该值,但是我不相信使用静态全局变量作为变量中的值一直在变化,所以担心声明为static的值可能不会更改,因为它是在类级别定义的,因此我正在寻找非静态的全局变量。有人可以提出一个想法,如何实现这一目标。

java static
2个回答
1
投票

我建议您使用要存储的变量制作一个单独的类,并使用正确的getter和setter方法。这样一来,您可以使代码更加干净和可维护,并遵循关注点分离原则,该原则告诉我们每个类都应具有自己的目的。

EG:

 public class Person {
   private String name; // private = restricted access

   // Getter
   public String getName() {
   return name;
   }

  // Setter
  public void setName(String newName) {
  this.name = newName;
  }
}

 public class MyClass {
   public static void main(String[] args) {
     Person myObj = new Person();
     myObj.setName("John"); // Set the value of the name variable to "John"
     System.out.println(myObj.getName()); //Prints out name value
   }
 }

0
投票

要启动Java类,请使用所有普通Java程序中都存在的“ main”静态方法。但是,“构造函数”方法(实际上只是“构造函数”)是以“主类”名称命名的,无论您在类中调用已声明的方法还是从启动方法“主”中检索静态变量,都可以在此初始化变量。

main方法不需要任何传递器方法就可以从中获取静态变量,也可以在类中设置全局静态变量,因为它只是类中层次结构“作用域”中的第一步(这就是为什么某些框架传递变量的原因到全局,而不用键入方法,而是在方法声明上使用“ void”),但是您不能在代码的静态部分(例如main方法)中放置非静态方法调用。

从变量中删除静态上下文的方法是在非静态上下文中创建另一个具有相同名称的变量,并将静态变量转换为非静态实例。

例如在构造时从main方法获取全局String基本类型变量的声明]

static String uselessRef1 = args[1]; // static argument 1 from the main method args[] array
String uselessRef1b = (String)uselessRef1; // (String) cast removes the static context of the String type and copies to non static version of the type

或者从主要方法中更快更容易

String uselessRef1b = (String)args[1]; // (String) cast removes the static context of the String type and copies to non static version of the type

虽然在全局声明中而不是在构造函数中内联提交,但是它们被视为按顺序加载到类构造函数中。

© www.soinside.com 2019 - 2024. All rights reserved.