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

12.Массивы. Инициализация массива, создание и оперирование значениями массива. Преобразование типов, одномерные и многомерные массивы, механизм клонирования в Java.

Массив представляет собой упорядоченный набор элементов. Элементы массива могут иметь примитивный тип или являться ссылками на объекты, в том числе и ссылками на другие массивы. Строка int[] ia = new int[3];объявляет массив с именем ia, в котором изначально хранится три значения типа int. При объявлении переменной-массива размер не указывается. Количество элементов в массиве задается при его создании оператором new, а не при объявлении. Размер объекта-массива фиксируется в момент его создания и не может изменяться в дальнейшем. Размер массива можно получить из поля length. Для нашего примера следующий фрагмент программы перебирает все элементы массива и выводит каждое значение. Массивы всегда являются неявным расширением класса Object.

Одно из преимуществ многомерных массивов состоит в том, что каждый вложенный массив может иметь свои размеры.

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

Метод arraycopy() класса System, позволяет копировать часть одного массива в другой, начиная с указанной позиции.

Пример:

public class ArrayCopyDemo {

public static void main(String[] args) {

int mas1[] = { 1, 2, 3 },

mas2[] = { 4, 5, 6, 7, 8, 9 };

show("mas1[]: ", mas1);

show("mas2[]: ", mas2);

Объекты в методы передаются по ссылке, в результате чего в метод передается ссылка на объект, находящийся вне метода. Поэтому если в методе изменить значение поля объекта, то это изменение коснется исходного объекта. Во избежание такой ситуации для защиты внешнего объекта следует создать клон (копию) объекта в методе. Класс Object содержит protected-метод clone(), осуществляющий побитовое копирование объекта производного класса. Однако сначала необходимо переопределить метод clone() как public для обеспечения возможности вызова из другого пакета. В переопределенном методе следует вызвать

базовую версию метода super.clone(), которая и выполняет собственно клонирование. Чтобы окончательно сделать объект клонируемым, класс должен реализовать интерфейс Cloneable. Интерфейс Cloneable не содержит методов

относится к помеченным (tagged) интерфейсам, а его реализация гарантирует, что метод clone() класса Object возвратит точную копию вызвавшего его объекта с воспроизведением значений всех его полей. В противном случае метод генерирует исключение CloneNotSupportedException. Следует отметить, что

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

13.Операторы и структура кода. Управление ходом выполнения программы.

Операторы Java практически совпадают с операторами C++ и имеют такой же приоритет. Поскольку указатели в Java отсутствуют, то отсутствуют операторы *, &, ->, delete для работы с ними. Операторы работают с базовыми типами и объектами классов-оболочек над базовыми типами. Операторы + и + производят также действия с по конкатенации с операндами типа String. Логические опера-

торы, ! и оператор присваивания применимы к операндам любого объектного и базового типов, а также литералам. Применение оператора присваивания к объектным типам часто приводит к ошибке несовместимости типов, поэтому

такие операции необходимо тщательно контролировать.

Операции над числами: +, –, *, %, /, ++, –– а также битовые операции &, |, ^, ~ и операции сдвига аналогичны операциям C++. Деление на ноль целочисленного типа вызывает исключительную ситуацию.

14. Исключения. Работа с ошибками или исключительными ситуациями. Классификация ошибок, иерархия. Создание собственных исключений. Исключения создаются в куче оператором new, который выделяет память и вызывает конструктор. Сущ. 2 вида исключ: стандартный(по умолчанию) и со строковым аргументом .Одно исключение может генерироваться для группы однородных ошибок. Исключения бывают: которые могут быть отловлены пользователем и которые не могут быть отловлены. Все исключения являются наследниками суперкласса Throwable и его подклассов Error и Exception из пакета java.lang. Исключительные ситуации типа Error возникают только во время выполнения программы, связаны с серьезными ошибкам. Не могут быть отловлены. Проверяемые исключения должны быть обработаны в методе, который может их генерировать, или включены в throws-список метода для дальнейшей обработки в вызывающих методах. Исключения, которые могут быть обработаны без ущерба для выполнения программы - RuntimeException(непроверяемые исключения). 3 способа обработки исключений:- перехват и обработка исключения в блоке try-catch метода;- объявление исключения в секции throws метода ;- использование собственных исключений.1) Блок try похож на обычный логический блок. Блок catch(){} похож на метод, принимающий в качестве единственного параметра ссылку на объект-исключение. Операторы try можно вкладывать друг в друга.2) Метод генерирует исключения, которые сам не обрабатывает, а передает для обработки другим методам. Метод должен объявить о таком поведении с помощью ключевого слова throws, чтобы вызывающие методы могли защитить себя от этих исключений. Общая форма записи: throw объектThrowable, где Throwable-корневой класс иерархии исключений. При достижении оператора throw выполнение кода прекращается. Ближайший блок try проверяется на наличие соответствующего обработчика catch. Для исключений, являющихся подклассами класса RuntimeException при выполнении приложения throws в объявлении должен отсутствовать. Собственное исключение- подкласс класса Exception , используется при обработке ситуаций, не являющихся исключениями с точки зрения языка, но нарушающих логику вещей. Соб. исключ. Будет производным от сущ. типа. В простейшей ситуации это класс с конструктором по умолчантю . В обработчике исключений вызывается метод printStackTrace() класса Throwable. Этот метод выводит последов. вызовов, которая привела к точке возникновения исключения (e. printStackTrace()). Синтаксис:[Тип] название метода([аргументы])

[throws_список исключений]{}

Исключения ресурсоёмки. По своей природе исключ. являются операторами безусловного перехода(видоизменённый go to)

15.Пакет awt. Пакет AWT (загружается java.awt) содержит набор классов, позволяющих выполнять графические операции и создавать элементы управления. Суперкласс java.awt.Component является абстрактным классом, инкапсулирующим все атрибуты визуального компонента. Порожденный от него подкласс Container содержит методы типа add(), которые позволяют вкладывать в него другие компоненты и отвечает за размещение любых компонентов, которые он содержит. Класс Container порождает классы Panel и Window – фундаментальные классы при создании апплетов и фреймов.Класс Panel используется апплетом, графический вывод которого рисуется на поверхности объекта Panel - окна, не содержащего области заголовка, строки меню и обрамления. Основу для его отображения предоставляет браузер.Графические приложения используют класс Window , который является основой для организации фрейма, но сам непосредственно для вывода компонент не используется. Для этого применяется его подкласс Frame. С помощью объекта типа Frame создается стандартное окно со строкой заголовка, меню, размерами. Апплеты представляют собой разновидность графических приложений,реализованных в виде классов языка Java, которые размещаются на серверах Internet, транспортируются клиенту по сети, автоматически устанавливаются и запускаются браузером как часть документа HTML. Апплеты позволяют встав-лять в документы поля, содержание которых меняется во времени, организовывать "бегущие строки", меню, мультипликацию, производить вычисления на клиентской странице. Есть несколько методов класса Applet, которые управляют созданием и выполнением апплета на Web-странице. Апплету не нужен метод main(), код запуска помещается в методе init().Метод start() вызывается каждый раз, когда апплет переносится в поле зрения браузера, чтобы начать операции. Метод stop() вызывается каждый раз,когда апплет выходит из поля зрения Web-браузера, чтобы позволить апплету завершить операции. Метод destroy() вызывается, когда апплет начинает выгружаться со страницы для выполнения финального освобождения ресурсов. Кроме этих методов, при выполнении апплета автоматически запускается метод paint() класса Component. Метод paint() не вызывается явно, а только из других методов, например из метода repaint(), если необходима перерисовка. Фреймы В Java окно верхнего уровня называется фреймом. В отличие от апплетов графические приложения, расширяющие класс java.awt.Frame или его подкласс jawax.swing.JFrame, не нуждаются в браузере. Для создания графического интерфейса приложения необходимо предоставить ему в качестве окна для вывода объект Frame или JFrame, в который будут помещаться используемые приложением компоненты GUI (Graphics User Interface). Большинство своих методов класс Frame наследует по иерархии от классов Component, Container и Window. Такое приложение запускается с помощью метода main() и само отвечает за свое отображение в окне Frame или JFrame.

16.Потоки. Потоки– средство, которое помогает организовать одновременное выполнение нескольких задач, каждую в независимом потоке. Потоки представляют собой классы,каждый из которых запускается и функционирует самостоятельно, автономно (или относи тельно автономно) от главного потока выполнения программы. Существуют два способа создания и запуска потока: расширение класса Thread или реализация интерфейса Runnable. Жизненный цикл потока При выполнении программы объект класса Thread может быть в одном из четырех основных состояний: “новый”, “работоспособный”, “неработоспособный” и “пассивный”. При создании потока он получает состояние “новый” (NEW)и не выполняется. Для перевода потока из состояния “новый” в состояние “работоспособный” (RUNNABLE) следует выполнить метод start(), который вызывает метод run() – основной метод потока. Поток может находиться в одном из состояний, соответствующих элементамстатически вложенного перечисления Thread.State:NEW – поток создан, но еще не запущен;RUNNABLE – поток выполняется;BLOCKED – поток блокирован;WAITING – поток ждет окончания работы другого потока;TIMED_WAITING – поток некоторое время ждет окончания другого потока;TERMINATED — поток завершен.Получить значение состояния потока можно вызовом метода getState().Поток переходит в состояние “неработоспособный” (WAITING) вызовом методов wait(), suspend() (deprecated-метод) или методов ввода/вывода, которые предполагают задержку. Для задержки потока на некоторое время можно перевести его в режим ожидания (TIMED_WAITING) с помощью методов sleep(long millis) и wait(long timeout), при выполнении которого может генерироваться прерывание InterruptedException.Вернуть потоку работоспособность после вызова метода suspend() можно методом resume() (deprecated-метод), а после вызова метода wait() – методамиnotify() или notifyAll(). Поток переходит в “пассивное” состояние(TERMINATED), если вызваны методы interrupt(), stop() или метод run() завершил выполнение. Интерфейс Runnable не имеет метода start(), а только единственный метод run().Однако при прямом вызове метода run() поток не запустится, выполнится только тело самого метода. Потоку можно назначить приоритет от 1 (константа MIN_PRIORITY) до 10(MAX_PRIORITY) с помощью метода setPriority(int prior). Получить значение приоритета можно с помощью метода getPriority().Потоки объединяются в группы потоков. После создания потока нельзя изменить его принадлежность к группе.ThreadGroup tg = new ThreadGroup("Группа потоков 1");Thread t0 = new Thread(tg, "поток 0");Все потоки, объединенные группой, имеют одинаковый приоритет. Чтобы определить, к какой группе относится поток, следует вызвать метод getThreadGroup(). Приостановить (задержать) выполнение потока можно с помощью метода sleep(время задержки) класса Thread. Менее надежный альтернативный способ состоит в вызове метода yield(), который может сделать некоторую паузу и позволяет другим потокам начать выполнение своей задачи. Метод join() блокирует работу потока, в котором он вызван, до тех пор, пока не будет закончено выполнение вызывающего метод потока. Потоки-демоны работают в фоновом режиме вместе с программой, но не являются неотъемлемой частью программы. С помощью метода setDaemon(boolean value), вызванного вновь созданным потоком до его запуска, можно определить поток-демон. Метод boolean isDaemon() позволяет определить, является ли указанный поток демоном или нет. Базовое свойство потоков-демонов заключается в возможности основного потока приложения завершить выполнение потока-демона с окончанием кода метода main(), не обращая внимания на то, что поток-демон еще работает.

17. Пакет java.lang, класс Object, класс Class, классы-обертки для примитивных типов. Все классы являются явными или неявными расширениями класса Object и, таким образом, наследуют его методы. Последние делятся на две категории: общие служебные и методы, поддерживающие потоки. В этом разделе описываются служебные методы Object и их назначение. К категории служебных относятся следующие методы: public boolean equals(Object obj) Сравнивает объект-получатель с объектом, на который указывает ссылка obj; возвращает true, если объекты равны между собой, и false в противном случае. public int hashCode() Возвращает хеш-код для данного объекта. Каждому объекту может быть присвоен некоторый хеш-код, используемый при работе с хеш-таблицами. public final Class getClass()Возвращает объект типа Class, который соответствует классу данного объекта. protected void finalize() throws Throwable Завершающие операции с объектом, осуществляемые во время сборки мусора.

Для каждого класса и интерфейса в системе имеется представляющий его объект Class. Этот объект может использоваться для получения основных сведений о классе или интерфейсе и для создания новых объектов класса. Класс Class позволяет перемещаться по иерархии типов в программе. Такая иерархия фактически становится частью программной среды, что облегчает процесс отладки и автоматического документирования, а также делает программу более последовательной. Кроме того, это открывает новые возможности работы с классами — в первую очередь для создания объектов (их тип может задаваться в виде строки) и вызова классов с использованием специальных приемов (например, загрузка по сети).

Существует два способа получить объект Class: запросить его у имеющегося объекта методом getClass или искать его по уточненному (включающему все имена пакетов) имени статическим методом Class.forName. Простейшие методы Class предназначены для перемещения по иерархии типов. Кроме базовых типов данных, в языке Java широко используются соответствующие классы-оболочки (wrapper-классы) из пакета java.lang: Boolean, Character, Integer, Byte, Short, Long, Float, Double. Объекты этих классов могут хранить те же значения, что и соответствующие им базовые типы. Объекты этих классов представляют ссылки на участки динамической памяти, в которой хранятся их значения, и являются классами-оболочками для значений базовых типов. Классы, соответствующие числовым базовым типам, находятся в библиотеке java.lang, являются наследниками абстрактного класса Number и реализуют интерфейс Comparable, представляющий собой интерфейс для определения возможности сравнения объектов одного типа между собой. Объекты классов-оболочек по умолчанию получают значение null. Переменную базового типа можно преобразовать к соответствующему объекту, передав ее значение конструктору при объявлении объекта. Объекты класса могут быть преобразованы к любому базовому типу методами типValue() или обычным присваиванием.

18. Пакет java.lang, класс Math, классы String и StringBuffer, системные классы System, Runtime.Класс Маth. Класс java.lang.Math содержит только статические методы для физических и технических расчетов, а также константы E и PI. Все методы класса вызываются без создания экземпляра класса (создать экземпляр класса Math невозможно). В классе определено большое кол. методов для матем. вычислений. Методы: floor()-БЛИЖАЙШЕЕ ЦЕЛОЕ <= исходного числа, ceil()-Ближайшее целое >= исходного числа, rint()Ближайшее целое значение к числу, round()-ОКРУГЛЕНИЕ ДО ЦЕЛОГО, max(), min().Класс String .Каждая стр. создаваемая с помощью оператора new или с помощью литерала (заключённая в двойные апострофы), является объектом класса String.Особенностью объекта класса String является то, что его значение не может быть изменено после создания объекта при помощи какого-либо метода класса, т.к. приводит к созданию нового объекта. ссылку на объект класса String можно изменить так, чтобы она указывала на др. объект и тем самым на др. значение. Конструкторы: String(), String(String str), String(byte asciichar[]), String(char[] unicodechar), String(StringBuffer sbuf), String(StringBuilder sbuild) и др. Методы: String concat(String s) или “+” – слияние строк; boolean equals(Object ob) и equalsIgnoreCase(String s) – сравнение строк с учетом и без учета регистра соответственно; int compareTo(String s) и compareToIgnoreCase(String s) – лексикографическое сравнение стр. с учетом и без учета регистра. boolean contentEquals(StringBuffer ob) – сравнение строки и содержимого объекта типа StringBuffer; String substring(int n, int m) – извлечение из строки подстроки длины m-n, начиная с позиции n. int length() – определение длины стр.; int indexOf(char ch) – определение позиции символа в стр.; String replace(char с1, char с2) – замена в стр. всех вхождений первого символа вторым символом;Класс StringBuffer . Класс StringBuffer является близким по предназначкнию к классу String, но содержимое и размеры объектов класса StringBuffer можно изменять. Явл. потокобезопасным. Конструктор класса StringBuffer может принимать в качестве параметра объект String. Можно преобразовать в String методом toString(). Методы: void setLength(int n) – установка размера буфера; int capacity() – возвращение текущего размера буфера; StringBuffer append(параметры) – добавление строкового представления аргумента( символ, значение базового типа, массив и строка); StringBuffer insert(параметры) – вставка строки в указанную позицию; StringBuffer deleteCharAt(int index) – удаление символа; StringBuffer reverse() – обращение содержимого объекта. Объекты класса Runtime описывают состояние runtime-системы Java и те операции, которые она может выполнить. . Для получения объекта Runtime следует вызвать статический метод Runtime.getRuntime. Одна из операций, выполняемых текущим runtime-контекстом, — получение входного или выходного потока, переводящего символы локального набора в их Unicode-эквиваленты. Runtime-контекст может быть уничтожен, для этого следует вызвать его метод exit и передать ему код завершения. Метод уничтожает все потоки в текущем runtime-контексте, независимо от их состояния. Для уничтожения потоков не используется исключ.ThreadDeath; они просто останавливаются без выполнения условий finally. Для уничтожения всех программных потоков в группе лучше пользоваться методом Thread Group.stop, который позволяет потокам выполнить завершающие действия в соответствии с условиями finally.Завершающий код exit, равный нулю, означает успешное завершение задачи, а отличный от нуля — неудачу. Сущ. два способа передачи информации с кодом завершения. 1)  немедленно вызвать exit и остановить все потоки. 2) убедиться, что все потоки “чисто” завершились , и потом вызывать exit.