Контрольная работа: Программирование на Java

Контрольная работа: Программирование на Java




💣 👉🏻👉🏻👉🏻 ВСЯ ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻




























































1. Динамическая инициализация объектов
1. Динамическая инициализация объектов
Объекты в Java создаются с помощью зарезервированного слова new, после которого идет конструктор – специальная подпрограмма, занимающаяся созданием объекта и инициализацией полей создаваемого объекта. Для него не указывается тип возвращаемого значения, и он не является ни методом объекта (вызывается через имя класса когда объекта еще нет), ни методом класса (в конструкторе доступен объект и его поля через ссылку this). На самом деле конструктор в сочетании с оператором new возвращает ссылку на создаваемый объект и может считаться особым видом методов, соединяющим в себе черты методов класса и методов объекта.
Если в объекте при создании не нужна никакая дополнительная инициализация, можно использовать конструктор, который по умолчанию присутствует для каждого класса. Это имя класса, после которого ставятся пустые круглые скобки – без списка параметров. Такой конструктор при разработке класса задавать не надо, он присутствует автоматически. Если требуется инициализация, обычно применяют конструкторы со списком параметров.
Порядок вызовов при создании объекта некого класса (будем называть его дочерним классом):
1. Создается объект, в котором все поля данных имеют значения по умолчанию (нули на двоичном уровне представления).
2. Вызывается конструктор дочернего класса.
3. Конструктор дочернего класса вызывает конструктор родителя (непосредственного прародителя), а также по цепочке все прародительские конструкторы и инициализации полей, заданных в этих классах, вплоть до класса Object.
4. Проводится инициализация полей родительской части объекта значениями, заданными в декларации родительского класса.
5. Выполняется тело конструктора родительского класса.
6. Проводится инициализация полей дочерней части объекта значениями, заданными в декларации дочернего класса.
7. Выполняется тело конструктора дочернего класса.
Знание данного порядка важно в случаях, когда в конструкторе вызываются какие-либо методы объекта, и надо быть уверенным, что к моменту вызова этих методов объект получит правильные значения полей данных.
Как правило, для инициализации полей сложно устроенных объектов используют конструкторы. Но кроме них в Java, в отличие от большинства других языков программирования, для этих целей могут также служить блоки инициализации класса и блоки инициализации объекта. Синтаксис задания классов с блоками инициализации следующий:
Модификаторы class ИмяКласса extends ИмяРодителя {
Задание подпрограмм - методов класса, методов объекта, конструкторов
Блоков инициализации класса и блоков инициализации объекта может быть несколько.
Порядок выполнения операторов при наличии блоков инициализации главного класса приложения (содержащего метод main):
1. инициализация полей данных и выполнение блоков инициализации класса (в порядке записи в декларации класса);
3. выполнение блоков инициализации объекта;
4. выполнение тела конструктора класса.
Для других классов порядок аналогичен, но без вызова метода main:
1. инициализация полей данных и выполнение блоков инициализации класса (в порядке записи в декларации класса);
2. выполнение блоков инициализации объекта;
3. выполнение тела конструктора класса.
Чем лучше пользоваться, блоками инициализации или конструкторами? Ответ, конечно, неоднозначен: в одних ситуациях – конструкторами, в других – блоками инициализации. Для придания начальных значений переменным класса в случаях, когда для этого требуются сложные алгоритмы, можно пользоваться только статическими блоками инициализации. Для инициализации полей объектов в общем случае лучше пользоваться конструкторами, но если необходимо выполнить какой-либо код инициализации до вызова унаследованного конструктора, можно воспользоваться блоком динамической инициализации.
Приведем несколько примеров. Программа SmallSquares (маленькие квадраты) возвращает квадрат маленького целого числа. SmallSquares имеет две статические переменные и единственную открытую статическую функцию getSquare().
private static final int LIMIT = 10;
private static final int[] square = new int[LIMIT];
public static int getSquare(int i) {
public static void main(String[] args) {
System.out.println("3 squared is " +
Откомпилировав и запустив SmallSquares, получим следующий результат:
3 squared is 9 (3 в квадрате будет 9)
В данном коде объект создается при помощи конструктора так называемым статическим методом.
Приведем пример статической инициализации. За словом статический (static) следует блок кода, окруженного фигурными скобками. Можно использовать статический блок для инициализации массива квадратов следующим образом:
Статический блок запрашивается только один раз во время создания класса. Теперь не нужен конструктор, и можно вызывать статическую функцию getSquare() без предшествующего создания класса. Улучшенныйкодвыглядитследующимобразом:
private static final int LIMIT = 10;
private static final int[] square = new int[LIMIT];
public static int getSquare(int i) {
// Нет обработки ошибки, предположим,0<=itoRead.length)
//Нужно считать только до предела массива
willRead = toRead.length-countRead;
countRead += pipeIn.read(toRead, countRead, willRead);
System.out.println ("Impossible IOException occur: ");
Данный пример носит чисто демонстративный характер (в результате его работы массив toRead будет заполнен случайными числами). Более явно выгода от использования PipedI/OStream в основном проявляется при разработке многопоточного приложения. Если в программе запускается несколько потоков исполнения, организовать передачу данных между ними удобно с помощью этих классов. Для этого нужно создать связанные объекты PipedI/OStream, после чего передать ссылки на них в соответствующие потоки. Поток выполнения, в котором производится чтение данных, может содержать подобный код:
// inStream - объекткласса PipedInputStream
int bytesAvailable = inStream.available();
readedBytes = new byte[bytesAvailable];
// обработка полученных данных из readedBytes
/* IOException будет брошено, когда поток inStream, либо
связанный с ним PipedOutputStream, уже закрыт, и при этом
производится попытка считывания из inStream */
System.out.println("работа с потоком inStream завершена");
Если с объектом inStream одновременно могут работать несколько потоков выполнения, то необходимо использовать блок synchronized (как и сделано в примере), который гарантирует, что в период между вызовами inStream.available() и inStream.read(…) ни в каком другом потоке выполнения не будет производиться считывание из inStream. Поэтому вызов inStream.read(readedBytes) не приведет к блокировке и все данные, готовые к считыванию, будут считаны.
Иногда бывает удобно работать с текстовой строкой String как с потоком байт. Для этого можно воспользоваться классом StringBufferInputStream. При создании объекта этого класса необходимо передать конструктору объект String. Данные, возвращаемые методом read(), будут считываться именно из этой строки. При этом символы будут преобразовываться в байты с потерей точности – старший байт отбрасывается (напомним, что символ char состоит из двух байт).
Класс SequenceInputStream объединяет поток данных из других двух и более входных потоков. Данные будут вычитываться последовательно – сначала все данные из первого потока в списке, затем из второго, и так далее. Конец потока SequenceInputStream будет достигнут только тогда, когда будет достигнут конец потока, последнего в списке.
В этом классе имеется два конструктора – принимающий два потока и принимающий Enumeration (в котором, конечно, должны быть только экземпляры InputStream и его наследников). Когда вызывается метод read(), SequenceInputStream пытается считать байт из текущего входного потока. Если в нем больше данных нет (считанное из него значение равно -1), у него вызывается метод close() и следующий входной поток становится текущим. Так продолжается до тех пор, пока не будут получены все данные из последнего потока. Если при считывании обнаруживается, что больше входных потоков нет, SequenceInputStream возвращает -1. Вызов метода close() у SequenceInputStream закрывает все содержащиеся в нем входные потоки.
SequenceInputStream sequenceStream = null;
inFile1 = new FileInputStream("file1.txt");
inFile2 = new FileInputStream("file2.txt");
sequenceStream = new SequenceInputStream(inFile1, inFile2);
outFile = new FileOutputStream("file3.txt");
int readedByte = sequenceStream.read();
readedByte = sequenceStream.read();
System.out.println("IOException: " + e.toString());
try{sequenceStream.close();}catch(IOException e){};
try{outFile.close();}catch(IOException e){};
В результате выполнения этого примера в файл file3.txt будет записано содержимое файлов file1.txt и file2.txt – сначала полностью file1.txt, потом file2.txt. Закрытие потоков производится в блоке finally. Поскольку при вызове метода close() может возникнуть IOException, необходим try-catch блок. Причем, каждый вызов метода close() взят в отдельный try-catch блок - для того, чтобы возникшее исключение при закрытии одного потока не помешало закрытию другого. При этом нет необходимости закрывать потоки inFile1 и inFile2 – они будут автоматически закрыты при использовании в sequenceStream - либо когда в них закончатся данные, либо при вызове у sequenceStream метода close().
Объект SequenceInputStream можно было создать и другим способом: сначала получить объект Enumeration, содержащий все потоки, и передать его в конструктор SequenceInputStream:
vector.add(new StringBufferInputStream("Begin file1\n"));
vector.add(new FileInputStream("file1.txt"));
vector.add(new StringBufferInputStream("\nEnd of file1, begin file2\n"));
vector.add(new FileInputStream("file2.txt"));
vector.add(new StringBufferInputStream("\nEnd of file2"));
Enumeration en = vector.elements();
sequenceStream = new SequenceInputStream(en);
Если заменить в предыдущем примере инициализацию sequenceStream на приведенную здесь, то в файл file3.txt, кроме содержимого файлов file1.txt и file2.txt, будут записаны еще три строки – одна в начале файла, одна между содержимым файлов file1.txt и file2.txt и еще одна в конце file3.txt.
В итоге отметим, что Java имеет широкий набор инструментов для обеспечения ввода-вывода данных в целом и записи и чтения файлов в частности.
1. Арнольд К., Гослинг Дж. «Язык программирования Java»
2. Хорстманн К.С., Корнелл Г. « Java 2. Том 1. Основы», 7-е изд.

Название: Программирование на Java
Раздел: Рефераты по информатике, программированию
Тип: контрольная работа
Добавлен 11:51:03 10 июня 2011 Похожие работы
Просмотров: 511
Комментариев: 16
Оценило: 3 человек
Средний балл: 5
Оценка: неизвестно   Скачать

Срочная помощь учащимся в написании различных работ. Бесплатные корректировки! Круглосуточная поддержка! Узнай стоимость твоей работы на сайте 64362.ru
Привет студентам) если возникают трудности с любой работой (от реферата и контрольных до диплома), можете обратиться на FAST-REFERAT.RU , я там обычно заказываю, все качественно и в срок) в любом случае попробуйте, за спрос денег не берут)
Да, но только в случае крайней необходимости.

Контрольная работа: Программирование на Java
Почему Полезно Читать Книги Сочинение Рассуждение
Реферат: Кредитоспособность заемщика и методика ее определения
Реферат: Структура Российского общества
Отчет по практике по теме Анализ внутренней среды предприятия на примере ОАО "Икар"
Курсовые Работы Автоматизированная Система
Дипломная Работа Ссылки На Источники
Производственная Практика Отчет По Торговле
Сочинение На Тему Маленькие Трагедии Пушкина
Реферат: Сплавы на базе меди. Скачать бесплатно и без регистрации
Реферат по теме СНГ: на пути к экономическому союзу
Отчет По Практике Воспитателя В Детском
Курсовая работа по теме Физико-географическая характеристика Малайского архипелага
Сочинение Сказка Про Кошку 2 Класс
Дипломная работа по теме Сопоставительный анализ английских и русских пословиц, выражающих отношение человека к труду
Курсовая Работа На Тему Аудит Доходов И Расходов На Примере Тоо "Павлодарзернорпрод"
Дипломная работа по теме Разработка ИС ООО 'АНИТ - Аудиторские услуги'
Реферат: по ит в предметной области 3 граф научных интересов 24
Контрольная Работа По Орфографии 7 Класс
Дипломная работа по теме Фразеологічна одиниця як предмет фразеологічної науки
Сочинение На Тему Моя Любимая Учительница
Реферат: Сім нових чудес світу
Реферат: Емоції страху
Реферат: Периодическая система материи

Report Page