среда, 19 июля 2017 г.

Пару слов обо мне

Зовут меня Игорь, живу в г. Одессе, работаю на работе, лет мне слегка за 30-ть. Программирование никогда раньше не изучал, и вообще, я гуманитарий.
На кой хрен мне сдалось это программирование, спросите вы? Этого я пока ещё и сам не знаю. Куда приведёт меня эта дорога? Посмотрим... Я ведь ещё только в начале пути.

Обучаюсь я вот по этому видеокурсу: https://www.youtube.com/playlist?list=PLkKunJj_bZefB1_hhS68092rbF4HFtKjW

Использую учебник: https://docs.oracle.com/javase/tutorial/java/TOC.html

Смотрю на блоги:
http://developer.alexanderklimov.ru/android/java/java.php
http://kostin.ws/java/

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

День двадцатый

Экстернализация - это выборочная сериализация, путём использования методов writeExternal () и readExternal (). Порядок чтения должен быть точно такой же как порядок записи.

java.net.URL

Чтение данных с помощью класса URL:
  1. создаётся экземпляр класса URL
  2. создаётся экземпляр класса URLConnection и открывается соединение с использованием URL
  3. берётся ссылка на входящий поток данных, путём вызова метода URLConnection.getInputStream ( ).
  4. считываются данные из потока

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

День девятнадцатый. Ввод-вывод.

3 шага по работе с I/O потоками:
  1. открыть поток (файл, url и т.д.)
  2. считать либо записать данные в этом потоке
  3. закрыть поток
Буферизированные потоки
Класс FileInputStream заворачиваем в BufferedInputStream. Затем выносится некоторое количество байтов в память за один раз, а уже потом считывается из этой памяти (буфера).

Чтение потоков со знаками
FileReader - читать
FileWriter - писать
FileInputStream - InputStreamReader - BufferReader

Запись в поток со знаками
FileOutputStream - OutputStreamWriter - BufferedWriter

Файлы API
Класс Files - упрощает операции с файлами (создание, удаление, копирование и т.д.)
Класс Path - программно выдаёт путь к файлу в системе.

Сериализация
Перевод объекта в строку байтов, передача этой строки на другую JVM с последующей реконструкцией в исходный объект, называют сериализацией.
Чтобы сериализировать класс, нужно в него имплиментировать специальный интерфейс java.io.Serializable - это пример маркер-интерфейса (в нём нет методов, которые необходимо было бы имплиментировать).

Ключевое слово Transient
Этим словом помечаем поля, которые не хотим сериализовывать.

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

День восемьнадцатый. Wildcards.

В параметрах дженериков можно кроме конкретного типа данных также указывать:
  • <?> - пока ещё неизвестный тип данных
  • <? extends X> - все типы подкласса Х
  • <? super X> - все типы суперкласса Х.

суббота, 8 июля 2017 г.

День семьнадцатый

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

Generics (параметризированные классы)
Записываются примерно так: ArrayList < ... >
В таких угловых скобках указывается, какого конкретно типа данные будут храниться в данном классе. Т.е. класс уже параметризирован и в него нельзя будет запихнуть объект другого типа - компилятор выдаст ошибку.

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

PS.: Какие-то они уж слишком хитро-выдроченные эти генерики. Не сразу то и въедешь, что к чему.

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

День шестнадцатый. Обработка ошибок.

Stack Trace - позволяет отследить выполнение программы до совершения ошибки.
Try-catch блок - "попробуй сделать одно - если не получится - лови другое". В части catch - может быть несколько вариантов.
Это относится к области runtime ошибок (исключений), т.е. таких, которые возникают во время выполнения программы. Исключения можно кастомизировать.

Иерархия исключений
Отлавливание множественных исключений. В часть catch попадает объект, описывающий проблему.

try {
................ }
       catch (Excp1 | Excp2 | Excp3 e) {
................ }
}

Ключевые слова:
throws - метод может выдавать ошибку, но блок try-catch пишется снаружи - там, откуда метод будет вызываться.
finally - в блоке finally содержится код, который будет отработан в любом случае.
throw - бросает экземпляр ошибки, а не только указывает на её возможность.

Java Collections Framework - классы и интерфейсы из пакетов java.util и java.util.concurrent.
Коллекции хранят объекты и не хранят примитивы.

Set - не хранит дубликаты элементов
List - хранит элементы, в которых возможны повторения
Queue - поочередное использование элементов
Map - хранение по принципу "уникальный ключ - элемент"

четверг, 6 июля 2017 г.

День пятнадцатый. Сервера.

Виды серверов:
  • вэб-серверы - поставляют статический контент, т.е. на таком сервере ничего не выполняется - содержимое просто передаётся браузеру. Apache, nginx, IIS
  • Java Servlet Container - содержит JVM и выполняет java-программы (java-servlets). Содержит динамический контент. Apache Tomcat, Jetty, Resin
  • Java Application Servers - содержат JVM,  Java Servlet Container и ещё кучу других контейнеров. Может выполнять любые java-программы, написанные по спецификации Java EE. Web Sphere, WildFly, GlassFish
PS.: Установить Tomcat и подключить его к Эклипсу - вообще ничего сложного...  И пятилетний ребёнок бы справился.