本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看<活动链接>
提问:static
关键字在类中发挥什么作用?
当我测试下方代码的时候:
package hello;
public class Hello {
Clock clock = new Clock();
public static void main(String args[]) {
clock.sayTime();
}
}
复制代码
报了如下错误
Cannot access non-static field in static method main
复制代码
所以我把clock
的声明改成了下面这样:
static Clock clock = new Clock();
复制代码
这样代码就运行成功了,在声明前面加上关键字到底有何意义?它会对对象产生什么影响呢?
回答一
静态成员的基本用法
public class Hello
{
// value / method
public static String staticValue;
public String nonStaticValue;
}
class A
{
Hello hello = new Hello();
hello.staticValue = "abc";
hello.nonStaticValue = "xyz";
}
class B
{
Hello hello2 = new Hello(); // here staticValue = "abc"
hello2.staticValue; // will have value of "abc"
hello2.nonStaticValue; // will have value of null
}
复制代码
这就是如何在类的所有实例中共享值,而不用创建一个实例再去获得值。
Hello hello = new Hello();
hello.staticValue = "abc";
复制代码
你可以直接使用类名调用静态值
Hello.staticValue = "abc";
复制代码
回答二
static
是一个非访问控制修饰符,它属于类而非类的实例。
这意味着所有的实例都会共享一个静态变量,即使有一百万个实例也是如此。由于静态方法不输入某个实例,因此它们也无法调用非静态方法。静态成员只能引用静态成员。实例成员可以访问静态成员。
注意:静态成员也可以使用对象访问实例成员
public class Example {
private static boolean staticField;
private boolean instanceField;
public static void main(String[] args) {
// a static method can access static fields
staticField = true;
// a static method can access instance fields through an object reference
Example instance = new Example();
instance.instanceField = true;
}
复制代码
文章翻译自Stack Overflow:stackoverflow.com/questions/4…
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END