среда, 27 февраля 2013 г.

Java Static Fields

Большинство людей, начинающих разрабатывать на Java не понимают различая между "public static String" и "public String" и расницу между классом и объектом. Здесь будет представлено коротрое объянения.
Класс определяет шаблон данных и операций, которые доступны в JVM после того как вы создали объект этого класса.

Например,
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'ы).

Комментариев нет:

Отправить комментарий