- •Вопрос 1. История языка программирования Java. Достоинства и недостатки языка. Основные особенности. Жизненный цикл программы на Java. Краткая теория: особенности и сферы применения Java
- •Особенности языка Java
- •Плюсы программирования на Java
- •Объектно-ориентированное программирование
- •Java — язык высокого уровня с простым синтаксисом и плавной кривой обучения
- •Стандарт для корпоративных вычислительных систем
- •Безопасность
- •Независимость от платформы («Написать один раз и использовать везде»)
- •Автоматическое управление памятью
- •Многопоточность
- •Стабильность и сообщество
- •Минусы программирования на Java
- •Платное коммерческое использование
- •Низкая производительность
- •Отсутствие нативного дизайна
- •Многословный и сложный код
- •Принципы ооп:
- •Вопрос 2 Примитивные типы Java. Область видимости и время жизни объектов.
- •Область видимости и время жизни переменных.
- •Область видимости и время жизни объектов
- •Вопрос 3. Классы и объекты. Структура класса. Конструкторы класса
- •Конструкторы
- •Вопрос 4. Модификаторы доступа
- •Инкапсуляция
- •Вопрос 5. Ключевое слово this
- •Вопрос 7. Операции. Литералы. Операторы Литералы
- •Операции
- •Переопределение методов
- •Вопрос 9. Полиморфизм. Перегрузка и переопределение.
- •Вопрос 10. Ключевое слово final. В java есть ключевое слово – final. Оно может применяться к классам, методам, переменным (в том числе аргументам методов).
- •Вопрос 11. Абстрактные классы и методы
- •Вопрос 12. Интерфейсы
- •Методы по умолчанию
- •Статические методы
- •Приватные методы
- •Статические вложенные классы
- •Внутренние классы
- •Локальные классы
- •Анонимные классы
- •Вопрос 14. Коллекции объектов в Java. P.S. Взято из лекции
- •Вопрос 15. Итераторы Взято из лекции
- •Вопрос 16. Интерфейсы Comparable, Comparator. Назначение, примеры
- •Вопрос 17. Обработка исключений. Поведение программы при возникновении исключения. Структура и использование блока перехвата исключений.
- •Поведение программы при появлении исключения
- •Обработка исключений. Структура и использование блока перехвата исключений.
- •Вопрос 18. Классы исключительных ситуаций. Блок finally
- •Классы исключительных ситуаций:
- •Блок finally
- •Вопрос 19. Генерация исключительных ситуаций. Создание собственных классов исключительных ситуаций. Исключительные ситуации и наследование Генерация исключительных ситуаций
- •Создание собственных классов исключительных ситуаций
- •Исключительные ситуации и наследование
- •Вопрос 20. Ввод/вывод (I/o) в Java
- •Иерархия InputStream
- •Иерархия Reader
- •Иерархия OutputStream
- •Иерархия Writer
- •Класс RandomAccessFile
- •Класс File
- •Вопрос 21. Сериализация объектов.
Вопрос 19. Генерация исключительных ситуаций. Создание собственных классов исключительных ситуаций. Исключительные ситуации и наследование Генерация исключительных ситуаций
При генерации исключения к той ситуации, которая описана нужно подобрать правильный класс исключения. В java.lang определены все классы исключений. По списку классов, которые описывают исключения, необходимо выбрать подходящее. Выбрав подходящее исключение, при помощи оператора throw мы можем реализовать метод следующим образом: public double f (double x) { // Аргумент должен быть положительным
if (x < 0)
throw new IllegalArgumentException (“Параметр метода f должен быть неотрицательным”);
...
}
Создание собственных классов исключительных ситуаций
Вообще, в Java предусмотрены классы исключений практически на все ситуации, но может появится такая ситуация, когда нельзя подобрать по смыслу подходящее исключение. В такой ситуации можно создать свой класс исключительной ситуации. Для того, чтобы это сделать, создаём обычный класс и делаем его наследником класса Exception. Далее создаем конструктор этой реализации. Потом создаем метод-конструктор, но со строковым параметром, где мы это сообщение передаем:
public class MyException extends Exception {
public MyException() {}; // Конструктор
public Myexception (String msg) {
super(msg);
}
}
Единственное, что добавляет этот код к стандартным возможностям - это новое имя исключения. Таким образом можно обработать свою исключительную ситуацию.
Исключительные ситуации и наследование
Если в базовом классе генерировалось исключение, то и в порожденном классе его нужно тоже генерировать. Если в базовом классе оно не генерировалось, то и в дочернем мы это исключение не сможем сгенерировать. Это же правило распространяется на интерфейсы и абстрактные классы.
Вопрос 20. Ввод/вывод (I/o) в Java
Стандартная библиотека Java имеет очень развитое средство ввода/вывода. Все возможности ввода/вывода сосредоточены в пакете java.io. Рассмотрим иерархию классов ввода/вывода:
Существует 2 параллельных иерархии классов ввода: InputStream и Reader.
И вывода: OutputStream и Writer.
Кроме этих 4 иерархий есть класс RandomAccessFile, который объединяет в себе как возможности ввода, так и возможности вывода. И также есть класс File, предназначенный для работы с файловой системой на уровне файлов, каталогов и так далее.
Иерархия InputStream
InputStream
ByteArrayInputStream
FileInputStream
FilterInputStream
BufferedInputStream
DataInputStream
ObjectInputStream
PipedInputStream
Класс InputStream несмотря на то, что является абстрактным классом, играет очень важную роль. Он является родоначальником иерархии и содержит реализацию ряда методов ввода, то есть всё то, что используют его наследники. Как родоначальник иерархии он используется следующим образом. Очень часто в качестве параметров конструкторов или методов различных классов выступает InputStream. Согласно правилам аппарата наследования это означает, что в качестве параметра может быть передан объект любого класса из приведенной иерархии. Как мы увидим ниже, это позволяет комбинировать классы для достижения нужных нам целей. Кроме того, InputStream как родоначальник иерархии определяет, какие методы должны быть у всех классов данной иерархии.
Рассмотрим методы класса InputStream.
public abstract int read() throws IOException - читает один байт из входного потока. Результат, как ни странно, int (занимает 4 байта). Прочитанный байт заносится в младший байт результата.
public int read(byte[] b) throws IOException - читает последовательность байт из файла. Длина последовательности равна длине массива, заданного в качестве параметра. Может прочесть меньше байт, если чтение достигло конца файла. Возвращает количество прочитанных байтов.
public int read(byte[] b, int off, int len) throws IOException - то же, что и предыдущий метод, но заполняет массив с указанного байта и читает не больше, чем указано параметром len.
public long skip(long n) throws IOException - пропускает n байт файла.
Это основные методы. Есть еще методы available, mark, markSupported, reset, применяемые в специальных случаях.
Как мы видим, в InputStream реализованы все методы, кроме первого - он объявлен абстрактным. Соответственно, в порожденных классах все эти методы можно не реализовывать, а унаследовать от InputStream, кроме указанного абстрактного метода read(...), который должен быть реализован в любом порожденном неабстрактном классе.
Все методы класса InputStream могут порождать IOException, поэтому вся работа с файлами должна быть заключена в try-catch-блоки.
Класс FileInputStream - это основной класс из данной иерархии для работы с файлами. Имеет два основных конструктора.
FileInputStream(File file) throws FileNotFoundException и
FileInputStream(String name) throws FileNotFoundException
В остальном, этот класс ничего не добавляет к функциональности класса InputStream.
Класс FilterInputStream - это просто базовый класс для двух других классов. Он не является абстрактным, но сам по себе ничего не добавляет к возможностям InputStream. Его единственный конструктор требует передачи в качестве параметра объекта класса InputStream, т.е. фактически объекта некоторого неабстрактного класса, порожденного от InputStream.
Прямое использование этого класса в программе бессмысленно.
Класс BufferedInputStream является одним из двух наследников FilterInputStream. Функционально он тоже ничего не добавляет к возможностям InputStream. Он служит для организации более эффективного "буферизованного" ввода данных. Использовать его не обязательно, но для большей эффективности работы программы лучше все же использовать.
Класс DataInputStream - второй наследник FilterInputStream.
Имеет много полезных методов, позволяющих вводить из входного потока строки, числа любых типов. Но, тем не менее, в обычных программах он совершенно бесполезен, т.к. работает с кодировкой Unicode.
Класс ObjectInputStream - это очень важный и нужный класс. Позволяет реализовывать ввод объектов.
Класс PipedInputStream - это специальный класс, используемый для связи отдельных программ друг с другом. Является важным инструментом организации синхронизации потоков.
