Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по ПСП.docx
Скачиваний:
14
Добавлен:
25.09.2019
Размер:
116.02 Кб
Скачать

В.1 Java – объектно-ориентированный язык, предназначен для создания прог, переносимых на разные платформы и ОС. Прога, написанная на Java, транслируется компилятором в байт-код.

Байт-код – ассемблерные виртуальные машины. Файл с байт-кодом подгружается загрузчиком классов.

Достоинство: независимость байт-кода от ОС, гибкая система безопасности.

Java 1.0 – разработка началась в 1990г, первая официальная версия – 1991г.

Java 1.2 или Java 2 – 1998г. Библиотека для создания графического интерфейса, полная поддержка Unicode.

Java 5.0 – 2004г. Исп слово Update.

Java 6 – 2006, изменена официальная индексация. Вместо 6.0 – Java 6.

Java 7 – релиз 28 июля 2011г.

Интегрированная среда разработки – система программных средств, которая используется программистами для разработки ПО.

Среда разработки включает: компилятор, текстовый редактор, отладчик, средства автоматизации.

NetBeans, Eclipse

В.2 Типы данных:

1)Скалярный (логический: Boolean; числовой: целочисл – byte, short, int, с плав.точкой – float, double; символьный: char)

2)Ссылочный (интерфейсы: аннотации; классы: перечисления, суперкласс).

Ссылочные примитивы: логич – Boolean, символьный – character, числовой – number: целочисленный – byte, integer, с плав.точкойfloat, double.

В.3 Пакет – простой набор объектов, где каждый объект связан с др объектом в пакете.

Объявление: package идёт первым при определении класса.

Каждый Java-объект существует в пакете. Названия пакетов используют схему с точками для преобразования пути к файлу. Java.util.ArrayList

Все компоненты – узлы. Последний узел ссылается на ArrayList.java

Import – указывает компилятору место положения пакета.

Import java.util.ArrayList

Import java.util.*; - если импортировать более 1класса из пакета

В.4 Платформа – комплект утилит, библиотек языка программирования в API.

Платформа Java осуществляет взаимодействия:

Java Micro Edition – для мобильных телефонов.

Java Standart Edition – для приложений уровня Клиент.

Java Enterprise Edition – для распределённых приложений.

В.5 JDKкомплект разработчика, включает в себя комплект Java, стандартные библиотеки классов Java, отладчик, утилиты, исполняющие системы, гарантирует документации (javadoc).

JRE - исполняющие системы, минимальная реализация виртуальной машины, нужна для исполнения Java-приложений без компилятора и др средств. Состоит из виртуальной машины и библиотеки классов.

JVM – виртуальные машины Java, основная часть исполняющей системы (JRE). Этот компонент Java-платформы ответственен за независимое исп от аппарата обеспечения или сети.

В.6 Парадигма программированиякомплекс концепций, примитивов и абстракций, определяющих стиль программирования.

Императивное программирование – парадигма программир, описывающая процесс вычисления в виде инструкций.

Структурное - в основе лежит представление проги в виде иерархической структуры блоков.

Функциональное – раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании.

Логическое – основана Логическое – основана на автоматическом доказательстве теорем.

Объектно-ориентированная парадигма – представляет прогу как набор объектов и их взаимодействий.

В.7,8 Инкапсуляция – свойство системы, позволяющее объединять данные и методы в классе и скрыть детали реализации от пользователя.

Наследование – процесс, посредством которого один объект может приобретать свойства другого объекта.

Класс, от которого производится наследование, - родительский (базовый, суперкласс). Новый класс – потомок (наследник, производный).

Наследование бывает простое и множественное. Но множественного наследования в Java нет.

Полиморфизм – механизм использования одного и того же метода для решения 1 и более задач.

Абстракция – в ООП придание объекту исключительных характеристик.

В.9 Класс – основной элемент абстракции на Java.

Классы взаимодействую друг с другом и объединяются в пакеты. Из пакетов создаются модули, которые взаимодействуют друг с другом.

Имя класса в пакете должно быть уникальным.

Физический пакет представляет собой каталог, в котором помещаются программные файлы, содержащие реализацию классов.

Объявление класса:

Package имя_каталога;

Import имя_пакета_для_импорта;

Class имя_класса {

//переменные

Спецификатор тип имя_переменной;

//конструкторы

//методы

Спецификатор тип имя_метода() {

//тело метода }

}

В.10 Конструктор – специальный метод, который вызывается для создания объекта.

Отличия конструктора от метода:

1)Не возвращает значения, даже void.

2)Не наследуется

3)Не может быть abstract, final, native, static

Конструкторы и методы используют ключевое слово this по-разному/

Для конструктора: используется, чтобы ссылаться на др конструктор в этом же классе, но с др списком параметров.

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

Отличие метода от конструктора:

1)Имеет тип возвращаемых данных, но не каждый возвращает что-либо.

2)Если ничего не возвращает, то void.

3)Принимает параметры.

Спецификатор_доступа Имя_класса (аргументы) {

//тело конструктора }

В.11 Объекты создаются с помощью new. Объект будет доступен до конца области действия. Ссылка на объект исчезает в конце области действия.

В Java сборщик мусора освобождает память от объектов, когда надобность в них отпадает. В Java нет деструкторов.

Существует специальный предикат, который вызывается в момент гибели объекта, перед освобождением памяти объекта. Этот предикат - finalize.

Объекты удаляются сборщиком мусора не во всех случаях:

- объекты могут быть и не переданы сборщику мусора;

- сборщик мусора не является удалением.

В.12 Язык Java предоставляет несколько уровней защиты, обеспечивающих возможность настройки области видимости данных и методов.

  • по умолчанию – дружественные члены класса доступны классам, находящимся в том же пакете;

  • private – члены класса доступны только членам данного класса;

  • protected – члены класса доступны классам, находящимся в том же пакете, и подклассам – в других пакетах;

  • public – члены класса доступны для всех классов в этом и других пакетах.

В.13 Спецификаторы

[static] – поля данных, объявленные в классе как static, являются общими для всех объектов класса и называются переменными класса. Если 1объект изменит значение поля, то это изменение увидят все объекты.

[final] – модификатор, исп для определения констант в качестве члена класса, локальной переменной или параметра метода. Методы нельзя замещать в подклассах.

[abstract] – абстрактные методы размещаются в абстрактных классах или интерфейсах, тело у такого метода отсутствует и должен реализовывается в подклассах.

[native] – приложение на Java может вызывать методы, написанные на С++. Методы, помеченные native, можно переопределять обычными методами в подклассах.

[synchronized] – при исп нескольких потоков управления в одном приложении нужно синхронизировать методы.

В.14 Наследование - это процесс, посредством которого один объект может приобретать свойства другого. Точнее, объект может наследовать основные свойства другого объекта и добавлять к ним черты, характерные только для него.

Класс, от которого производится наследование, - родительский (базовый, суперкласс). Новый класс – потомок (наследник, производный).

Наследование бывает простое и множественное. Но множественного наследования в Java нет.

Подкласс наследует переменные и методы суперкласса, используя ключевое слово extends.

В.15 Классы могут взаимодействовать друг с другом не только посредством наследования и использования ссылок, но и посредством организации логической структуры с определением одного класса в теле другого.

Доступ к элементам внутреннего класса возможен из внешнего класса только через объект внутреннего класса, который должен быть создан в коде метода внешнего класса.

Внутренние классы (inner) – нестатические вложенные классы.

Использование объекта внутреннего класса вне своего внешнего класса возможно только при наличии доступа и при объявлении ссылки в виде:

Ship.Engine obj=new Ship( ).new Engine( );

Если не существует необходимости в связи объекта внутреннего класса с объектом внешнего класса, то есть смысл делать такой класс статическим.

Вложенный класс – логически связан с классом-владельцем, но может быть использован независимо от него.

При объявлении такого внутреннего класса присутствует служебное слово static.

В.16 Перегрузка методовесли известно несколько версий с одним и тем же именем, но разным списком параметров. Это “раннее связывание”.

Переопределение методов – списки параметров совпадают. Это “позднее связывание”.

При перегрузке всегда следует придерживаться правил:

- не использовать сложных вариантов перегрузки;

- не использовать перегрузку с одинаковым числом параметров;

- заменять при возможности перегрузку методов на несколько разных методов.

В.17 Переопределение методов служит основой для одной из наиболее мощных концепций Java — динамической диспетчеризации методов.

Динамическая диспетчеризация методов — механизм, посредством которого разрешение обращения к переопределенному методу осуществляется во время выполнения, а не во время компиляции.

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

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

В.18 Абстрактный класс в объектно-ориентированном программировании — базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП - полиморфизм.

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

В одних языках создавать экземпляры абстрактных классов запрещено, в других это допускается (например, Delphi), но обращение к абстрактному методу объекта этого класса в процессе выполнения программы приведёт к ошибке. Во многих языках допустимо объявить любой класс абстрактным, даже если в нём нет абстрактных методов (например, Java), именно для запрещения создания экземпляров. Абстрактный класс можно рассматривать в качестве интерфейса к семейству классов, порождённому им, но, в отличие от классического интерфейса, абстрактный класс может иметь определённые методы, а также свойства.

Абстрактные методы часто являются и виртуальными, в связи с чем понятия «абстрактный» и «виртуальный» иногда путают.

В.19 Исключения представляют собой классы, объекты которых создаются в случае ошибки при выполнении какой-либо функции. Исклю-чения являются наследниками суперкласса Throwable и его подклас-сов Error и Exception из пакета java.lang. Часто используется под-класс RuntimeException класса Exception и его наследники: ArithmeticException, ArrayStoreException, ClassCastException, IllegalArgumentException, IllegalMonitorStateException, IndexOutOfBoundsException, SecurityException. Обычно используется один из трех подходов обработки исключе-ний: перехват и обработка исключения; объявление исключений в секции throws метода и передача вызывающему методу; перехват ис-ключения, преобразование его к другому классу и повторный вызов.  При вводе/выводе используется класс IOException.

Исключение IOException возбуждается методом read(): public int read() throws IOException; Если блок try-catch опустить, компилятор укажет на ошибку. Если метод может генерировать исключения, которые сам не об-рабатывает, он должен объявить о таком поведении с помощью клю-чевого слова throws, чтобы вызывающие методы могли защитить себя от этих исключений. Форма объявления: тип имя_метода(список аргументов) throws список_исключений { } При этом сам объявляемый метод может содержать блоки try-catch, а может и не содержать их.

Исключение "деление на 0" возникнет при запуске без аргументов командной строки (а = 0). При наличии аргумента командной строки вызовется исключение "превышение границ массива". Подклассы исключений должны следовать перед любым из их су-перклассов, иначе суперкласс перехватит исключения. Например: catch(Exception e){/*код*/} //суперкласс Exception перехватит catch(ArithmeticException e) {/*код*/}//не сработает Операторы try можно вкладывать друг в друга. Если у оператора try низкого уровня нет раздела catch, соответствующего возбужден-ному исключению, поиск будет развернут на одну ступень выше, и будут проверены разделы catch внешнего оператора try.

В.20 Собственные исключенияразработчик может создать собственное исключение как подкласс класса Exception и затем использовать его при обработке ситуации. Не является исключит с точки зрения языка, но нарушает логику вещей.

21. Потоки ввода-вывода и работа с файлами в Java.

В Java для описания работы по вводу-выводу используется специальное понятие поток данных (stream). Поток данных связан с некоторым источником или приемником данных, способных получать или предоставлять информацию.

Потоки делятся на: 1. Входные, читающие данные 2. Выходные, передающие (записывающие) данные.

В Java потоки естественным образом представляются объектами. Описывающие их классы как раз и составляют основную часть пакета java.io. Они довольно разнообразны и отвечают за различную функциональность.

Класс FILE служит для хранения и обработки в качестве объектов каталогов и имен файлов. Этот класс не содержит методы лоя работы с содержимым файла, но позволяет манипуоировать такими свойствами файла, как права доступа, дата и время создания, путь в иерархии каталогов, создание, удаление файла, изменение его имени и каталогов и т.д.

Объект класса FILE создается одним из способов:

File myFile=new File(“\\com\\myFile.txt”);

File myDir=new File(“c:\\jdk 1.6.0\\scr\\java\\io”);

File myFile=new File(myDir,”File.java”);

FileInputStream (FileOutputStream) - Поток ввода (вывода), который читает (записыает) из файла.

RandomAccessFile - Поддерживает ввод/вывод файла произвольного доступа.

22. Байтовые и символьные потоки ввода-вывода

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

Классы байтовых потоков

Байтовые потоки определяются в двух иерархиях классов. Наверху этой иерархии — два абстрактных класса: InputStream и OutputStream. Каждый из этих абстрактных классов имеет несколько конкретных подклассов, которые обрабатывают различия между разными устройствами, такими, как дисковые файлы, сетевые соединения и даже буферы памяти.

Абстрактные классы InputStream и OutputStream определяют несколько ключевых методов, которые реализуются другими поточными классами. Два наиболее важных— read() и write(), которые соответственно читают и записывают байты данных. Оба метода объявлены как абстрактные внутри классов InputStream и OutputStream и переопределяются производными поточными классами.

InputStream, OutputStream - Абстрактные классы, которые описывают поточный ввод и вывод.

BufferedInputStream, BufferedOutputStream - Буферизированный поток ввода и вывода.

ByteArrayOutputStream (ByteArrayInputStream) - Поток ввода (вывода), который читает (записывает) из байт-массива.

FileInputStream (FileOutputStream) - Поток ввода (вывода), который читает (записыает) из файла.

RandomAccessFile - Поддерживает ввод/вывод файла произвольного доступа.

Классы символьных потоков

Символьные потоки определены в двух иерархиях классов. Наверху этой иерархии два абстрактных класса: Reader и Writer. Они обрабатывают потоки символов Unicode. В Java существуют несколько конкретных подклассов каждого из них. Классы Reader и Writer – наследники InputStream и OutputStream. Если с их помощью записывать или считывать текст, то сначала необходимо сопоставить каждому символу его числовой код. Такое соответствие называется кодировкой. Абстрактные классы Reader и Writer определяют несколько ключевых методов, которые реализуются другими поточными классами. Два самых важных метода — read() и write(), которые читают и записывают символы данных, соответственно. Они переопределяются производными поточными классами.

Reader, Writer - Абстрактные классы символьного потока ввода и вывода

BufferedReader, BufferedWriter - Буферизированные символьные потоки ввода и вывода

FileReader - Поток ввода, который читает поток символов из файла;

FileWriter - Выходной поток, который записывает символы в файл

StringReader - Поток ввода, который читает из строки;

StringWriter - Поток вывода, который записывает в строку

PrintWriter - Поток вывода, который поддерживает методы print() и println().