静态变量和方法属于类而不是它的实例(对象)。通常使用className.staticMethod()或className.staticVariable访问它们,但我们也可以使用类实例访问或调用它们,例如classInstance.staticMethod()和classInstance.staticVariable。
我的第一个问题是
为什么首先允许通过类实例访问静态方法/函数?它有任何用例吗?
下一个问题如下。考虑下面的类
public class Counter{
private static int count = 0;
public static synchronized int getCount()
{
return count;
}
public synchronized setCount(int count)
{
this.count = count;
}
}
在多线程环境中,如果这些函数被调用如下
Counter myCounter = new Counter();
myCounter.setCount(10);
System.out.println(myCounter.getCount());
第二个问题是
这两个函数会有单独的锁还是相同的锁(考虑到它们都被 myCounter 对象调用)?如果线程处理静态方法仍然获取类级锁,它如何在内部确定它必须使用什么锁?