Статические переменные и метод относятся к классу, а не к его экземплярам (объектам). обычно они доступны с использованием className.staticMethod() или className.staticVariable, но мы также можем получить доступ или вызвать их с использованием экземпляров класса, например. classInstance.staticMethod() и классInstance.staticVariable.Что происходит, когда мы вызываем статический метод/функцию с помощью экземпляра класса?
Мой первый вопрос является
Почему позволяют доступ статические методы/функции через экземпляры класса в 1-е место? Имеет ли он какой-либо прецедент?
Следующий вопрос заключается в follows.Consider следующий класс
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());
2 вопроса
Will обе функции имеют отдельный замок или тот же замок (учитывая, что оба они являются , вызываемые объект myCounter)? Если статический метод обработки потоков все еще приобретает блокировку уровня класса, как он внутренне выясняет, какую блокировку он должен принять?
Они используют разные блокировки. Метод экземпляра имеет блокировку объекта экземпляра ('myCounter' lock), а статический метод имеет блокировку экземпляра класса (блокировка Counter.class). –