Java Core

Java Core — это термин, который может использоваться по-разному в разных контекстах. Если он встречается в вакансиях на разработчика уровня Junior, то под ним обычно подразумевается базовое знание языка Java. Но компания Sun Microsystems, в которой разработали язык Java, определяет Core Java как вычислительную платформу, основанную на Java.

Существуют три вычислительные платформы, основанные на Java:

  • Java Standard Edition (Java SE) или Core Java это базовое API. Обычно используется для разработки десктопных приложений;
  • Java Enterprise Edition (Java EE) — это корпоративная версия Java. Применяется для разработки более мощных серверных приложений, веб-сайтов;
  • Java Micro Edition (Java ME) используется для разработки приложений для устройств с ограниченными ресурсами, например мобильных телефонов, принтеров, проигрывателей Blu-ray.

История

Язык 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 входит в первую тройку языков по индексу 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. Например, указанный выше класс будет находиться в файле MainClass.java.

Также для успешной работы на Java необходимо знать базовые конструкции языка:

  • переменные и константы, их типы и как с ними работать;
  • массивы;
  • работа со строками, String API;
  • логические и арифметические операции и выражения;
  • оператор ветвления if-else, тернарный оператор, оператор множественного выбора switch-case, цикл for, включая его вариант for each, циклы while и do-while;
  • операторы break и continue.

Объектно-ориентированное программирование (ООП)

Сейчас структурные и процедурные подходы программирования уходят в прошлое, а объектно-ориентированное программирование доминирует.

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

Объект — это некоторая сущность в цифровом пространстве, которая обладает определенным состоянием (поля класса) и поведением (методы). Класс — это описание еще не созданного объекта, шаблон, на основе которого создаются объекты.

Абстракция. Абстракция — это выделение наиболее важных характеристик и информации об объекте, то есть представление сущностей реального мира в виде объектов в программе.

Наследование. Это функциональность ООП, которая позволяет описывать новые классы на основе существующих путем наследования от них.

Полиморфизм. Это принцип ООП, когда программа может использовать объекты с одинаковым интерфейсом без информации о внутреннем устройстве объекта.

Инкапсуляция. Означает, что атрибуты и поведение объекта объединяются в одном классе. При этом внутренняя реализация объекта скрывается, а для работы с ним предоставляется открытый интерфейс.

Многопоточное программирование

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 < String > 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 используются для чтения и записи данных, например файлов, ввода с консоли.

Существует два типа потоков по направлению:

  1. InputStream и Reader — потоки ввода, используются для считывания данных.
  2. OutputStream и Writer — потоки вывода, используются для записи данных.

По типу данных потоки делятся на два типа:

  1. InputStream и OutputStream работают с байтами.
  2. Reader и Writer работают с символами.

Swing

Swing — это библиотека для создания графического интерфейса для программ на языке Java. Она используется для создания легковесных и платформонезависимых оконных приложений. Swing, так же как и Java, был разработан компанией Sun Microsystems.

Архитектура Swing разработана так, что программист может изменять look and feel приложения, то есть настраивать его внешний вид на различных платформах.

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

Другие термины на букву «J»

Java Reflection API
JavaScript
JDBC
Jetty
Jira
JOIN
JSON

Все термины

Курсы по теме

(рейтинг: 0, голосов: 0)
Добавить комментарий