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 разработаны для кроссплатформенной работы.

Освойте новую профессию

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