пятница, 30 июня 2017 г.

День девятый

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

com.example.head

Если запускающий класс (тот, который содержит метод main) должен использовать классы, которые находятся в других пакетах, то их нужно импортировать:

import    com.example.head.class1

Уровни доступа к данным. Классы, методы и переменные могут иметь разные уровни доступа:
  • private - доступ только внутри заданного класса
  • protected - доступ внутри класса и всех сабклассов
  • public - доступ из любого места
  • package  - доступ по умолчанию, только внутри данного пакета
Если нет уверенности, какой уровень доступа давать классам и переменным, то лучше использовать private доступ. Впоследствии, его всегда можно изменить на более широкий.

Final:
  • final метод не может быть переопределён
  • final класс не может содержать сабклассы, т.е. его нельзя наследовать
  • final переменная - значение ей можно присвоить только один раз 
  • final также можно включить внутрь обработчика ошибок

 Когда программа идёт в продакшн - то нужно постараться как можно больше всего сделать final. Быстродействие будет лучше.

Основные признаки, по которым можно вычислить объектно-ориентированность языка программирования:
  • наследование
  • инкапсуляция
  •  полиморфизм
Наследование позволяет не копипастить один и тот же код многократно из класса в класс.

четверг, 29 июня 2017 г.

День восьмой

Цикл While (пока) - работает до тех пор, пока выполняется заданное условие.

В метод main можно передавать массив параметров через командную строку. При этом, все эти параметры имеют тип данных - строка. Потом эти строки можно преобразовать в другие типы данных через "обёрточный" класс (wrapper class).

Хардкодинг - когда в программе жёстко указываются значения данных, которые нельзя в  последствии изменить.

В общем и в целом, программа - это нечто такое, что считывает и обрабатывает данные из базы данных.

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

среда, 28 июня 2017 г.

День седьмой - циклы, циклы, циклы, циклы...

Сегодня подробнее разбирал циклы for и foreach. Вроде как всё элементарно просто и понятно. Пока не дошёл до вложенных циклов... Тут я завис.
Вот, например, табличка умножения:



Смотрю я на этот вложенный цикл и думаю - как же ты сука работаешь?  Погуглив на скорую руку - никакого внятного объяснения я не нашёл. Пришлось взять в зубы дебагер и ковырять самому...
Оказывается, вот оно как работает:
  • Джава берёт начальное значение переменной i, равное единице
  • проверяет условие i < 10 - условие выполнено
  • кидает  эту единицу во внутренний цикл for
  • во внутреннем цикле точно так же берёт начальное значение переменной j, тоже равное 1
  • проверяет условие j < 10 - условие выполнено
  • a = 1 * 1, следовательно a = 1
  • выводит на экран 1 |
  • затем переходит на итерацию вложенного цикла: j = j + 1, следовательно j = 2
  • снова проверяет условие j < 10 - условие выполнено
  • a = 1 * 2, следовательно a =2
  • выводит на экран 2 |
  • и т. д. до 9. А вот когда значение j доходит до 10 - происходит самое интересное 
  • когда j = 10, то условие j < 10 не выполняется и программа выходит из внутреннего цикла и выполняет следующий оператор внешнего цикла System.out.println() - перенос строки. А потом...
  • а потом выполняется итерация внешнего цикла: i = i + 1, следовательно i теперь равно 2
  • эта двойка попадает во внутренний цикл, в котором: a = 2 * 1 откуда  a = 2
  • выводит на экран с новой строки 2 |
  • ну и т. д. и т. п.
  • цикл будет работать до тех пор, пока переменная  i не станет равной 10.
 Только одно для меня загадка - зачем там вначале переменной а присваивается значение 0 ?

вторник, 27 июня 2017 г.

День шестой

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

Массив - хранит данные одинакового типа. Когда создаём массив, то нужно точно знать, сколько элементов данных в нём будет. Объекты создаются отдельно в памяти, а массив хранит только адреса этих объектов. Элементы данных, которым значение в массиве не присваивается, имеют по умолчанию значение null.

Вопрос: Чем ограничена размерность массива?
Ответ: Исключительно здравым смыслом.

Обёртки, автобоксинг и анбоксинг.
В Java для каждого примитивного типа данных есть свой "обёрточный" класс.
int - Integer
Он позволяет добавлять примитивные классы, как объекты, а так же, у него есть куча своих полезных и не очень методов.
Ещё Java позволяет автоматом добавлять и вынимать примитивы в обёрточные классы.

Циклы
Java поддерживает несколько типов циклов. Используют их для повторения одних и тех же действий многократно.
Для выхода из цикла используем:
  • continue - прекращает выполнять цикл и возвращается к проверке условий цикла
  • break - программа выходит из цикла и начинает выполнять код, следующий за циклом.

Overriding

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

понедельник, 26 июня 2017 г.

День пятый

Параметры метода - могут указываться в скобках после названия метода:

метод (тип_данных параметр1, тип_данных параметр2, тип_данных параметр3... )

int calcPriceTour (int numberOfNights, int value, String country)

Если таким образом объявляешь метод, то впоследствии его можно вызвать уже с указанием всех нужных параметров:

calcPriceTour ( 5, 300, "Egypt")

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




if switch


воскресенье, 25 июня 2017 г.

День четвёртый

Впервые написал программу. Ура!
























  1. Создаём общий класс, в котором:
  • указываем общие (глобальные) свойства класса
  • определяем метод вычисления и параметры возвращаемых значений
     2. Создаём класс, с которого будет запускаться программа. В нём:
  •  создаём новый экземпляр класса с атрибутами из общего класса и присваиваем значения этим атрибутам
  • выводим результат
Какова последовательность выполнения этой программы?
  • программка-выполнялка под названием TestAge создаёт экземпляр класса Age
  • потом присваивает значения атрибутам, указанным в классе Age
  • затем вызывает метод nameAge ( ) , который и использует указанные значения атрибутов
  • метод nameAge ( ) имплиментирует алгоритм определения возрастного статуса, а затем возвращает вычисленное значение.
Именно через этот новый экземпляр а - java runtime и обращается к свойству myAge класса Age. И через эту же переменную а вызывается метод nameAge ( ) , который уже выполняется с указанным значением. А уже результат этого выполнения передаётся в объявленную переменную yourAge.

суббота, 24 июня 2017 г.

День третий

В Java обнаруживается 8 примитивных типов данных:
  • byte
  • short
  • int
  • long
  • float
  • double
  • char
  • boolean
Виды комментариев:

/* Блок текста
в несколько строк */

// Одна короткая строка

/** Блок комментариев для утилиты javadoc **/

Ну ок, ток я не могу понять, зачем такие сложности? Почему нельзя было сделать универсальное обозначение для любых типов коментов?

Public - модификатор доступа.

Операторы if и switch. 

С какими типами данных работает оператор switch?
  • byte, short
  • char, int
  • String
 В каких случаях используется if-then-else, а в каких - switch?
  1. удобочитаемость
  2. вид значений
  3. if-then-else основан на диапазоне значений или состояний
  4. switch - тестирует выражения, основанные только на единичном целом значении, ненумерованном или объекте String.
При выполнении метода main - он сначала обращается к сабклассу, а если в сабклассе есть метод с таким же названием и атрибутами как в суперклассе, то тут же он и выполняется и в суперкласс уже не идёт. На этом свойстве основан принцип переопределения (Overriding).

Конструктор - нужен для автоматической инициализации переменных.

Когда после ключевого слова new, мы пишем имя класса со скобками, то на самом деле мы вызываем конструктор класса.

Overriding - два метода с одинаковой сигнатурой, но разной логикой
Overloading - два метода с одинаковым именем, но разными аргументами

пятница, 23 июня 2017 г.

День второй

Класс - представление типа данных.

class - method - properties

String - строка - текстовый тип переменной.
int - целое число (сокращение от integer).

Для переменных важно где именно мы их объявляем:
  •  на уровне класса
  • внутри метода (локально)
После названия класса - ставим фигурные скобки {}, после метода - обычные ( )
Можно сразу присвоить значение переменной, а можно просто объявить, но значение не присваивать.

Вопрос: Почему названия классов пишут с заглавной буквы? Есть ли в этом какой-то сакральный смысл?
Ответ: Это просто грамматика такая. Это ж язык. Никакого особого смысла в этом нет. Просто договорились делать именно так.

Переменные имеют срок жизни. Например, локальные "живут" только пока выполняется метод, к которому они относятся.

Экземпляр класса создаём внутри метода main с помощью оператора new .

Inheritance - наследование

class Name2 extends Name1

Name1 - считается superclass
Name2 - subclass

Если перед классом стоит словечко public , то снаружи этого класса все другие классы могут вызывать сатану этот метод.

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

Instanses - экземпляры объектов создаются в Heap Memory.

&& - логическое и


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





четверг, 22 июня 2017 г.

День первый

Почему именно JAVA?
  • один из самых используемых языков 
  • есть "правильный" видеокурс и учебник
Сколько времени собираюсь учить?
  • примерно один месяц, а там посмотрим, как пойдёт. 










Имплементация - программная или аппаратная реализация алгоритма, протокола, технологии и т.д.
Форк (ветка) - использование кода одной программы в качестве старта для другой.

Любая программа, написанная на Java, живёт и работает внутри JVM.
В JAVA нет привязки программы к платформе, на которой та выполняется.


В JAVA -
исходный код - байткод - машинный

Walkthrough - пошаговое руководство

HelloWorld.java - исходный код
HelloWorld,class - байт-код

Volume - том
Runtime - время выполнения

Компиляция - трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком к машинному коду. Выполняется в специальной программе - компиляторе . Входной информацией для компилятора является исходный код.

3 шага для запуска java-программы:
    1. написание исходного кода
    2. компиляция исходного кода в компиляторе
    3. запуск программы.
    JAVA - это язык, чувствительный к регистру.
    Каждый класс начинается с открывающей фигурной скобки.
    Программы создаются компилируются и запускаются в IDE (интегрированная среда разработки).  В частности - Eclipse, (Workbench),


    Вопрос: какова структура языка? Сколько существует методов?

    Х - художник