Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Статические элементы
Как уже отмечалось, помимо обычных полей и методов, в классе могут быть статические члены. От нестатических членов статические принципиально отличаются тем, что они общие для всех объектов данного класса. Например, если речь идет о нестатическом поле, то у каждого объекта класса это поле имеет свое уникальное для объекта значение. Если поле является статическим, то у всех объектов значение этого поля одно и то же. В некотором смысле статические поля напоминают глобальные переменные языка С++, хотя аналогия достаточно натянутая. Со статическими методами ситуация несколько сложнее, поэтому сначала рассмотрим особенности объявления и использования статических полей. Для объявления статического члена класса, в том числе статического поля, используется идентификатор static. Синтаксис описания статического поля следующий: static тип_поля имя_поля; Перед ключевым словом static также может следовать спецификатор доступа к полю (см. далее в этой главе). Инициализация значения статического поля выполняется в специальном статическом блоке. Статический блок также выделяется ключевым словом static, после которого в фигурных скобках следуют команды инициализации статических полей класса. Статический блок не является обязательным. Синтаксис описания статического блока такой: static{ // начало статического блока // статический блок } // завершение статического блока Вне класса обращение к статическим элементам может выполняться обычным способом (через объект), однако, как правило, к ним обращаются непосредственно через класс: после имени класса через точку указывается имя статического поля. Статические методы класса от обычных отличаются в первую очередь тем, что могут обращаться только к статическим полям класса. Причина достаточно очевидна: метод, который не связан с конкретным экземпляром класса, может, естественно, оперировать с полями, тоже не связанными с конкретным экземпляром, поскольку действие метода должно затрагивать сразу все объекты, относящиеся к классу. Кроме того, в статических методах недопустимо использование ключевых слов this (ссылка на экземпляр класса, из которого вызывается метод) и super (ссылка на экземпляр суперкласса, на основе которого создан вызывающий метод производный класс). Причина та же, что и в первом случае. Объявляется статический метод так же, как и статическое поле. В частности, в сигнатуре метода указывается ключевое слово static: static тип_результата имя_метода(список аргументов){ // тело метода } Вызов статического метода вне класса, в котором он описан, осуществляется в формате имя_класса.имя_метода. В листинге 4.2 приведен пример объявления и использования статических полей и статического метода.
Листинг 4.2. Класс со статическими элементами class UsingStatic{ // Статические поля: static int a=3; static int b; // Статический метод: static void meth(int x){ System.out.println(" x=" +x); System.out.println(" a=" +a); System.out.println(" b=" +b); } // Статический блок: static{ System.out.println(" Статический блок: "); b=a*4; } продолжение Листинг 4.2 (продолжение) // Вызов статического метода: public static void main(String args[]){ meth(123); } } В классе UsingStatic описано два статических поля a и b типа int и статический метод meth(). Для статического поля a указано значение 3. Статическое поле b значением не инициализировано. Инициализация этого поля выполняется в статическом блоке командой b=a*4, причем предварительно выводится сообщение Статический блок. Статический метод meth() результат не возвращает. Ему передается целочисленный аргумент. Действие метода состоит в последовательном выводе сообщения со значениями аргумента метода и статических полей класса. В этом же классе UsingStatic описан метод main(), в котором всего одна команда вызова метода meth() с аргументом 123. Обращаем внимание, что поскольку статический метод вызывается из того же класса, в котором он описан, для вызова метода достаточно указать его имя. В результате выполнения программы мы получим следующее: Статический блок: x=123 a=3 b=12 Выполнение статического блока происходит при загрузке программного кода класса, поэтому еще до вызова метода meth() в главном методе программы статическая переменная b получает значение благодаря предварительному выполнению команд статического блока. Еще один пример использования статических элементов приведен в листинге 4.3.
Листинг 4.3. Использование статических элементов class MyStatic{ // Статические поля: static int a=50; static int b=120; // Статический метод: static void callme(){ System.out.println(" a=" +a); }} // Использование статических элементов: class StaticDemo{ public static void main(String args[]){ // Вызов статического метода через класс: MyStatic.callme(); // Объекты класса: MyStatic obj1=new MyStatic(); MyStatic obj2=new MyStatic(); // Вызов статического поля через объект: obj1.a=-25; // Вызов статического поля через объект: System.out.println(" a=" +obj2.a); // Вызов статического поля через класс: System.out.println(" b=" +MyStatic.b); }} Результатом выполнения программы является следующая серия сообщений: a=50 a=-25 b=120 В данном случае описано два класса. В классе MyStatic описаны два статических целочисленных поля a и b с предопределенными значениями 50 и 120 соответственно. Кроме того, в классе описан статический метод callme(). Метод не имеет аргументов и не возвращает результат, а его действие состоит в выводе значения статического поля a. В главном методе программы в классе StaticDemo создается два объекта obj1 и obj2 класса MyStatic. Однако предварительно с помощью команды MyStatic.callme() вызывается метод callme(). Другими словами, статический метод вызывается еще до того, как созданы объекты класса — в них для вызова статического метода или обращения к статическому полю нет необходимости. Далее командой obj1.a=-25 полю a присваивается новое значение. Формально в данном случае речь идет о поле объекта obj1, но поскольку поле статическое, то эффект «глобальный». В этом несложно убедиться, проверив результат выполнения команды System.out.println(" a=" +obj2.a). Наконец, пример обращения к статическому полю через ссылку на класс представлен командой System.out.println(" b=" +MyStatic.b). Хочется особо обратить внимание на несколько важных обстоятельств. Так, в приведенном примере отсутствует статический блок. Обращение к статическим элементам выполняется как через ссылку на класс, так и через ссылки на конкретные экземпляры класса. В последнем случае изменение значения поля для одного объекта означает такое же изменение этого поля для прочих объектов (на самом деле речь идет об одном общем для всех объектов поле). Кроме того, для использования статических элементов вообще нет необходимости создавать экземпляры класса (объекты).
|