Анализ элементов трассировки стека Java

Анализ элементов трассировки стека JavaТрассировка стека — это список вызовов методов для данной точкой программы. Вы наверняка неоднократно видели эту информацию, она отображается каждый раз, когда при выполнении Java-программы возникает неконтролируемые исключение.

В версиях, предшествующих Java SE 1.4, для получения текстового описания трассировки стека применялся метод printStackTrace() класса Throwable. Теперь разработчикам доступен метод getStackTrace() он возвращает массив объектов StackTraceElement, которые можно анализировать в программе. Например: Читать

JNLP API Java

JNLP API JavaJNLP API позволяет неподписанному приложению запускаться в «песочнице» и в то же время получать безопасный доступ к локальным ресурсам. Например, в нем предусмотрены службы для загрузки и сохранения файлов. Приложения не видит файловой системы и не может специфицировать имена файлов.

Вместо этого отображается файловый диалог, и пользователь программы выбирает файл. Перед появлением диалогового окна для выбора файлов пользователь получает предупреждение и должен выразить согласие на продолжение работы. Более того, на самом деле API не предоставляет программе доступа к объекту File.

В частности, приложение не может самостоятельно обнаружить файл. Поэтому программистам предоставляются инструменты для реализации действий открытия и сохранения файла, но системная информация максимально скрыта от сомнительных приложений. Читать

Ограничение переменных типов Java

Ограничение переменных типов JavaИногда класс или метод нуждается в наложении ограничений на переменные типов. Приведем типичный пример. Нужно вычислить минимальный элемент массива:

Но здесь есть проблема. Взгляните на код метода min(). Переменная smallest имеет тип Т, а это означает, что она может быть объектом произвольного класса. Откуда мы знаем, имеет ли класс Т метод compareTo()? Читать

Симметричные шрифты в языке Java

Симметричные шрифты в языке JavaКриптографическое расширение Java содержит класс Cipher, который является суперклассом всех классов, имеющих отношение к шифрованию. Для создания объекта, реализующего алгоритм шифрования, используется метод getInstance():

В JDK для всех шифров используется поставщик SunJCE. Если имя поставщика не указано явно, то по умолчанию принимается имя SunJCE. Если вы хотите воспользоваться алгоритмами, которые не поддерживаются инструментами Sun, следует указать другого поставщика.

Имя алгоритма задается в виде строки, например «DES» или «DES/CBC/PKCS5Padding». Читать

Использование аннотаций в языке Java

Использование аннотаций в языке JavaАннотациями(annotations) называются дескрипторы, которые разработчики вставляют в свой исходный код для того, чтобы та или иная утилита могла обрабатывать их. Эти утилиты могут работать как на уровне исходного кода, так и на уровне файлов классов, в которые компилятор помещает аннотации.

Аннотации не влияют на способ компиляции программ. Компилятор Java генерирует одинаковые инструкции виртуальной машины как с, так и без аннотаций.

Для извлечения пользы из аннотаций необходимо выбирать средство обработки (processing tool). В код вставляются аннотации, понятные определенному средству обработки, которое потом всегда и применяется для их расшифровки. Читать

Написание сценариев для платформы Java

Написание сценариев для платформы JavaЯзык сценариев — это такой язык, который позволяет избегать обычного цикла операций редактирования, компиляции, связывания и выполнения за счет осуществления интерпретации текста программы во время выполнения. Язык сценариев обладают рядом преимуществ.

  • Быстрый цикл работы, стимулирующий желание к экспериментированию.
  • Возможность изменения поведения выполняющейся программы.
  • Возможность выполнения настройки пользователями программы.

С другой стороны, у большинства языков программирования отсутствуют функций, необходимые для программирования сложных приложений, вроде строгого контроля типов, инкапсуляции и модульности. Читать

Иерархия загрузчиков классов Java

Иерархия загрузчиков классов JavaЗагрузчики классов связаны отношениями родитель/потомок. У каждого загрузчика классов, за исключением первичного, имеется родительский загрузчик классов. Предполагается, что загрузчик классов дает шанс своему родителю загружать любой нужный класс и загружает его сам только в том случае, если этого не может сделать родитель. Например, если системный загрузчик классов запрашивает загрузку системного класса(например, java.util.arrayList), то прежде он предлагает загрузить его расширенному загрузчику классов.

Расширенный загрузчик классов, в свою очередь, предлагает сделать это первичному загрузчику классов. Наконец, первичный загрузчик классов находит и загружает класс из файла rt.jar при этом все другие загрузчики классов прекращают дальнейший поиск.

Некоторые программы имеют основанную на подключаемых модулях архитектуру, в которой определенные части кода упаковываются в виде дополнительных необязательных модулей. Если подключаемые модули упаковываются в виде файлов JAR, классы этих модулей могут загружаться просто с помощью экземпляра URLClassLoader: Читать

Класс Executors в Java

Класс Executors в JavaСоздание нового потока — довольно дорогостоящая операция, поскольку включает взаимодействие с операционной системой. Если ваша программа создает большое количество кратковременных потоков, то имеет смысл использовать пул потоков. Пул потоков содержит множество простаивающих потоков, готовых к запуску. Вы помещаете Runnable в пул, и один из потоков вызывает его метод run(). Когда метод run() завершается, поток не уничтожается и остается в пуле в готовности обслужить новый запрос. Читать

Интерфейсы Callable и Future в Java

Интерфейсы Callable и Future в JavaИнтерфейс Runnable инкапсулирует задачу, выполняющуюся асинхронно. Вы можете воспринимать это как асинхронный метод без параметров и возвращаемого значения. Callable подобен Runnable, но с возвратом значения. Интерфейс Callable является параметризованным типом, с единственным общедоступным методом call(). Читать

Блокированные и ожидающие потоки Java

Блокированные и ожидающие потоки JavaКогда поток заблокирован или находится в состоянии ожидания, он временно не активен. Он не выполняет никакого кода и потребляет минимум ресурсов. На планировщике потоков лежит обязанность повторно активизировать его. Подробности зависят от того, как было достигнуто неактивное состояние. Читать