#java #android
Для чего пишут модификаторы private static для переменных? Если модификатор private, тогда переменная доступна только тем методам, которые находятся "ниже", чем переменная, а, соответственно, другим классам она не доступна. Если модификатор static, тогда переменная доступна другим классам, без создания экземпляра класса, в котором переменная. Но если private static, выходит что-то подобное: "Переменная статическая, чтобы другие классы могли использовать ее, не создавая экземпляр класса, но я не разрешаю использовать ее другим классам!". В чем смысл? :D P.S. Вопрос из раздела Java, но, в основном, я встречаюсь с этим в Android`e, в нем нет никаких нюансов?
Ответы
Ответ 1
Модификатор private означает, что член класса с данным модификатором доступен только объектам данного класса внутри его реализации, включая его методы. То есть за пределами определения класса он не доступен. Модификатор static означает, что член класса с этим модификатором является общим для всех объектов этого класса. То есть для всех объектов этого класса создается единственный экземпляр этого члена. Все объекты этого класса совместно используют этот единственный экземпляр. Но тем не менее вы можете его сделать, например, открытым для внешнего мира (public), или же закрытым (private), чтобы только объекты этого класса имели к нему доступ. То есть функции этих модификаторов различны и не зависят друг от друга. Первый модификатор определяет доступ к члену класса. Второй модификатор определяет, что все объекты данного класса будут совместно использовать член класса, который определяется в единственном экземпляре за пределами каждого объекта.Ответ 2
private означает что поле доступно только в пределах самого класса - т.е. только методам класса, в котором оно объявлено. static означает что поле не привязано к конкретному экземпляру класса, а является общим для всех экземпляров. private static - общее для всех экземпляров класса поле, работать с которым можно только из методов этого класса. Типичный пример использования - реализация Singleton: public class Singleton { private static Singleton instance; public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } Ограничение доступа к private static Singleton instance + явное управление инициализацией позволяет гарантировать, что вызов Singleton.getInstance() всегда будет возвращать один и тот же объект. Будь поле не static - вызов возвращал бы разные объекты (и вообще поле из него нельзя было бы использовать). Будь поле не private - кто угодно мог бы влезть и переписать его значение на новый объект.Ответ 3
В дополнение к другим ответам: Утверждение Если модификатор static, тогда переменная доступна другим классам, без создания экземпляра класса, в котором переменная неверно! Правила доступности к полю/методу с модификатором static определяются, как и всегда, ключевыми словами private/protected/public. Ключевое слово static лишь означает, что если доступ есть, то он будет через имя класса (поправка для Java: возможен через имя класса), а без этого — лишь через конкретный объект (возможно, this).Ответ 4
private static чаще всего используется для переменных, которые не будут видны из другого класса. Например: private static String JDBC_URL = "jdbc:mysql://localhost/shopdb"; private static String JDBC_USERNAME = "username"; private static String JDBC_PASSWORD = "password";Ответ 5
private - переменная доступна только внутри класса. Ее могут использовать другие переменные и все методы класса (в теории все, но на практике вряд ли). static - означает что для всего множества объектов класса переменная будет общей. т.е. есть static String name = "Вася" object1.name = "Вова" установит значение переменной name во всех объектах класса равной "Вова"
Комментариев нет:
Отправить комментарий