Перейти к содержимому

Java core что это

  • автор:

Java Core: курс-шпаргалка

Курс-шпаргалка по Java Core содержит описание тем, которые необходимо знать разработчику Java на начальном уровне (стажер, юниор). Минимум текста, максимум отсылок на книги и внешние источники.

Course cover

1 941 учащийся

О курсе

Java — строго типизированный объектно-ориентированный язык программирования общего назначения, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle).

Под Java Core понимается объединение самого языка Java и поставляющихся с ним основных пакетов / библиотек для разработки приложений (без enterprise).

Данный курс является шпаргалкой, что означает что в нем присутствует множество отсылок на книги / статьи и минимум текстового описания. Также присутствуют домашние задания для закрепления знаний Java Core.

За основу курса взята книга Герберт Шилдт «Java. Полное руководство» (10-е издание).

Начальные требования

  • Понимание принципов компилируемых и интерпретируемых языков программирования.
  • Знание базовых алгоритмов (поиск, сортировка и тп) и структур данных (списки, деревья и тд).
  • Знание основных принципов ООП.

Погружение в мир Java Core

Java — очень сложно, так говорят… Правда ли это?

7 фактов про Java

Зачем Java разработчикам читать книги по Java

Какой IDE пользоваться для обучения Java?

Когда умрет Java? Стоит ли учить этот язык?

В мире программирования существует язык, который завоевал популярность благодаря своей универсальности и мощным возможностям — это Java. НО, java core что это? Это как раз «ядро», фундаментальные компоненты и основные концепции языка, которые лежат в основе каждого Java-приложения.

И понимание ключевых элементов, таких как переменные, методы, классы и управляющие структуры, позволяет программистам создавать надежные и эффективные программы. Давайте окунемся в мир Java Core, чтобы раскрыть все его тайны и открыть перед вами бесконечные возможности программирования на этом удивительном языке.

Ключевые компоненты

Java Core включает в себя несколько ключевых компонентов, которые являются основой языка программирования Java. Давайте разберемся, что именно в них входит и какие функции они выполняют:

  • Переменные — это места, где вы можете хранить данные в памяти компьютера. Они могут содержать различные типы данных, такие как числа, строки или булевы значения, и позволяют нам работать с данными и изменять их в процессе выполнения программы.
  • Типы данных — они есть различные (целые числа (int), числа с плавающей запятой (float, double), символы (char), строки (String), логические значения (boolean) и другие). Каждый тип данных имеет свою особенность и предназначен для хранения определенного вида информации.

�� Курс Java Start от Сергея Немчинского — это идеальное введение в мир программирования на языке Java для всех, кто хочет начать свой путь в этой области IT.

  • Операторы — позволяют выполнять различные операции с данными. Например, арифметические операторы (+, -, *, /) производят математические вычисления, операторы сравнения (==, ) сравнивают значения, а логические операторы (&&, ||, !) — позволяют выполнять логические операции.
  • Управляющие конструкции — помогают нам контролировать поток выполнения программы. Например, условные операторы (if-else) позволяют выполнять определенные действия в зависимости от условия. Циклы (for, while) выполняют повторяющиеся операции, а операторы выбора (switch) — выбирают одно из нескольких действий на основе значения переменной.
  • Методы — являются блоками кода, которые могут быть вызваны из других частей программы. Они выполняют определенные действия или возвращают результаты обработки данных и позволяют нам организовывать код в модули, чтобы повторно использовать его в разных частях программы.
  • Объекты и классы. В Java Core используется объектно-ориентированное программирование (ООП). Объекты — это экземпляры классов, которые представляют собой шаблоны для создания объектов. Классы определяют состояние и поведение объектов. ООП позволяет организовывать код в более структурированном и модульном виде.

Эти компоненты — основа Java Core, которые обеспечивают его функциональность. Они позволяют программистам создавать, обрабатывать и управлять данными, контролировать поток выполнения программы и организовывать код в модули.

Java Core

Похожие материалы

Java — очень сложно, так говорят… Правда ли это?

7 фактов про Java

Зачем Java разработчикам читать книги по Java

Java Core. Вопросы к собеседованию, ч. 1

Java-университет

Java Core. Вопросы к собеседованию, ч. 1 - 1

Для тех, кто впервые слышит слово Java Core — это фундаментальные основы языка. С этими знаниями уже смело можно идти на стажировку/интернатуру. Приведенные вопросы помогут вам освежить знания перед собеседованием, или почерпнуть для себя что-то новое. Для получения практических навыков занимайтесь на JavaRush.

  1. Как создать неизменяемый объект в Java? Перечислите все преимущества Неизменяемый класс – это класс, состояние которого не может быть изменено после создания. Здесь состоянием объекта по существу считаются значения, хранимые в экземпляре класса, будь то примитивные типы или ссылочные типы. Для того чтобы сделать класс неизменяемым, необходимо выполнить следующие условия:
    1. Не предоставляйте сеттеры или методы, которые изменяют поля или объекты, ссылающиеся на поля. Сеттеры подразумевают изменение состояния объекта а это то, чего мы хотим тут избежать.
    2. Сделайте все поля final и private . Поля, обозначенные private , будут недоступными снаружи класса, а обозначение их final гарантирует, что вы не измените их даже случайно.
    3. Не разрешайте субклассам переопределять методы. Самый простой способ это сделать – объявить класс как final . Финализированные классы в Java не могут быть переопределены.
    4. Всегда помните, что ваши экземпляры переменных могут быть либо изменяемыми, либо неизменяемыми. Определите их и возвращайте новые объекты со скопированным содержимым для всех изменяемых объектов (ссылочные типы). Неизменяемые переменные (примитивные типы) могут быть безопасно возвращены без дополнительных усилий.

    Также, вам необходимо помнить последующие преимущества неизменяемых классов. Возможно они понадобятся вас на собеседовании. Неизменяемые классы:

    • легко конструировать, тестировать и использовать
    • автоматически потокобезопасны и не имеют проблем синхронизации
    • не требуют конструктора копирования
    • позволяют выполнить «ленивую инициализацию» хэшкода и кэшировать возвращаемое значение
    • не требуют защищенного копирования, когда используются как поле
    • делают хорошие Map ключи и Set элементы (эти объекты не должны менять состояние, когда находятся в коллекции)
    • делают свой класс постоянным, единожды создав его, а он не нуждается в повторной проверке
    • всегда имеют «атомарность по отношению к сбою» (failure atomicity, термин применил Джошуа Блох): если неизменяемый объект бросает исключение, он никогда не останется в нежелательном или неопределенном состоянии.

    Посмотрите на пример, написанный в этом посте.

    Java Core. Вопросы к собеседованию, ч. 1 - 2

  2. В Java передача по значению или по ссылке? Java спецификация гласит, что все в Java передается по значению. Нет такого понятия, как «передача по ссылке» в Java. Эти условия связаны с вызовом методов и передачей переменных, как параметров метода. Хорошо, примитивные типы всегда передаются по значению без какой-либо путаницы. Но, концепция должна быть понятна в контексте параметра метода сложных типов. В Java, когда мы передает ссылку сложного типа как любой параметр метода, всегда адрес памяти копируется в новую ссылочную переменную шаг за шагом. Посмотрите на изображение: В приведенном примере, биты адреса первого экземпляра копируются другой ссылочной переменной, в результате чего обе ссылки указывают на один участок памяти, где хранится объект. Помните, что присвоив второй ссылке null, вы не присвоите null первой ссылке. Но изменение состояния объекта с одной ссылающейся переменной, будет отображено и в другой ссылке. Подробности смотрите тут.
  3. Какое применение блока finally ? Гарантирует этот блок выполнение своего кода? Когда finally блок не вызывается? Блок finally всегда вызывается, если блок try существует. Это гарантирует, что блок finally вызывается даже, если случается неожиданное исключение. Но finally является более полезным, чем просто для обработки исключений – этот блок позволяет выполнить чистку кода, случайно обошедшего через return , continue или break . Размещение очищающего кода в блок finally всегда является хорошей практикой, даже когда не ожидается никаких исключений. Если виртуальная машина завершает работу во время выполнения блока try или catch , тогда блок finally не будет выполнен. Аналогично, если нить, выполняя блок try или catch , будет прервана или убита, блок finally не будет выполнен, даже не смотря на то, что приложение продолжает работать.
  4. Почему существует два класса Date , один в java.util package а другой в java.sql ? java.util.Date представляет дату и время, а java.sql.Date представляет только дату. Дополнением к java.sql.Date является класс java.sql.Time , который представляет только время. Класс java.sql.Date является субклассом (расширением) класса java.util.Date . Итак, что изменилось в java.sql.Date :
    • toString() формирует другое представление строки: yyyy-mm-dd
    • статический метод valueOf(String) создает дату из строки с вышеуказанным представлением
    • исключены геттеры и сеттеры для часов, минут и секунд

    Класс java.sql.Date используется в JDBC и предназначен, чтобы не иметь составляющую времени, то есть часы, минуты, секунды и миллисекунды должны быть нулю… но это не является обязательным для класса.

    У нас в переводах уже есть хорошая статья о строках и строковом пуле: Часть 1, Часть 2.
     /** The value is used for character storage. */ /** Значение используется для хранения символов */ private final char value[]; Для доступа к этому массиву в различных сценариях используются следующие переменные /** The offset is the first index of the storage that is used. */ /** Смещение – это первый индекс используемого хранилища. */ private final int offset; /** The count is the number of characters in the String. */ /** Счет – это количество символов в строке. */ private final int count; 

    Каждый раз, когда мы создаем подстроку от существующего экземпляра строки, метод substring() только устанавливает новые значения переменных offset и count . Внутренний массив символов не изменяется. Это возможный источник утечки памяти, если метод substring() использовать неосторожно: Первоначальное значение value[] не изменяется. Поэтому если вы создадите строку длиной 10000 символов и создадите 100 подстрок с 5-10 символами в каждой, все 101 объекты будут содержать один и тот же символьный массив длиной 10000 символов. Это без сомнения расточительство памяти. Этого можно избежать, изменив код следующим образом: заменить original.substring(beginIndex) на new String(original.substring(beginIndex)) , где original – исходная строка.

    Примечание переводчика: я затрудняюсь сказать к какой версии Java это применимо, но на данный момент в Java 7 этот пункт статьи не актуален. Метод substring() вызывает конструктор класса new String(value, beginIndex, subLen) , который в свою очередь обращается к методу Arrays.copyOfRange(value, offset, offset+count) . Это значит, что у нас будет каждый раз новое значение переменной value[] , содержащее наше новое количество символов.
     static class Entry implements Map.Entry < final K key; V value; Entry next; final int hash; …//More code goes here >
    • В первую очередь, объект ключа проверяется на null . Если ключ null , значение сохраняется в позицию table[0] . Потому что хэшкод для null всегда 0.
    • Затем, следующим шагом вычисляется хэш значение вызывая у переменной-ключа свой метод hashCode() . Этот хэш используется для вычисления индекса в массиве для хранение объекта Entry . Разработчики JDK прекрасно понимали, что метод hashCode() может быть плохо написан и может возвращать очень большое или очень маленькое значение. Для решения этой проблемы они ввели другой hash() метод, и передают хэшкод объекта этому методу для приведения этого значения к диапазону размера индекса массива.
    • Теперь вызывается метод indexFor(hash, table.length) для вычисления точной позиции для хранения объекта Entry .
    • Теперь главная часть. Как мы знаем, два неодинаковых объекта могут иметь одинаковое значение хэшкода, как два разных объекта будет храниться в одинаковом расположении в архиве [называется корзиной]?

    Ответ – LinkedList . Если вы помните, класс Entry имеет свойство “next”. Это свойство всегда указывает на следующий объект в цепи. Такое поведение очень похоже на LinkedList .

    Итак, в случае совпадений хэшкодов, объекты Entry хранятся в форме LinkedList . Когда объект Entry необходимо разместить на конкретном индексе, HashMap проверяет, существует ли на этом месте другой объект Entry ? Если там нет записи, наш объект сохранится в этом месте.

    Если на нашем индексе уже находится другой объект, проверяется его поле next . Если оно равно null , наш объект становится следующим узлом в LinkedList . Если next не равно null , эта процедура повторяется, пока не будет найдено поле next равное null .

    Что будет, если мы добавим другое значение ключа, равное добавленному ранее? Логично, что оно должно заменить старое значение. Как это происходит? После определения индекса позиции для объекта Entry , пробегая по LinkedList , расположенному на нашем индексе, HashMap вызывает метод equals() для значения ключа для каждого объекта Entry . Все эти объекты Entry в LinkedList имеют одинаковое значение хэшкода, но метод equals() будет проверять на настоящее равенство. Если ключ. equals(k) будет true, тогда оба будут восприниматься как одинаковый объект. Это вызовет замену только объекта-значение внутри объекта Entry .

    Таким образом HashMap обеспечивает уникальность ключей.

    • В интерфейсах Java переменные априори final . Абстрактные классы могут содержать не final переменные.
    • Интерфейс в Java безоговорочно не может иметь реализации. Абстрактный класс может иметь экземпляры методов, которые реализуют базовое поведение.
    • Составляющие интерфейса должны быть public . Абстрактный класс может иметь модификаторы доступа на любой вкус.
    • Интерфейс должен быть реализован ключевым словом implements . Абстрактный класс должен быть расширен при помощи ключевого слова extends.
    • В Java класс может реализовывать множество интерфейсов, но может унаследоваться только от одного абстрактного класса.
    • Интерфейс полностью абстрактный и не может иметь экземпляров. Абстрактный класс также не может иметь экземпляров класса, но может быть вызван, если существует метод main() .
    • Абстрактный класс слегка быстрее интерфейса, потому что интерфейс предполагает поиск перед вызовом любого переопределенного метода в Java. В большинстве случаев это незначительное различие, но если вы пишите критичное по времени приложение, вам необходимо учесть и этот факт.

    Что такое 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:

    • базовые конструкции;
    • объектно-ориентированное программирование;
    • введение в Swing;
    • обобщённое программирование;
    • коллекции (JCF);
    • исключения (Exception);
    • потоки ввода-вывода;
    • многопоточное программирование.

    Узнай, какие ИТ — профессии
    входят в ТОП-30 с доходом
    от 210 000 ₽/мес
    Павел Симонов
    Исполнительный директор Geekbrains

    Команда GeekBrains совместно с международными специалистами по развитию карьеры подготовили материалы, которые помогут вам начать путь к профессии мечты.

    Подборка содержит только самые востребованные и высокооплачиваемые специальности и направления в IT-сфере. 86% наших учеников с помощью данных материалов определились с карьерной целью на ближайшее будущее!

    Скачивайте и используйте уже сегодня:

    Павел Симонов - исполнительный директор Geekbrains

    Павел Симонов
    Исполнительный директор Geekbrains

    Топ-30 самых востребованных и высокооплачиваемых профессий 2023

    Поможет разобраться в актуальной ситуации на рынке труда

    Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка

    Только проверенные нейросети с доступом из России и свободным использованием

    ТОП-100 площадок для поиска работы от GeekBrains

    Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽

    Получить подборку бесплатно
    Уже скачали 25512

    Базовые конструкции

    Если у вас есть опыт программирования на С/C++, то знакомство с Java пройдёт легко, поскольку базовый синтаксис этих языков очень похож.

    Изучение начинается с написания простейшей программы, вроде Hello World, выводящей в консоль строку приветствия. Далее в разной степени изучается следующий «джентльменский набор»:

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

    В этот раздел также входят навыки по установке и настройке JDK, вызову компилятора и виртуальной машины JVM в командной строке.

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

    • «Java. Библиотека профессионала. Том 1. Основы» — глава 3;
    • «Java 8. Полное руководство» — главы 3, 4, 5.

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

    Объектно-ориентированное программирование (ООП) в настоящее время активно вытесняет «структурные» и «процедурные» подходы, разработанные в 1970-х годах, фактически становясь доминирующей методикой. Java — это объектно-ориентированный язык, и для его продуктивного использования необходимо владеть ООП. Для ООП требуется иной образ мышления по сравнению с подходом, типичным для процедурных языков.

    Изучение ООП начинается с рассмотрения класса — элемента, составляющего основу Java. Поля класса содержат данные, методы — код. Методы могут иметь параметры и возвращать значения. Конструкторы — особые методы. Объекты создаются на основании классов. Инкапсуляция — первый принцип ООП — подразумевает связывание и сокрытие. Изучаются модификаторы полей и методов: public, protected, private. Вводится понятие перегрузки методов.

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

    Материал по этому разделу можно найти в книгах:

    • «Java. Библиотека профессионала. Том 1. Основы» — главы 4, 5, 6;
    • «Java 8. Полное руководство» — главы 6, 7, 8.

    Введение в Swing

    Swing — это набор классов для создания графического интерфейса пользователя (GUI) в Java-программах. В сравнении с ранее использовавшейся библиотекой AWT, у библиотеки Swing есть ряд преимуществ:

    • богатый набор интерфейсных примитивов;
    • настраивающийся внешний вид на различных платформах (look and feel);
    • раздельная архитектура «модель-вид» (model-view);
    • встроенная поддержка HTML.

    Изучение Swing начинается с написания пустого окна на основании класса JFrame. Затем изучается назначение JPanel, JLabel, JButton и других элементов библиотеки java.awt, размещение элементов с помощью BorderLayout и других компоновщиков, обработка кликов по кнопке и кликов мыши по элементу, а также рисование на JPanel.

    Материал по разделу можно найти в книгах:

    • «Java. Библиотека профессионала. Том 1. Основы» — главы 10, 11, 12;
    • «Java 8. Полное руководство» — главы 31, 32, 33.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *