Большинство людей, начинающих разрабатывать на Java не понимают различая между "public static String" и "public String" и расницу между классом и объектом. Здесь будет представлено коротрое объянения.
Например,
01.
class
BlogPost {
02.
public
BlogPost(String inString) {
03.
text = inString;
04.
BlogPost.latest =
this
;
05.
}
06.
public
String text =
""
;
07.
public
static
BlogPost latest;
08.
09.
}
Когда вы делаете так
1.
BlogPost myPost =
new
BlogPost(
"Hello"
);
Вы передаете JVM инструкцию для аллокации памяти и привязывате ссылку на этот блок памяти, после этого когда вы обращаетесь к переменной myPost вы обращаетесь к тому блоку памяти. BlogPost - это класс, myPost - это объект, ссылающийся на объект в памяти для экземпляра класса BlogPost. Когда я пытаюсь создать объект класса BlogPost, JVM ищет в classpath откомпилированное определение класса BlogPost c конструтором, принимающим один аргумент типа String.
Важной особенносью static полей и методов является то, что они используются классом, не экземпляром этого класса. Это используется для потокобезопастности и в других ситуациях, где множество объектом могут читать или писать одно статическое поле.
Существуют сложные случает, когда в приложение используется несколько ClassLoader'ов. Тогда если класс BlogPost был загружен разными ClassLoader'ами, то значения их статических полей будут разными для разных потоков (Если эти потоки имеют различные ClassLoader'ы).
Комментариев нет:
Отправить комментарий