从另一个类调用变量时,是否可以避免使用“静态”?

时间:2020-11-02 09:37:53

标签: java class

从另一个类中调用变量时是否可以避免使用“静态”?非常感谢你

这是我的代码。

class Hello {
  public static String say = "Hello World";  //I using static       
  public void born() {                    
    System.out.println(say);
  }
}

public class SayHello extends Hello {
  public static void main(String[] args) {
    Hello myHello = new Hello();
    myHello.born();
    System.out.println(say);

  }

输出:

Hello World
Hello World

如果我使用public String say = "Hello World";

它输出Hello World null

AnyIdea避免在从另一个类调用变量时避免使用“静态”吗? 非常感谢你

4 个答案:

答案 0 :(得分:0)

静态变量是类的所有实例(或对象)所共有的,因为它是类级别的变量。换句话说,您可以说只创建了一个静态变量副本,并在该类的所有实例之间共享。

因此,如果您不想使用静态,则不能在其他类实例中使用它。

答案 1 :(得分:0)

是的,如果您未将其声明为静态,则可以从实例myHello.say中引用它。 与调用函数相同。

public class SayHello extends Hello {
  public static void main(String[] args) {
    Hello myHello = new Hello();
    myHello.born();
    System.out.println(myHello.say);
  }
}

对于一个常数,即一个永不改变的字符串,并且对于该类的所有实例都是相同的,将其声明为静态并按原样使用是有意义的。

答案 2 :(得分:0)

如果未将字符串标记为static,则会出现编译错误,因为在System.out.println(say)方法中执行main时,您会在{静态上下文(因为say方法必须是静态的)。

如果您删除main并仅保留System.out.println(say);,则无需myHello.born();保持静态,因为您只能从非静态方法(即{{ 1}}方法)。您可以在this example中看到该行,在其中我注释了该行并将say定义为不是静态的。

另一种选择是使born()像这样,因为变量是公共的:say

答案 3 :(得分:0)

如果删除static,它将无法编译。如果要隐藏静态字段,可以将其标记为private。因此,它们只能由Hello类的所有实例访问。修改或获取的正确方法是:

class Main extends Hello {
  public static void main(String[] args) throws Exception {
    Hello myHello = new Hello();
    myHello.born();
    // System.out.println(say); //doesn't allow access
    // System.out.println(Hello.say); //doesn't allow access
    System.out.println(myHello.getSay());
  }
 
}

class Hello {
  private static String say = "Hello World";  //private      
  public void born() {                    
    System.out.println(say);
  }

 public String getSay() {
  return say;
 }
}
相关问题