Что такое джава кор
Java Core
Java Core — это термин, который может использоваться по-разному в разных контекстах. Если он встречается в вакансиях на разработчика уровня Junior, то под ним обычно подразумевается базовое знание языка Java. Но компания Sun Microsystems, в которой разработали язык Java, определяет Core Java как вычислительную платформу, основанную на Java.
Существуют три вычислительные платформы, основанные на Java:
История
Язык Java был разработан в 1995 году Джеймсом Гослингом в компании Sun Microsystems.
Сначала язык назывался Oak в честь дуба, который рос около офиса Гослинга ( oak в переводе с английского — дуб). Затем язык получил новое название — Green. Но в итоге он стал называться Java в честь кофе с острова Ява в Индонезии (однако название языка читается «джава»).
Изначально Java разрабатывался для интерактивного телевидения, чтобы зрители взаимодействовали с происходящим на экране, но в то время он был слишком продвинутым для этой индустрии.
Где применяется Java?
Java — это язык широкого назначения. Его основной принцип: «Пиши один раз, запускай где угодно», или WORA (Write Once, Run Anywhere). Это значит, что скомпилированный (преобразованный в машинный код) Java-код можно можно запустить на всех поддерживающих Java платформах без необходимости повторной компиляции.
Java-приложения обычно компилируются в байт-код (набор инструкций, выполняемый виртуальной машиной Java). JVM устанавливается на платформу, на которой предстоит выполнение Java-программы. На Windows, к примеру, ее нужно устанавливать самостоятельно, а на Android JVM уже вшита.
Достоинство такого способа выполнения программ — это независимость байт-кода от операционной системы, что и позволяет выполнять Java-приложения на таком большом количестве устройств.
Сейчас Java остается универсальным языком программирования, который используют компании разного масштаба в своих продуктах. Вот где он применяется:
Android. Несмотря на популяризацию Kotlin в последнее время, на Java написано огромное количество приложений для платформы Android.
Серверные приложения. Часто на Java пишутся приложения, не имеющие интерфейса. Они используются для получения, обработки и передачи данных на сервере.
Десктопные приложения. В том числе и много IDE (интегрированная среда разработки — комплекс программных средств, используемый для разработки ПО) разработаны на Java — например, IntelliJ IDEA, Eclipse, Netbeans.
Веб-приложения. Например, большое количество RESTful-сервисов (REST — стиль архитектуры программного обеспечения для распределенных систем) и сервлетов (интерфейс Java, реализация которого расширяет функциональные возможности сервера) было создано с использованием Java.
Встраиваемые системы. От банкоматов, платежных терминалов и станков с ЧПУ до бытовой техники — Java может использоваться практически везде, как и обещали его создатели.
Большие данные. Java не доминирует в этой области, но применяться может.
Читайте также: Кому и для чего нужен Java?
Преимущества Java
Java входит в первую тройку языков по индексу TIOBE (индекс, оценивающий популярность языков программирования) уже 20 лет.
Разработка через тестирование. Этот подход к программированию не является изобретением разработчиков языка, но создание библиотеки для модульного тестирования JUnit — это одно из самых больших достижений Java.
Читайте также: Какие виды тестирования бывают и чем занимаются тестировщики?
Объектно-ориентированное программирование. ООП позволяет программе быть более безопасной, так как объекты скрывают информацию, к которой доступа быть не должно. Также ООП упрощает обслуживание и модернизацию старого кода.
Простой синтаксис. Возможно, синтаксис Java не так дружелюбен, как синтаксис Python. Однако изучение Java происходит легче, чем C или C++, что позволяет новичкам быстрее его осваивать.
Независимость от платформы. Если программа не использует специфичные для какой-то операционной системы функции, то ее можно перенести полностью или частично.
Автоматическое управление памятью. Программистам не нужно писать дополнительный код для управления памятью, так как Java работает с ней самостоятельно. Поэтому в Java нет риска забыть выделить память, что могло бы привести к проблемам с производительностью.
Многопоточность. Java позволяет эффективно использовать время процессора, запуская потоки одновременно.
Большое сообщество. Помимо поддержки Oracle, на помощь разработчикам приходит большое сообщество.
Основные части Java Core
Синтаксис и базовые конструкции Java
Синтаксис Java близок к C и C++, но имеет меньше низкоуровневых средств, чем они. Поэтому если вы знаете один из си-подобных языков, то выучить Java вам будет легко. Однако, в отличие от C++, Java не поддерживает функциональное программирование и является строго объектно-ориентированным языком программирования.
Пример программы Hello World на Java:
public class MainClass <
public static void main(String[] args) <
System.out.println(«Hello, SkillFactory!»); // Печатает “Hello, SkillFactory!” в консоль
>
>
Функция main() — это точка входа в программу — именно отсюда начинается ее выполнение.
Также для успешной работы на Java необходимо знать базовые конструкции языка:
Объектно-ориентированное программирование (ООП)
Сейчас структурные и процедурные подходы программирования уходят в прошлое, а объектно-ориентированное программирование доминирует.
Для понимания объектно-ориентированного программирования нужно разобраться с понятиями класса, объекта и тем, как применять на практике основные принципы ООП: абстракцию, наследование, полиморфизм и инкапсуляцию.
Объект — это некоторая сущность в цифровом пространстве, которая обладает определенным состоянием (поля класса) и поведением (методы). Класс — это описание еще не созданного объекта, шаблон, на основе которого создаются объекты.
Абстракция. Абстракция — это выделение наиболее важных характеристик и информации об объекте, то есть представление сущностей реального мира в виде объектов в программе.
Наследование. Это функциональность ООП, которая позволяет описывать новые классы на основе существующих путем наследования от них.
Полиморфизм. Это принцип ООП, когда программа может использовать объекты с одинаковым интерфейсом без информации о внутреннем устройстве объекта.
Инкапсуляция. Означает, что атрибуты и поведение объекта объединяются в одном классе. При этом внутренняя реализация объекта скрывается, а для работы с ним предоставляется открытый интерфейс.
Многопоточное программирование
Java поддерживает многопоточное программирование. Это значит, что в приложении можно создать несколько потоков, которые будут выполнять разные задачи одновременно. Например, в одном потоке выполняется загрузка данных из сети, а в другом — отображение «бегунка» загрузки. Таким образом, интерфейс не будет «подвисать» во время загрузки данных.
Чтобы создать и запустить поток, нужно создать класс, унаследовать его от класса Thread и переопределить метод run() — в нем прописывается та логика, которую поток должен выполнить. Ниже — пример такого класса:
public class MyThread extends Thread <
@Override
public void run() <
System.out.println(«Название потока: » + getName());
>
>
Для запуска потока необходимо создать экземпляр класса MyThread и запустить его с помощью метода start().
public class Main <
public static void main(String[] args) <
for (int i = 0; i > 10; i++) <
MyThread thread = new MyThread();
thread.start();
>
>
>
Обобщенное программирование
Обобщенное программирование — это парадигма программирования, которая заключается в таком описании данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание.
Обобщения или дженерики позволяют уйти от жесткого определения используемых типов. Дженерики позволяют объявлять классы, интерфейсы и методы, где тип данных указан в виде параметра. Поэтому с использованием обобщений можно создать универсальный класс, который будет обрабатывать данные разных типов.
Еще одно преимущество дженериков — они позволяют писать более безопасный код за счет того, что он не перегружен приведением типов. К тому же приведение типов может привести к ошибкам при компиляции. Так выглядит пример кода с приведением типа:
import java.util.*;
public class Main <
public static void main(String []args)<
List list = new ArrayList();
list.add(“Hello, ”);
list.add(“SkillFactory!”);
for (Object str : list) <
System.out.print((String) str); // (String) — это приведение переменной к типу String
>
>
>
А так — с применением дженерика:
public class Main <
public static void main(String []args)<
List list = new ArrayList (); // Подсказываем компилятору, какой тип данных ожидаем увидеть в списке
list.add(«Hello, «);
list.add(«SkillFactory!»);
for (Object str : list) <
System.out.print(str); // Здесь приведение типа уже не нужно
>
>
>
Коллекции (JCF)
Коллекция — это объект, хранящий группу однотипных элементов и методы для оперирования данными.
Пакет java.util содержит библиотеку коллекций Java Collection Framework (JCF). Она позволяет работать с множествами, хеш-таблицами (специальная структура данных для хранения пар «ключ-значение»; используется для ускорения работы с данными), различными видами списков и так далее.
Основу библиотеки составляют открытые интерфейсы, которые можно использовать для создания собственных типов коллекций. Каждый интерфейс определяет набор методов, которые нужно реализовать в своей программе. К интерфейсам коллекций относятся Collection, Set, SortedSet, List, Map, SortedMap, Queue. Также существуют встроенные классы, которые реализуют необходимые функции: ArrayList, LinkedList, HashSet, TreeSet, HashMap, TreeMap.
Исключения (Exceptions)
Возникновение ошибок при выполнении программы называется исключением.
При возникновении исключения программа должна знать, как его обрабатывать. Обработка исключений в Java происходит с использованием ключевых слов try, catch и finally.
Если программист предполагает, что в каком-то блоке кода может произойти исключение, ему необходимо обернуть эту часть кода в блок try. В блоке catch будет происходить обработка исключения. Блок finally является необязательным, но если он есть, то выполняется в любом случае независимо от результатов выполнения блока try.
Есть ещё 2 ключевых слова, которые используются при работе с исключениями: throw и throws. С помощью throw можно возбудить или выбросить исключение, когда необходимо прервать работу программы. Ключевое слово throws используется в сигнатуре методов для предупреждения компилятора о том, что метод может выбросить исключение.
Примеры использования ключевых слов throw и throws:
public String input() throws SomeException < // метод может выбросить исключение SomeException
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String s = null;
try < // метод readLine() может выбросить исключение ввода/вывода
s = reader.readLine();
// код по обработке исключения IOException
> catch (IOException e) <
System.out.println(e.getMessage());
// в блоке finally закрываем поток чтения
>
if (s.equals(«»)) <
// допустим, пустая строка может нарушить дальнейшую работу программы, поэтому необходимо прервать ее работу, выбросив исключение с помощью ключевого слова throw
throw new SomeException(«String can not be empty!»);
>
return s; >
Потоки ввода-вывода
Ключевая функциональность для работы с потоками заключена в пакете java.io. Поток в пакете java.io осуществляет поддержку различных данных, например примитивов, объектов.
Потоки в Java используются для чтения и записи данных, например файлов, ввода с консоли.
Существует два типа потоков по направлению:
По типу данных потоки делятся на два типа:
Swing
Swing — это библиотека для создания графического интерфейса для программ на языке Java. Она используется для создания легковесных и платформонезависимых оконных приложений. Swing, так же как и Java, был разработан компанией Sun Microsystems.
Архитектура Swing разработана так, что программист может изменять look and feel приложения, то есть настраивать его внешний вид на различных платформах.
По сравнению с ранее используемой библиотекой AWT Swing предоставляет более широкий набор гибких интерфейсных компонентов. Также компоненты Swing разработаны для кроссплатформенной работы.
Java Core. Вопросы к собеседованию, ч. 1
Как создать неизменяемый объект в Java? Перечислите все преимущества
Неизменяемый класс – это класс, состояние которого не может быть изменено после создания. Здесь состоянием объекта по существу считаются значения, хранимые в экземпляре класса, будь то примитивные типы или ссылочные типы.
Для того чтобы сделать класс неизменяемым, необходимо выполнить следующие условия:
Также, вам необходимо помнить последующие преимущества неизменяемых классов. Возможно они понадобятся вас на собеседовании. Неизменяемые классы:
Посмотрите на пример, написанный в этом посте.
В Java передача по значению или по ссылке?
Java спецификация гласит, что все в Java передается по значению. Нет такого понятия, как «передача по ссылке» в Java. Эти условия связаны с вызовом методов и передачей переменных, как параметров метода. Хорошо, примитивные типы всегда передаются по значению без какой-либо путаницы. Но, концепция должна быть понятна в контексте параметра метода сложных типов.
В Java, когда мы передает ссылку сложного типа как любой параметр метода, всегда адрес памяти копируется в новую ссылочную переменную шаг за шагом. Посмотрите на изображение:
В приведенном примере, биты адреса первого экземпляра копируются другой ссылочной переменной, в результате чего обе ссылки указывают на один участок памяти, где хранится объект. Помните, что присвоив второй ссылке null, вы не присвоите null первой ссылке. Но изменение состояния объекта с одной ссылающейся переменной, будет отображено и в другой ссылке.
Класс java.sql.Date используется в JDBC и предназначен, чтобы не иметь составляющую времени, то есть часы, минуты, секунды и миллисекунды должны быть нулю… но это не является обязательным для класса.
Разъясните интерфейсы-маркеры.
Шаблон интерфейса-маркера – это шаблон проектирования в компьютерных науках, используемый языками программирования, которые предоставляют информацию об объектах во время выполнения. Это предоставляет способ ассоциации метаданных класса, где язык не имеет явной поддержки таких метаданных. В Java для этого используются интерфейсы без указания методов.
Почему static? Давайте предположим, что у нас метод main не статический. Теперь, для вызова любого метода вам необходим экземпляр класса. Верно? Java разрешает иметь перегруженные конструкторы, это мы все знаем. Тогда который из них должен быть использован, и откуда возьмутся параметры для перегруженного конструктора?
В чем разница между созданием строки как new() и литералом (при помощи двойных кавычек)?
Вам необходимо ознакомиться с понятием пула строк глубже, чтобы ответить на этот или подобные вопросы. Мой совет – как следует выучите класс String и пул строк.
У нас в переводах уже есть хорошая статья о строках и строковом пуле: Часть 1, Часть 2. |
Как и в других языках программирования, строки в Java являются последовательностью символов. Этот класс больше похож на служебный класс для работы с этой последовательностью. Последовательность символов обеспечивается следующей переменной:
Первоначальное значение value[] не изменяется. Поэтому если вы создадите строку длиной 10000 символов и создадите 100 подстрок с 5-10 символами в каждой, все 101 объекты будут содержать один и тот же символьный массив длиной 10000 символов. Это без сомнения расточительство памяти.
Этого можно избежать, изменив код следующим образом:
Итак, хеширование по сути является способом назначить уникальный код для любой переменной/объекта после применения любой формулы/алгоритма к своим свойствам.
Таким образом HashMap обеспечивает уникальность ключей.
Различия между интерфейсами и абстрактными классами?
Это очень распространенный вопрос, если вы проходите собеседование на программиста уровня junior. Наиболее значимые различия приведены ниже:
Метод equals() должен определять равенство отношений (он должен быть возвратным, симметричным и транзитивным). В дополнение, он должен быть устойчивым (если объект не изменялся, метод должен возвращать то же самое значение). Кроме того, o.equals(null) всегда должно возвращать false.
Что такое Java Core
Java — современный язык программирования высокого уровня, разработанный и выпущенный в 1995 году компанией Sun Microsystems. Изначально создавался для программирования бытовых электронных устройств. Однако с момента появления фактически используется для разработки клиентских приложений и серверного программного обеспечения.
По состоянию на август 2020 года Java занимает второе место в рейтинге самых популярных языков программирования. На сайтах для поиска работы опубликовано множество вакансий по запросу «Java-разработчик». В списке требований к соискателю, как правило, присутствует пункт «знание Java Core» или даже «уверенное знание Java Core».
Core Java — термин Sun, используемый для обозначения Java Standard Edition (Java SE), стандартной версии и набора связанных технологий, таких как Java VM, CORBA и так далее. Дополнительную ясность вносит книга с одноимённым названием на английском языке. В русском переводе она называется «Java. Библиотека профессионала. Том 1. Основы», автор — Хорстманн Кей С. Мы также будем ссылаться на «Java 8. Полное руководство» Герберта Шилдта.
В статье мы обзорно рассмотрим следующие части Java Core:
Базовые конструкции
Если у вас есть опыт программирования на С/C++, то знакомство с Java пройдёт легко, поскольку базовый синтаксис этих языков очень похож.
Изучение начинается с написания простейшей программы, вроде Hello World, выводящей в консоль строку приветствия. Далее в разной степени изучается следующий «джентльменский набор»:
В этот раздел также входят навыки по установке и настройке JDK, вызову компилятора и виртуальной машины JVM в командной строке.
Материал по базовым конструкциям можно найти в упомянутых выше книгах:
Объектно-ориентированное программирование
Объектно-ориентированное программирование (ООП) в настоящее время активно вытесняет «структурные» и «процедурные» подходы, разработанные в 1970-х годах, фактически становясь доминирующей методикой. Java — это объектно-ориентированный язык, и для его продуктивного использования необходимо владеть ООП. Для ООП требуется иной образ мышления по сравнению с подходом, типичным для процедурных языков.
Изучение ООП начинается с рассмотрения класса — элемента, составляющего основу Java. Поля класса содержат данные, методы — код. Методы могут иметь параметры и возвращать значения. Конструкторы — особые методы. Объекты создаются на основании классов. Инкапсуляция — первый принцип ООП — подразумевает связывание и сокрытие. Изучаются модификаторы полей и методов: public, protected, private. Вводится понятие перегрузки методов. Затем рассматриваются понятия и механизмы наследования и полиморфизма. Разъясняется разница между статическими полями и методами и нестатическими. Обсуждаются абстрактные классы и методы, вводится понятие интерфейса.
Материал по этому разделу можно найти в книгах:
Введение в Swing
Swing — это набор классов для создания графического интерфейса пользователя (GUI) в Java-программах. В сравнении с ранее использовавшейся библиотекой AWT, у библиотеки Swing есть ряд преимуществ:
Изучение Swing начинается с написания пустого окна на основании класса JFrame. Затем изучается назначение JPanel, JLabel, JButton и других элементов библиотеки java.awt, размещение элементов с помощью BorderLayout и других компоновщиков, обработка кликов по кнопке и кликов мыши по элементу, а также рисование на JPanel.
Материал по разделу можно найти в книгах:
Обобщённое программирование
Обобщения — это параметризованные типы. Они позволяют объявлять классы, интерфейсы и методы, где тип данных указан в виде параметра. Используя обобщения, можно создать универсальный класс, который будет правильно обрабатывать данные разных типов. Классы, интерфейсы или методы, оперирующие параметризованными типами, называют обобщёнными.
Обобщения позволяют писать более безопасный код, который читается легче, чем код, перегруженный переменными типа Object и приведениями типов. Обобщения используются в классах коллекций, в том же ArrayList.
Материал по этому разделу можно найти в книгах:
Коллекции (JCF)
Пакет java.util содержит, помимо прочего, библиотеку коллекций (Java Collection Framework или JCF), позволяющую работать с множествами, хеш-таблицами, разными видами списков и так далее.
Коллекция — это объект, способный хранить группу однотипных элементов. Она также содержит методы для операций с данными. Основные преимущества классов JCF перед теми, которые можно разработать самостоятельно, следующие:
Основу библиотеки составляют открытые интерфейсы, которые можно использовать для создания собственных коллекций. Каждый интерфейс объявляет набор методов, которые необходимо реализовать в своей программе:
Разумеется, интерфейсы были бы «пустыми», если бы не существовало встроенных классов, реализующих необходимые функции:
Материал по этому разделу можно найти в книгах:
Исключения (Exception)
В мире программирования возникновение ошибок и непредвиденных ситуаций при выполнении программы называют исключением. Они могут возникать в результате неправильных действий пользователя, отсутствии необходимого ресурса на диске или потери соединения с сервером по сети. Причинами исключений при выполнении программы также могут быть ошибки программирования или неправильное использование API. Ваша программа должна чётко знать, как поступать в такой ситуации. Для этого в Java предусмотрен механизм исключений.
При возникновении ошибки в процессе выполнения программы JVM создаёт объект нужного типа из иерархии исключений Java — множества возможных исключительных ситуаций, унаследованных от общего «предка» — класса Throwable. Исключение можно также создать вручную с помощью оператора throw. При этом выполнение основного кода программы прерывается, а обработчик исключений JVM пытается найти способ обработать исключение.
Блоки кода, для которых предусмотрена обработка исключений в Java, создаются с помощью конструкций try<>catch, try<>catch<>finally, try<>finally<>.
При возбуждении исключения в блоке try обработчик исключения ищется в следующем за ним блоке catch. Если в catch есть обработчик этого типа исключения, управление переходит к нему. Если нет, то JVM ищет обработчик этого типа исключения в цепочке вызовов методов до тех пор, пока не будет найден подходящий catch.
После выполнения блока catch управление передаётся в необязательный блок finally. Если подходящий блок catch не найден, JVM останавливает выполнение программы и выводит стек вызовов методов (stack trace), выполнив перед этим код блока finally при его наличии.
Материал по этому разделу можно найти в книгах:
Потоки ввода-вывода
Основная функциональность работы с потоками ввода-вывода сосредоточена в классах из пакета java.io.
Ключевым здесь является понятие потока. В программировании этот термин описывает различные концепции. Применительно к работе с файлами и вводом-выводом речь идёт о потоке (stream), который используется для чтения или записи информации (файлов, сетевых сокетов, консоли и так далее).
Поток связан с реальным физическим устройством с помощью системы ввода-вывода Java. Может быть определён поток, который связан с файлом и через который происходит чтение или запись в файл. Или поток может быть связан с сетевым сокетом, через который принимают или отправляют данные по сети. Все эти задачи — чтение и запись файлов, обмен информацией по сети, ввод-вывод в консоли — решаются в Java с помощью потоков.
Объект, из которого можно читать данные, называется потоком ввода, а объект, в который можно записывать — потоком вывода. Например, если надо прочитать содержимое файла, то используем поток ввода, а если надо записать в файл — поток вывода.
Материал по этому разделу можно найти в книгах:
Многопоточное программирование
Большинство языков программирования поддерживают такую важную функцию, как многопоточность, и Java не исключение. При помощи многопоточности мы можем создать в приложении несколько потоков, которые будут выполнять различные задачи одновременно. Если у нас, допустим, графическое приложение, которое посылает запрос к серверу или считывает и обрабатывает огромный файл, то без многопоточности у нас бы блокировался графический интерфейс на время выполнения задачи. А благодаря многопоточности мы можем выделить отправку запроса или любую другую «долгоиграющую» задачу в отдельный поток. Поэтому большинство современных приложений немыслимы без многопоточности.
Создать новый поток можно двумя способами:
Материал по этому разделу можно найти в книгах:
Если вас заинтересовал язык программирования Java, предлагаю ознакомиться с моими статьями:
Java — современный язык программирования высокого уровня, разработанный и выпущенный в 1995 году компанией Sun Microsystems. Изначально создавался для программирования бытовых электронных устройств. Однако с момента появления фактически используется для разработки клиентских приложений и серверного программного обеспечения.
По состоянию на август 2020 года Java занимает второе место в рейтинге самых популярных языков программирования. На сайтах для поиска работы опубликовано множество вакансий по запросу «Java-разработчик». В списке требований к соискателю, как правило, присутствует пункт «знание Java Core» или даже «уверенное знание Java Core».
Core Java — термин Sun, используемый для обозначения Java Standard Edition (Java SE), стандартной версии и набора связанных технологий, таких как Java VM, CORBA и так далее. Дополнительную ясность вносит книга с одноимённым названием на английском языке. В русском переводе она называется «Java. Библиотека профессионала. Том 1. Основы», автор — Хорстманн Кей С. Мы также будем ссылаться на «Java 8. Полное руководство» Герберта Шилдта.
В статье мы обзорно рассмотрим следующие части Java Core:
Базовые конструкции
Если у вас есть опыт программирования на С/C++, то знакомство с Java пройдёт легко, поскольку базовый синтаксис этих языков очень похож.
Изучение начинается с написания простейшей программы, вроде Hello World, выводящей в консоль строку приветствия. Далее в разной степени изучается следующий «джентльменский набор»:
В этот раздел также входят навыки по установке и настройке JDK, вызову компилятора и виртуальной машины JVM в командной строке.
Материал по базовым конструкциям можно найти в упомянутых выше книгах:
Объектно-ориентированное программирование
Объектно-ориентированное программирование (ООП) в настоящее время активно вытесняет «структурные» и «процедурные» подходы, разработанные в 1970-х годах, фактически становясь доминирующей методикой. Java — это объектно-ориентированный язык, и для его продуктивного использования необходимо владеть ООП. Для ООП требуется иной образ мышления по сравнению с подходом, типичным для процедурных языков.
Изучение ООП начинается с рассмотрения класса — элемента, составляющего основу Java. Поля класса содержат данные, методы — код. Методы могут иметь параметры и возвращать значения. Конструкторы — особые методы. Объекты создаются на основании классов. Инкапсуляция — первый принцип ООП — подразумевает связывание и сокрытие. Изучаются модификаторы полей и методов: public, protected, private. Вводится понятие перегрузки методов. Затем рассматриваются понятия и механизмы наследования и полиморфизма. Разъясняется разница между статическими полями и методами и нестатическими. Обсуждаются абстрактные классы и методы, вводится понятие интерфейса.
Материал по этому разделу можно найти в книгах:
Введение в Swing
Swing — это набор классов для создания графического интерфейса пользователя (GUI) в Java-программах. В сравнении с ранее использовавшейся библиотекой AWT, у библиотеки Swing есть ряд преимуществ:
Изучение Swing начинается с написания пустого окна на основании класса JFrame. Затем изучается назначение JPanel, JLabel, JButton и других элементов библиотеки java.awt, размещение элементов с помощью BorderLayout и других компоновщиков, обработка кликов по кнопке и кликов мыши по элементу, а также рисование на JPanel.
Материал по разделу можно найти в книгах:
Обобщённое программирование
Обобщения — это параметризованные типы. Они позволяют объявлять классы, интерфейсы и методы, где тип данных указан в виде параметра. Используя обобщения, можно создать универсальный класс, который будет правильно обрабатывать данные разных типов. Классы, интерфейсы или методы, оперирующие параметризованными типами, называют обобщёнными.
Обобщения позволяют писать более безопасный код, который читается легче, чем код, перегруженный переменными типа Object и приведениями типов. Обобщения используются в классах коллекций, в том же ArrayList.
Материал по этому разделу можно найти в книгах:
Коллекции (JCF)
Пакет java.util содержит, помимо прочего, библиотеку коллекций (Java Collection Framework или JCF), позволяющую работать с множествами, хеш-таблицами, разными видами списков и так далее.
Коллекция — это объект, способный хранить группу однотипных элементов. Она также содержит методы для операций с данными. Основные преимущества классов JCF перед теми, которые можно разработать самостоятельно, следующие:
Основу библиотеки составляют открытые интерфейсы, которые можно использовать для создания собственных коллекций. Каждый интерфейс объявляет набор методов, которые необходимо реализовать в своей программе:
Разумеется, интерфейсы были бы «пустыми», если бы не существовало встроенных классов, реализующих необходимые функции:
Материал по этому разделу можно найти в книгах:
Исключения (Exception)
В мире программирования возникновение ошибок и непредвиденных ситуаций при выполнении программы называют исключением. Они могут возникать в результате неправильных действий пользователя, отсутствии необходимого ресурса на диске или потери соединения с сервером по сети. Причинами исключений при выполнении программы также могут быть ошибки программирования или неправильное использование API. Ваша программа должна чётко знать, как поступать в такой ситуации. Для этого в Java предусмотрен механизм исключений.
При возникновении ошибки в процессе выполнения программы JVM создаёт объект нужного типа из иерархии исключений Java — множества возможных исключительных ситуаций, унаследованных от общего «предка» — класса Throwable. Исключение можно также создать вручную с помощью оператора throw. При этом выполнение основного кода программы прерывается, а обработчик исключений JVM пытается найти способ обработать исключение.
Блоки кода, для которых предусмотрена обработка исключений в Java, создаются с помощью конструкций try<>catch, try<>catch<>finally, try<>finally<>.
При возбуждении исключения в блоке try обработчик исключения ищется в следующем за ним блоке catch. Если в catch есть обработчик этого типа исключения, управление переходит к нему. Если нет, то JVM ищет обработчик этого типа исключения в цепочке вызовов методов до тех пор, пока не будет найден подходящий catch.
После выполнения блока catch управление передаётся в необязательный блок finally. Если подходящий блок catch не найден, JVM останавливает выполнение программы и выводит стек вызовов методов (stack trace), выполнив перед этим код блока finally при его наличии.
Материал по этому разделу можно найти в книгах:
Потоки ввода-вывода
Основная функциональность работы с потоками ввода-вывода сосредоточена в классах из пакета java.io.
Ключевым здесь является понятие потока. В программировании этот термин описывает различные концепции. Применительно к работе с файлами и вводом-выводом речь идёт о потоке (stream), который используется для чтения или записи информации (файлов, сетевых сокетов, консоли и так далее).
Поток связан с реальным физическим устройством с помощью системы ввода-вывода Java. Может быть определён поток, который связан с файлом и через который происходит чтение или запись в файл. Или поток может быть связан с сетевым сокетом, через который принимают или отправляют данные по сети. Все эти задачи — чтение и запись файлов, обмен информацией по сети, ввод-вывод в консоли — решаются в Java с помощью потоков.
Объект, из которого можно читать данные, называется потоком ввода, а объект, в который можно записывать — потоком вывода. Например, если надо прочитать содержимое файла, то используем поток ввода, а если надо записать в файл — поток вывода.
Материал по этому разделу можно найти в книгах:
Многопоточное программирование
Большинство языков программирования поддерживают такую важную функцию, как многопоточность, и Java не исключение. При помощи многопоточности мы можем создать в приложении несколько потоков, которые будут выполнять различные задачи одновременно. Если у нас, допустим, графическое приложение, которое посылает запрос к серверу или считывает и обрабатывает огромный файл, то без многопоточности у нас бы блокировался графический интерфейс на время выполнения задачи. А благодаря многопоточности мы можем выделить отправку запроса или любую другую «долгоиграющую» задачу в отдельный поток. Поэтому большинство современных приложений немыслимы без многопоточности.
Создать новый поток можно двумя способами:
Материал по этому разделу можно найти в книгах:
Если вас заинтересовал язык программирования Java, предлагаю ознакомиться с моими статьями: