繁体   English   中英

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

[英]Is it possible to avoid using "static" when call variable from another 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 在从另一个类调用变量时避免使用“静态”? 非常感谢您

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

所以如果你不想使用静态,那么你就不能在类的其他实例中使用它。

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

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

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

如果你没有将字符串标记为static你会得到一个编译错误,因为当你在main方法中执行System.out.println(say) ,你在静态上下文中使用say (因为main方法必须是静态的)。

如果你删除System.out.println(say); 然后离开myHello.born(); 那么就没有必要say是静态的,因为您只会从非静态方法(即born()方法)中使用它。 您可以在此示例中看到它,我注释了该行并将say定义为非静态。

另一种选择是使println像这样,因为变量是公共的: System.out.println(myHello.say);

如果删除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;
 }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM