Большинство людей, начинающих разрабатывать на 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'ы).
Комментариев нет:
Отправить комментарий