Баннер мобильный (1) Пройти тест

Java Core

Глоссарий

2 апреля 2024

Поделиться

Скопировано

Содержание

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

    Поделиться

    Скопировано

    0 комментариев

    Комментарии