- •Объектно-ориентированное программирование (общие сведения).
- •Атрибуты объекта в ооп.
- •Преимущества многократного использования кода, понятие модульности, ее реализация.
- •Возможности и назначение jvm.
- •Особенности проектирования программ в Java.
- •Объектная модель Java.
- •Пакет java.Lang.
- •Назначение и состав библиотек классов Java.
- •Особенности управления программами в Java.
- •Порядок выполнения программ в Java
- •Понятие превращения программ Java в исполняемый код.
- •Принцип инкапсуляции в java
- •Принцип наследования в Java
- •Понятие о классах в java
- •Реализация процедуры в java
- •Понтие функции в java
- •Возвращаемые значения в функциях.
- •Передача параметров в java.
- •Атрибуты класса
- •Способы создания и обработка массивов данных
- •Операторы прерывания программ, основные типы ошибок
- •Типы переменных в java
- •Особенности объявления переменных в java
- •Объявление массива данных в java
- •Логические операторы java
- •Операции и конструкции сравнения в java
- •Проектирование программ и состав модулей
- •Организация циклов в java
- •Понятие интерфейсов в java
- •Возможности java по работе с файлами
- •Потоки выполнения и синхронизация.
- •Виды встроенных классов.
- •Понятие коллекций, списков и итераторов.
- •Управление ходом выполнения программ.
- •Работа со стороками.
- •Сериализация объектов.
- •Создание объекта-исключения.
- •Использование модификаторов доступа.
- •Организация доступа к файлам.
- •Интерфейсы.
- •Основные отличия интерфейсов от классов.
- •Особенности наследования интерфейсов.
- •Базовые классы при работе с потомками выполнения в Java.
- •Базовые классы реализации ввода/вывода данных.
- •Объектные и ссылочные типы данных Java.
- •Понятие компиляции проекта в Java.
- •Способы создания модульного компонента в Java.
- •Работа "сборщика мусора".
- •Понятие преобразования типов в Java.
- •1. Виды преобразований
- •1.1. Расширяющие преобразования чисел
- •1.2. Сужающие преобразования чисел
- •1.3. Расширяющие преобразования ссылок
- •1.4. Сужающие преобразования ссылок
- •1.5. Преобразования в строки
- •1.6. Недопустимые преобразования
- •2. Контексты преобразований
- •2.1. Преобразование при присваивании
- •5.4.2.2. Преобразование аргументов метода
- •5.4.2.3. Преобразование в строку
- •5.4.2.4. Явное преобразование типа
- •5.4.3. Преобразования типов числовых операндов
5.4.2.2. Преобразование аргументов метода
Преобразование аргументов метода происходит, когда фактические значения аргументов преобразуется к типу параметров метода или конструктора при его вызове. При этом всегда возможны расширяющие преобразования типов (как числовых, так и ссылочных) и недопустимы сужающие преобразования.
5.4.2.3. Преобразование в строку
Преобразование в строку происходит только в одном случае: когда бинарная операция + применяется к двум операндам, один из которых имеет тип String. В этой ситуации второй операнд также преобразуется к типу String, и результатом операции является конкатенация полученных строк.
5.4.2.4. Явное преобразование типа
Явное преобразование типа происходит, когда к операнду явно применяется операция приведения типа (type cast). В этой ситуации могут применяться все описанные выше виды преобразований типов, кроме преобразования в строку. Попытка явного преобразования к типу, отмеченная выше, как запрещенная, вызовет ошибку компиляции. Кроме того, на этапе выполнения возможна генерация исключения ClassCastException, если заданное преобразование недопустимо.
5.4.3. Преобразования типов числовых операндов
Преобразование типов в процессе вычисления числовых выражений имеет ряд особенностей. Они сводятся к двум случаям: преобразования операндов в унарных операциях и в бинарных операциях.
Перед выполнением унарной операции:
если операнд имеет тип byte, short или char, он преобразуется к типу int;
в остальных случаях его тип не изменяется.
Перед выполнением бинарной операции:
если один из операндов типа double, то второй также преобразуется к типу double;
в противном случае, если один из операндов типа float, то второй также преобразуется к типу float;
в противном случае, если один из операндов типа long, то второй также преобразуется к типу long;
в противном случае, оба операнда преобразуются к типу int.
Вопрос №50. Основные средства для работы с потоками выполнения.
Основные операции, доступные для потоков при работе с памятью:
use- чтение значений переменной из рабочей памяти потока,
assign- запись значений переменной в рабочую память потока,
read- получение значений переменной из основного хранилища,
load-Сохранение значений переменной, прочитанного их основного хранилища в рабочей памяти,
store- передача значений переменной из рабочей памяти в основное хранилище,
write- сохраняет в основном хранилище значений переменной переданной командой store.
При работе с переменными в потоке постоянно применяются команды use и assign для использования текущего значения и присвоение нового.
При получении данных read и load для считывания и сохранение результатов.
При пересылке данных store и write.
Таким образом, все действия выполняемые потоком строго упорядочены и следуют одно за другим, т.н. поток создается с чистой рабочей памятью, и перед использованием загружает переменные из основного хранилища. Переменная сначала создается в основном хранилище, а затем копируется в рабочую память потоков. Таким образом, потоки никогда не взаимодействуют друг с другом напрямую, а только через основное хранилище.
Для более строгого выполнения правил работы со значениями переменных существует модификатор volatile.
В основном хранилище для каждого объекта поддерживается блокировка lock unlock
Для изменения порядка доступа к переменным в потоках для реализации механизмов блокировок необходимо указывать ключевое слово synchronized в качестве синхронизации блока или метода. Тогда прежде чем начать выполнять действия, потоки блокируют объекты и вызываемые методы.
Статический static synchronized позволяет установить блокировку на объекты класса Class. При работе с блокировками могут возникать взаимные блокировки, приводящие к зависанию программы. Каждый объект в java дополнительно имеет wait-set набор потоков исполнения. Любой поток может вызвать метод wait() объекта с доступом в его поток. Тогда выполнение такого потока приостанавливается, пока другой потом не вызовет у этого объекта метод notify all() или notify, пробуждающий все или один поток.
