[英]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.