从另一个类中调用变量时是否可以避免使用“静态”?非常感谢你
这是我的代码。
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避免在从另一个类调用变量时避免使用“静态”吗? 非常感谢你
答案 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;
}
}