Заведём жабу? Часть 12. Ключевое слово static

Ключевое слово static

Давайте рассмотрим схему.

Допустим у нас есть класс. В нашем случае класс Computer. Класс является как бы шаблоном для создания конкретного экземпляра класса. Класс Computer имеет методы on(); off(); load();, которые делают какие-то манипуляции с объектом. И переменные ram; и hdd;, которые будут характеризовать созданный объект. Методы и переменные не статичные. Во время выполнения программы создаются объекты на основе этого класса и тут важно помнить, что для каждого объекта Computer создаются отдельные методы on(); off(); и load(); и эти методы привязаны к конкретному экземпляру класса.

ТО ЕСТЬ БЕЗ ОБРАЩЕНИЯ К ОБЪЕКТУ МЫ НЕ СМОЖЕМ ВЫЗВАТЬ МЕТОД. Также и переменные класса. Для каждого объекта создаются свои переменные класса, которые привязаны к объекту и которые характеризуют состояние данного объекта. В нашем случае для первого, второго и третьего объекта методы on(); off(); load(); будут индивидуальны для каждого объекта, а также переменные ram; hdd; будут индивидуальны. В наших примера в Netbeans мы «через точку» вызывали методы, используя переменную со ссылкой на объект.

Когда мы нажимали точку, компилятор проверял все доступные методы объекта и показывал их. Теперь рассмотрим ситуацию, когда у нас есть статичные элементы.

В классе Computer наиболее подходящий претендент на статичный метод является метод print. Он не работает с переменными объекта, а просто выводит на экран строку и он может быть не привязан к объекту. Следовательно желательно сделать его статичным. Итак на схеме появился новый статичный метод print. При создании статичного элемента выделяет область памяти, которая помечена как область, связанная с классом Computer и в нём как раз находится метод print. Но эта область памяти, помеченная как Computer — это не экземпляр класса, а просто специальная область. Она не создана ключевым словом new, как мы это делали раньше, она создана загрузчиком классов виртуальной машины Java и там находятся все статичные элементы и мы МОЖЕМ ОБРАЩАТЬСЯ К МЕТОДУ БЕЗ СОЗДАНИЯ ОБЪЕКТА! Просто указав название класса и через точку метод print.

То есть как мы видим данный метод не привязан к конкретному экземпляру класса. Почему у объектов также отображается метод print? В объекте 1, в объекте 2, в объекте 3, если этот метод к ним не привязан? Потому что через ссылку на объект мы тоже можем обратиться к статичному методу, но по факту для любого объекта мы будем обращаться к одному и тому же методу, который находится в специальной области памяти.

Отсюда и название static — то есть статичный, не изменяемый, одинаковый для всех объектов. Кроме методов и переменных, статичными могут быть определённые блоки кода, внутренние классы.

Статичные переменные часто являются константами — то есть неизменяемыми значениями в программе. А также статичные переменные могут использоваться как некий аналог глобальных переменных, которые будут видны из любого места программы. То есть все объекты могут изменять какое-то одно значение, которое будет доступно для всех. Например какой-нибудь глобальный счетчик для всей программы.

Также статичные переменные применяются тогда, когда для класса нужно сделать какое-либо поле, которое будет постоянное на протяжении всей программы и которое будет привязано к этому классу.

Статичный метод не имеет права изменять свойство объекта, так как этот метод не привязан к конкретному объекту. Если мы попытаемся обратиться из статичного метода к переменной класса, которая не является статичной, то компилятор нам укажет на ошибку. Потому что не статичные элементы НЕЛЬЗЯ использовать в статичном методе.

Статичные элементы не манипулируют свойствами объекта и не привязаны к конкретному объекту.

Статичные методы и свойства можно вызывать:
1. Через имя класса. Если статичный элемент находится том же классе, откуда мы его вызываем — то название класса можно не писать — можно сразу указывать название статичного элемента. Именно это мы использовали, когда делали простейшую программку для подсчета госпошлины. Также это использовалось с вызовом метода doSmth — мы не писали название класса, а просто сразу начали вызывать этот метод.
2. Через ссылку на экземпляр класса.

Чаще используется первый вариант:

НазваниеКласса.статичный_элемент

Статичный элемент связан не с объектом, а с классом.

Посмотрим как это выглядит в программном коде.

Откроем Netbeans и перейдём в класс Computer. В классе Computer нас интересует метод print();


      protected void print (String str){
    
      System.out.println(str);
}

Для того, чтобы сделать print статичным методом, нам необходимо прописать ключевое слово static. К примеру сделаем так:


   public static void print (String str){
    
      System.out.println(str);
}

Заметьте, что после того, как мы прописали ключевое слово static — название метода Netbeans отобразил курсивом. Это сделано для визуального отличия статичного метода от не статичного. Также в навигаторе Netbeans метод отображается особым образом — кружочек и по середине палочка.

Это сделано для того, чтобы мы в навигаторе сразу видели какие методы являются статичными, а какие статичными не являются. Теперь давайте попробуем вызвать этот метод. Переходим в MyFirstProgram.

Будем вызывать двумя способами:

1) Через ссылку на класс.

2) Через ссылку на экземпляр класса.

Закомментируем всё, что есть внутри класса main. Для начала вызовем метод при помощи ссылки на класс. Можно просто написать Computer. (вот так с точкой) и Netbeans нам покажет, что метод print нам уже доступен.


public static void main(String[] args) {
        
       Computer.print("Test String");
}

Запустим программу и увидим, что программа выполнилась.

run:
Test String
СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

Теперь давайте создадим экземпляр класса. Удалим строку Computer.print(«Test String»); и напишем:

Computer comp = new Computer();

При создании будем использовать конструктор без параметров. Возможно, компилятор Netbeans посоветует создать такой конструктор в классе Computer (поскольку у нас там уже были конструкторы с параметрами), сделаем это.


public Computer() {
        
    }

Напишем в классе MyFirstProgram в методе main, comp. поставим точку — Netbeans отобразит доступный метод print. То есть метод print также доступен через ссылку на экземпляр класса. Вызывается один и тот же метод, который находится в определённой области памяти.

Computer comp = new Computer();
comp.print("Test String");

Данный метод также выполнится, однако Netbeans «делает» замечание, что мы делаем доступ к статичному методу print. То есть он «говорит,» что мы бессмысленно создавали объект для того, чтобы сделать доступ к методу print, потому что к методу print мы можем обратиться и без создания объекта. Netbeans «подсказывает,» что мы делаем лишние действия, создаём лишний объект.

Важный момент. Мы можем не создавать объект, а написать вот так:

 Computer comp = null;
comp.print("Test String");

то есть у нас нет ссылки на объект какой-либо, у нас есть просто переменная comp типа Computer. И в этом случае статичный метод тоже выполнится, поскольку статичный метод не привязан к экземпляру класса и может вызываться даже без ссылки на экземпляр класса. Достаточно иметь переменную просто нужного типа.

Также следует знать, что в отличие от методов объекта, от обычных методов, которые «живут» вместе с объектом, статичные элементы доступны на протяжении всей программы. То есть уборщик мусора даже если очистит память от каких-либо объектов, статичные элементы останутся.

Статичный метод выполняет какой-либо функционал без привязки к классу, то есть он не манипулирует свойствами объекта и никак не задействован в самом объекте. Просто это как бы вспомогательный метод. Поскольку для каждого объекта Computer не будет создаваться метод print, используя статический метод print мы немного сохраним память.

Краткий видеоурок о создании «шапки» официального документа в текстовых процессорах (Word, Open Writer).

1. Оформить ответ на обращение гражданина Иванова И.И. о нарушении его прав на фирменном бланке.
2. Ответ оформить по образцу на новом листе, в соответствии с требовании по делопроизводству.
3. Для редактирования и форматирования документа использовать инструменты на вкладке Главная.
4. Для установки линии в MS Word на вкладке Главная выберите инструмент Границы, и из списка выберите Нижняя граница

1) В Open Writer отобразите отобразите боковую панель. Вид — боковая панель.

2) В боковой панели выберите вкладку Стили. В открывшейся вкладке внизу выберите Все стили.

3) Нажмите правой кнопкой мыши по стилю горизонтальная линия. Нажмите изменить.

4) Настройте вкладки отступы и интервалы, шрифт, обрамление.

Заведём жабу? Часть 11. Абстрактные классы и интерфейсы.

Абстрактные классы и интерфейсы.

Начнём с понятия абстрактного класса. Чтобы понять что это такое рассмотрим пример из жизни. При создании ноутбуков фирмы часто дают им конкретные названия моделей. Каждая модель отличается от другой какой-то особенностью. Но смысл их один и тот же. ни выполняют одни и те же действия. По сути они являются ноутбуками, но каждый со своей уникальной реализацией.

Нельзя создать просто ноутбук — это бессмысленно. Фирма-производитель всегда создаёт какую-то конкретную модель. Потому что ноутбук — это абстрактное понятие. Или другой пример — машина. Заводы не производят просто машины — они производят конкретные модели машин. Каждая со своими характеристиками. Но основа у всех одна — машина. То есть поведение, действия у всех машин одинаковые. Машины могут ездить, сигналить, поворачивать и так далее. Но каждая модель делает это по своему, плюс добавляет какие-то свои удобства.

Можно сказать, что все машины используют какую-то одну модель поведения, то есть они должны уметь выполнять определённые действия, характерные для машины. Но как именно выполнять — это уже на усмотрение каждой модели. И здесь мы подошли к понятию абстрактного класса.

Абстрактный класс нужен для того, чтобы задать поведение для всех дочерних объектов или, можно сказать, задать модель поведения. Например абстрактное понятие ноутбук может задать модель поведения, которая будет характерна для всех ноутбуков. Но каждая конкретная модель будет реализовывать её по своему. Рассмотрим схему.

Читать дальше …

Заведём джаву. Внеурочная заметка №1.

Маленькая внеурочная заметка. Вызвана она, прежде всего, вопросами студентов, а зачем нам учить эту «джаву,» мы же будущие юристы, а не программисты. Где нам это пригодится?

Специально для группы ЮП-31 и публикую данную статью. Давайте рассмотрим простейший пример того, как же программирование может автоматизировать профессиональную деятельность юриста.

Вот такой случай: один человек просит у другого в долг деньги под расписку на определённое время. По окончании срока возвращать сумму не собирается, при этом является собственником гараж и автомобиля. Добросовестному заимодавцу ничего не остаётся, как подать исковое заявление в суд с тем, чтобы не деньгами, так автомобилем вернуть долг. Возникает спор имущественного характера, подлежащий оценки.

И тут, внезапно, заимодавец узнаёт, что подать исковое заявление — это не так просто. Нужно заплатить государственную пошлину. Эту самую пошлину впоследствии можно будет взыскать с должника, но чтобы подать иск изволь выложить здесь и сейчас. И если сумма займа была большой, то и пошлина будет не маленькой.

Размеры государственной пошлины по делам, рассматриваемым Верховным Судом Российской Федерации, судами общей юрисдикции, мировыми судьями регламентируются ст. 333.19 НК РФ:

1. По делам, рассматриваемым Верховным Судом Российской Федерации в соответствии с гражданским процессуальным законодательством Российской Федерации и законодательством об административном судопроизводстве, судами общей юрисдикции, мировыми судьями, государственная пошлина уплачивается в следующих размерах:

1) при подаче искового заявления имущественного характера, административного искового заявления имущественного характера, подлежащего оценке, при цене иска:

до 20 000 рублей — 4 процента цены иска, но не менее 400 рублей;

от 20 001 рубля до 100 000 рублей — 800 рублей плюс 3 процента суммы, превышающей 20 000 рублей;

от 100 001 рубля до 200 000 рублей — 3 200 рублей плюс 2 процента суммы, превышающей 100 000 рублей;

от 200 001 рубля до 1 000 000 рублей — 5 200 рублей плюс 1 процент суммы, превышающей 200 000 рублей;

свыше 1 000 000 рублей — 13 200 рублей плюс 0,5 процента суммы, превышающей 1 000 000 рублей, но не более 60 000 рублей;

Подсчитать — ничего сложного, когда таких исков 2 или 3. А когда их десятки? Вот этот процесс мы и автоматизируем, написав прооостенькую консольную программку на java.

Читать дальше …

Краткий видеоурок о работе с многоуровневыми списками в текстовых процессорах (Word, Open Writer).

1. Оформить нумерованный и маркированный список по образцу
2. Заголовок набрать обычным способом выбрав положение текста на странице по центру.
3. Для построения нумерованного списка необходимо курсор поставить в новую строку и выбрать инструмент Нумерация во вкладке Главная. Набрав первую строку нажмите Enter, и цифра 2 будет поставлена автоматически и т.д.
4. Для построения маркированного списка необходимо курсор поставить в новую строку и выбрать инструмент Маркеры во вкладке Главная. Набрав нужную строку нажмите Enter, и очередной маркер будет поставлен автоматически и т.д
5. Для установки многоуровневого списка необходимо поставить курсор в новую строку выбрать инструмент Увеличить отступ на вкладке Главная, а затем выбрать инструмент Многоуровневый список, и выбрать из списка нужный вид списка. По мере необходимости можно изменить вид уровней списков. Для возврата на предыдущий уровень необходимо выбрать инструмент Уменьшить отступ на вкладке Главная.

Краткий видеоурок о работе с табуляторами по левому краю, по центру и по разделителю

1. Создать текстовый документ по образцу.
2. Для установки табуляторов используйте галерею (коллекцию) табуляторов, расположенных вверху слева от линейки. Подведите курсор мыши и щелкайте по табулятору, пока не появиться нужный Вам табулятор. Затем подведите курсор мыши на нужное место линейки и щелкните для установки табулятора.
3. При редактировании документа, чтобы курсор стал в место установки табулятора необходимо нажать клавишу Tab, а затем набирать нужный текст или символы. Выберите табуляторы: для единиц измерения – по цен-тру, а для цифр – по разделителю.
4. Что табулятор удалить необходимо подвести курсор к табулятору, захватить его и вытащить за пределы линейки (лучше вытащить на окно с табуляторами).

Составляем заявление, используя табуляторы в MS Word и Open Writer

 

  1. Запустить программу MS Word (Пуск — Все программы — Microsoft Office — Microsoft Office Word 2013 или Пуск — Все программы — OpenOffice — OpenOffice Writer).
  2. Для постановки табуляторов необходимо подвести указатель мыши на линейку к цифре 9,5 и щелкнуть левой клавишей мыши, предварительно выбрав вид табулятора «по левому краю» (в верхнем левом углу линейки).
  3. Верхнюю часть служебной записки оформить с использованием табуляторов.
  4. Набор текста в документе, его редактирование производить с помощью инструментов на вкладке Главная.

Пример текста для набора.

Заведём жабу? Часть 10. Полиморфизм.

Полиморфизм

Полиморфизм — одно из важнейших понятий ООП, тесно связанное с наследованием. Слово полиморфизм происходит от слова полиморфный — то есть имеющий разные формы. Если есть родительские и дочерние объекты и в них есть одинаковые методы, то Java будет сама определять какой из методов нужно выполнить во время выполнения программы.

Рассмотрим на примере. Открываем Netbeans, файл MyFirstProgram. Для начала внесём изменения. В файле Computer.java изменим модификаторы доступа переменных с public на protected, чтобы получать к ним доступ из класса Notebook.

Изменим первый конструктор в классе Computer следующим образом:

public Computer(String name) {

this.name = name;

}

Класс Notebook переделаем следующим образом:

package testobject;

public class Notebook extends Computer{

public Notebook(String name) {

super(name);
}

public Notebook (String name, int ram, int hdd, double weight) {

super(name, ram, hdd, weight);
}

@Override
public void on(){

print("Notebook. Я включился. Моя модель " + getName());

}

@Override
public void load() {

}
}


Ключевое слово super говорит нам о том, что мы будем использовать переменные из родительского класса Computer. В общем наши файлы могут выглядеть примерно так:

Читать дальше …

Заведём жабу? Часть 9. Наследование.

Наследование.

Прежде, чем приступить к практике наследования следует повторить знния по модификаторам доступа. Всего существует 4 модификатора доступа.

public — доступ с любого места. Чаще всего используется для внешнего интерфейса.

protected — доступ внутри пакета и в дочерних классах. Чаще всего используется при наследовании.

без указания (или по умолчанию) — доступ внутри пакет. Такой вариант использовать нежелательно. Лучше указывать явно модификатор доступа.

private — доступ только внутри класса. Чаще всего используется для скрытия реализации (инкапсуляции). То есть для каких-либо служебных методов, которые должны работать только внутри класса.

Список представлен в порядке уменьшения области видимости (сверху-вниз).

Давайте попробуем использовать наследование в программном коде.

Наш файл MyFirstProgram.java выглядит примерно так:


package myfirstprogram;
 
import testobject.Computer;
 
public class MyFirstProgram {
 
    public static void main(String[] args) {
       
      Computer comp = new Computer("IBM", 2048, 320, 2);
       
//     comp.setName("IBM");
//       
//      comp.setRam(2048);
//      
//      comp.setHdd(320);
       
      comp.on();
       
      comp.load();
       
      comp.off();
       
    }
     
}

Читать дальше …