ОБЗОР АРХИВОВ JAR - Студенческий научный форум

IX Международная студенческая научная конференция Студенческий научный форум - 2017

ОБЗОР АРХИВОВ JAR

Разин Д.А. 1
1Балаковский инженерно-технологический институт – филиал федерального государственного автономного образовательного учреждения высшего образования «Национальный исследовательский ядерный университет (МИФИ)»
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
Введение

Java – объектно-ориентированный язык программирования, разрабатываемый компанией Sun Microsystems и официально выпущенный 23 мая 1995 года. В отношении произношения в русском языке, как и в ряде других, образовались две различные нормы - заимствованная англоязычная и традиционно-национальная «Ява», соответствующая традиционному произношению названия острова Ява.

Java - так называют не только сам язык, но и платформу для создания приложений уровня предприятий на основе данного языка.

Изначально язык программирования назывался Oak (от русского языка Дуб) и разрабатывался Джеймсом Гослингом для бытовой электроники, но впоследствии был переименован в Java и стал использоваться для написания клиентских приложений и серверного программного обеспечения. Назван в честь марки кофе Java, любимого программистами, поэтому на официальной эмблеме языка Java изображена чашка с дымящимся кофе [1].

1. Основные особенности языка

Программы на Java транслируются в байт-код, выполняемый виртуальной Java-машиной (Java Virtual Machine) - программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор, нос тем отличием, что байтовый код, в отличие от текста, обрабатывается значительно быстрее.

Достоинство подобного способа выполнения программ - в полной независимости байт-кода от операционной системы (ОС) и оборудования, что позволяет выполнять Java-приложения на любом устройстве, которое поддерживает виртуальную машину. Еще одной особенностью технологии Java является гибкая система безопасности благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание. Это позволяет пользователям загружать программы, написанные на Java, на их компьютеры (или другие устройства) из неизвестных источников, при этом не опасаясь заражения вирусами, пропажи ценной информации и тому подобное.

2. Классификация платформ Java

Внутри ядра Java существуют три основных семейства технологий:

  1. J2EE или Java EE (начиная с v1.5) - Java Enterprise Editon, для создания программного обеспечения уровня предприятия (самая популярная серверная технология);

  2. J2SE или Java SE (начиная с v1.5) - Java Standard Editon, для создания пользовательских приложений, в первую очередь - для настольных систем;

  3. J2ME, Java ME или Java Micro Edition, для использования в устройствах, ограниченных по вычислительной мощности, в том числе мобильных телефонах, PDA, встроенных системах

Последним релизом является версия 1.6, в которой было произведено улучшение системы безопасности, улучшение поддержки скриптового языка Mozilla Rhino, улучшена интеграция с рабочим столом, добавлены некоторые новые возможности в создании графических интерфейсов.

3. Основные возможности платформы Java
  1. Автоматическое управление памятью;

  2. Расширенные возможности обработки исключительных ситуаций;

  3. Богатый набор средств фильтрации ввода - вывода;

  4. Набор стандартных коллекций, таких как массив, список, стек и тому подобное;

  5. Наличие простых средств создания сетевых приложений;

  6. Встроенные в язык средства создания многопоточных приложений;

  7. Стандартизованный доступ к базам данных на основе Java Database Connectivity и пространство имен.

4. Объектные переменные, объекты, ссылки и указатели

В языке Java имеются только динамически создаваемые объекты. Причем переменные объектного типа и объекты в Java - совершенно разные сущности. Переменные объектного типа являются ссылками, то есть неявными указателями на динамически создаваемые объекты. Это подчёркивается синтаксисом описания переменных. Пример правильного объявления переменных:

double[][] a = new double[10][20];

example a = new example(30);

При присваиваниях, передаче в подпрограммы и сравнениях объектные переменные ведут себя как указатели, то есть присваиваются, копируются и сравниваются адреса объектов. А при доступе с помощью объектной переменной к полям данных или методам объекта не требуется никаких специальных операций разыменовывания - этот доступ осуществляется так, как если бы объектная переменная была самим объектом.

Объектными являются переменные любого типа, кроме простых числовых типов. Явных указателей в Java нет. В отличие от указателей C, C++ и других языков программирования, ссылки в Java в высокой степени безопасны благодаря жёстким ограничениям на их использование, в частности:

  1. Нельзя преобразовывать объект типа int или любого другого примитивного типа в указатель или ссылку и наоборот;

  2. Над ссылками запрещено выполнять операции ++, −−, +, − или любые другие арифметические операции.

Преобразование типов между ссылками жёстко регламентировано. За исключением ссылок на массивы, разрешено преобразовывать ссылки только между наследуемым типом и его наследником, причём преобразование наследуемого типа в наследующий должно быть явно задано и во время выполнения производится проверка его осмысленности. Преобразования ссылок на массивы разрешены лишь тогда, когда разрешены преобразования их базовых типов, а также нет конфликтов размерности.

В Java нет операций взятия адреса амперсанда (&) или взятия объекта по адресу (*). Звёздочка в Java означает умножение, и только. Амперсанд (&) означает всего лишь «побитовое и» (двойной амперсанд - «логическое и»).

Благодаря таким специально введенным ограничениям в Java невозможно прямое манипулирование памятью на уровне физических адресов.

5. Сборка мусора

В языке Java невозможно явное удаление объекта из памяти - вместо этого реализована сборка мусора. Традиционным приёмом, дающим сборщику мусора указание на освобождение памяти, является присваивание переменной пустого значения null. Но это не значит, что объект, заменённый значением null, будет непременно и немедленно удалён. Данный приём всего лишь устраняет ссылку на объект, то есть отвязывает указатель от объекта в памяти. При этом следует учитывать, что объект не будет удален сборщиком мусора, пока на него указывает хотя бы одна ссылка из используемых переменных или объектов. Существуют также методы для инициации принудительной сборки мусора, но не гарантируется, что они будут вызваны исполняющей средой, и их не рекомендуется использовать для обычной работы.

6. Классы и функции

Java не является процедурным языком: любая функция может существовать только внутри класса. Это говорит о том, что терминология языка Java представлена не в виде функций, а в методах (это также преобразованные стандартные функции). Например, в Java нет функции синуса (sin()), а есть метод Math.sin() класса Math (содержащего, кроме синуса другие математический методы - cos(), exp(), sqrt(), abs() и многие другие).

6.1. Статические методы и поля

Для того чтобы не надо было создавать объект класса Math (и других аналогичных классов) каждый раз при вызове математических функций, введено понятие статических методов. Статический метод - static можно вызвать, не создавая объекта его класса. Пример реализации:

double a = Math.sin(1).

Ограничение, накладываемое на статические методы, заключается в том, что в объекте this они могут обращаться только к статическим полям и методам.

Статические поля имеют тот же смысл, что и в C++: каждое существует только в единственном экземпляре.

6.2. Финальность

Ключевое слово final (финальный) означает разные вещи при описании переменной, метода или класса. Финальная переменная (именованная постоянная величина) инициализируется при описании и дальше не может быть изменена. Финальный метод не может быть переопределён при наследовании и не может иметь наследников.

6.3. Абстрактность

В Java методы, не объявленные явно как final или private (индивидуальный), являются виртуальными в терминологии C++: при вызове метода, по-разному определённого в базовом и наследующем классах, всегда производится проверка времени выполнения.

Абстрактным методом (abstract) в Java называется метод, для которого заданы параметры и тип возвращаемого значения, но не тело. Абстрактный метод определяется в классах-наследниках. Например в C++ то же самое называется чисто виртуальной функцией. Для того чтобы в классе можно было описывать абстрактные методы, сам класс должен быть описан как абстрактный (объекты абстрактного класса создавать нельзя).

6.4. Интерфейсы

Высшей степенью абстрактности в Java является интерфейс (interface), который в свою очередь не является классом. Класс может наследовать, или расширять (extends) другой класс или реализовывать (implements) интерфейс. Кроме того, интерфейс может наследовать, или расширять другой интерфейс. Пример реализации наследования extends, где наследуются элементы из JPanel – стандартной панели Java:

public class ControlPanel extends JPanel{

/*тело класса*/

}

В Java класс не может наследовать более одного класса, зато может реализовывать сколько угодно интерфейсов.

Интерфейсы можно передавать методам как параметры, но нельзя создавать объекты их типов.

7. Архивы JAR

JAR расшифровывается как Java ARchive - архив Java. В Общем JAR - файл представляет собой обычный ZIP - файл с некоторыми дополнениями. Основная задача этого архива - хранить файлы с классами. То есть пакеты или каталоги, внутри которых находятся файлы с расширение «class» архивируются и JVM может их использовать уже в более удобном (компактном) виде.

Выгода очевидна - в реальных проектах вы вряд ли пользователь будет ограничиваться использованием библиотек классов только из JDK - скорее всего человек будет подключать множество классов, которые были созданы для решения определенных задач. Если все это огромное количество находилось бы на диске в виде файлов с расширением «class», то легко понять, насколько это неудобно и громоздко. Разработчики Java предложили вполне элегантное решение - пользователь может подключать архивные файлы, в которых запакованы тысячи скомпилированных классов. Несомненно, это конечно же удобнее, чем перемещать за собой в каждый проект все директории со всеми файлами.

Очень хороший пример представлен в каталоге JAVA_HOME/jre/lib - там находится очень важный архив - rt.jar. Эта библиотека содержит основные классы - String, JFrame, JButton, Date, Object. Такой архив можно открывать любой программой архиватором, установленной на компьютере.

Просматривая содержимое JAR - файла, пользователь рано или поздно обратит внимание на каталог META – INF с файлом MANIFEST.MF. Файл позволяет расширить функциональность - кроме обычного набора классов, JAR - файл может выполнять функции электронной подписи, поддержки версионности, подключения библиотек к самому архиву, определение класса для запуска (содержит основной метод main) [2, 3].

8. Подключение готовых JAR-файлов

Итак основная функция JAR - содержать набор классов в виде файлов с расширением «class». Далее рассмотрим, как подключать JAR - файлы к запускаемому классу, чтобы запускаемый класс мог использовать классы из JAR - файла.

Запуск программы на Java включает запуск JVM и передача ей из командной строки имени класса, который пользователь собирается запускать. Например, для запуска класса First в пакете edu.java.test надо в каталоге, внутри которого находится каталог edu/java/test набрать такую команду:

java edu.java.test.First;

В качестве аргумента пользователь передает полное имя класса, который собирается запускать. JVM кроме имени класса принимает достаточно много параметров, которые позволяют конфигурировать те или иные свойства JVM. Существует очень важный элемент - CLASSPATH - который используется для подключения JAR - файлов.

Рассмотрим полный цикл создания JAR - файла и его подключения без использования IDE - через командную строку, полезный навык для программиста. Плюсы такие, что пользователь действительно понимает суть. Например, в том же Unix/Linux очень большое количество работы гораздо удобнее делать в командной строке и некоторые продукты содержат утилиты, запускаемые из командной строки:

Допустим, что пользователь создал каталог JavaLesson. В этом каталоге создал структуру каталогов JarLib/edu/java/jar. Далее с помощью обычного текстового редактора создал файл ExampleOne.java:

package edu.java.jar;

public class ExampleOne{

public void exampleOne() {

System.out.println("Привет");

}

}

Далее в каталоге JavaLesson/JarLib скомпилируем файл ExampleOne.java вот такой командой:

java -cp .;JarLib/say.jar UseHello

После успешной компиляции идет создание JAR - файла с помощью команды:

jar cf say.jar edu/java/jar/ ExampleOne.class

В каталоге появится созданный файл.

Затем создается класс, который будет использовать наш класс ExampleOne. Для правильного пользования класса создаем этот класс в каталоге JavaLesson и причем без пакетов. Следовательно пользователь получает файл UseHello.java в каталоге JavaLesson:

import edu.java.jar. ExampleOne;

public class UseHello

{

public static void main(String[] args) {

ExampleOne eo = new ExampleOne ();

eo. exampleOne ();

}

}

Следует обратить внимание на первую строчку - в ней пользователь импортирует класс ExampleOne. В методе main пользователь создает объект и вызывает его метод. При компиляции в командной строке отобразится наше сообщение «Привет» [2].

Список используемых источников
  1. http://dic.academic.ru/dic.nsf/ruwiki/1219341

  2. http://java-course.ru/begin/jar/

  3. https://ru.wikipedia.org/wiki/Java

Просмотров работы: 365