или
Java –ea MyClass
Для выключения применяется –da или -disableassertions.
Задания к главе 8
Вариант A
Выполнить задания на основе варианта А главы 4, контролируя состояние потоков ввода/вывода. При возникновении ошибок, связанных с корректностью выполнения математических операций, генерировать и обрабатывать исключительные ситуации. Предусмотреть обработку исключений, возникающих при нехватке памяти, отсутствии требуемой записи (объекта) в файле, недопустимом значении поля и т.д.
Вариант B
Выполнить задания из варианта В главы 4, реализуя собственные обработчики исключений и исключения ввода/вывода.
Тестовые задания к главе 8
Вопрос 8.1.
Дан код:
class Quest1{
int counter;
java.io.OutputStream out;
Quest1(){/* инициализация out */}
float inc() {
try { counter++;
out.write(counter); }
//комментарий
}}
Какой код достаточно добавить в метод inc() вместо комментария, чтобы компиляция прошла без ошибок? (выберите два).
1) catch (java.io.OutputStreamException e){};
2) catch (java.io.IOException e){};
3) catch (java.io.OutputException e){};
4) finally{};
5) return counter;
6) return;.
Вопрос 8.2.
Какое значение будет возвращено при вызове meth(5)?
public int meth(int x) {
int y = 010; //1
try { y += x; //2
if (x<=5) throw new Exception(); //3
y++; } //4
catch (Exception e) { y--; } //5
return y; } //6
1) 12;
2) 13;
3) 14;
4) 15;
5) ошибка компиляции: невыполнимый код в строке 4.
Вопрос 8.3.
Какое значение будет возвращено при вызове meth(12), если при вызове mexcept(int x) возникает исключительная ситуация ArithmeticException?
int meth(int x) {
int count=0;
try { count += x;
count += mexcept(count);
count++;
} catch (Exception e) {
--count;
return count;
}
finally {
count += 3;
return count;
}
}
1) 11;
2) 12;
3) 13;
4) 14;
5) ошибка компиляции из-за отсутствия return после блока finally.
Вопрос 8.4.
Какое из следующих определений метода show() может законно использоваться вместо комментария //КОД в классе Quest4?
class Base{
public void show(int i) {/*реализация*/}
}
public class Quest4 extends Base{
//КОД
}
1) void show (int i) throws Exception {/*реализация*/}
2) void show (long i) throws IOException {/*реализация*/}
3) void show (short i){ /*реализация*/}
4) public void show (int i) throws IOException {/*реализация*/}
Вопрос 8.5.
Дан код:
import java.io.*;
public class Quest5 {
//ОБЪЯВЛЕНИЕ ioRead()
public static void main(String[] args) {
try {
ioRead();
} catch (IOException e){}
}}
Какое объявление метода ioRead() должно быть использовано вместо комментария, чтобы компиляция и выполнение кода прошли успешно?
1) private static void ioRead()
throws IOException{};
2) public static void ioRead()
throw IOException{};
3) public static void ioRead(){};
4) public static void ioRead()
throws Exception{}.
ФАЙЛЫ. ПОТОКИ ВВОДА/ВЫВОДА
Потоки ввода/вывода используются для передачи данных в файловые потоки, на консоль или на сетевые соединения. Потоки представляют собой объекты соответствующих классов. Библиотека ввода/вывода предоставляет пользователю большое число классов и методов и постоянно обновляется.
Класс File
Для работы с физическим файлами и каталогами (директориями), расположенными на внешних носителях, в приложениях Java используются классы из пакета java.io.
Класс File служит для хранения и обработки в качестве объектов каталогов и имен файлов. Этот класс не содержит методы для работы с содержимым файла, но позволяет манипулировать такими свойствами файла, как права доступа, дата и время создания, путь в иерархии каталогов, создание, удаление файла, изменение его имени и каталога и т.д.
Объект класса File создается одним из нижеприведенных способов:
File myFile = new File(”\\com\\myfile.txt”);
File myDir = new File(”c:\\jdk1.6.0\\src\\java\\io”);
File myFile = new File(myDir, ”File.java”);
File myFile = new File(”c:\\com”, ”myfile.txt”);
File myFile = new File(new URI(” Интернет-адрес ”));
В первом случае создается объект, соответствующий файлу, во втором – подкаталогу. Третий и четвертый случаи идентичны. Для создания объекта указывается каталог и имя файла. В пятом – создается объект, соответствующий адресу
в Интернете.
При создании объекта класса File любым из конструкторов компилятор не выполняет проверку на существование физического файла с заданным путем.
Существует разница между разделителями, употребляющимися при записи пути к файлу: для системы Unix – “ / ”, а для Windows – “ \\ ”. Для случаев, когда неизвестно, в какой системе будет выполняться код, предусмотрены специальные поля в классе File:
public static final String separator;
public static final char separatorChar;
С помощью этих полей можно задать путь, универсальный в любой системе:
File myFile = new File(File. separator + ”com”
+ File. separator + ”myfile.txt”);
Также предусмотрен еще один тип разделителей – для директорий:
public static final String pathSeparator;
public static final char pathSeparatorChar;
К примеру, для ОС Unix значение pathSeparator=”;”, а для Windows – pathSeparator=”:”.
В классе File объявлено более тридцати методов, наиболее используемые из них рассмотрены в следующем примере:
/* пример # 1: работа с файловой системой: FileTest.java */
package chapt09;
import java.io.*;
import java.util.*;
public class FileTest {
public static void main(String[] args) {
//c объектом типа File ассоциируется файл на диске FileTest2.java
File fp = new File("chapt09" + File. separator
+ "FileTest2.java");
if (fp.exists()) {
System. out. println(fp.getName() + " существует");
if (fp.isFile()) { //если объект – дисковый файл
System. out. println("Путь к файлу:\t"
+ fp.getPath());
System. out. println("Абсолютный путь:\t"
+ fp.getAbsolutePath());
System. out. println("Размер файла:\t"
+ fp.length());
System. out. println("Последняя модификация:\t"
+ new Date(fp.lastModified()));
System. out. println("Файл доступен для чтения:\t"
+ fp.canRead());
System. out. println("Файл доступен для записи:\t"
+ fp.canWrite());
System. out. println("Файл удален:\t"
+ fp.delete());
}
} else
System. out. println("файл " + fp.getName()
+ " не существует");
try {
if (fp.createNewFile())
System. out. println("Файл " + fp.getName()
+ " создан");
} catch (IOException e) {
System. err. println(e);
}
//в объект типа File помещается каталог\директория
// в корне проекта должен быть создан каталог com.learn с несколькими файлами
File dir = new File("com" + File. separator + "learn");
if (dir.exists() && dir.isDirectory()) /*если объект
является каталогом и если этот
каталог существует */
System. out. println("каталог "
+ dir.getName() + " существует");
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++){
Date date = new Date(files[i].lastModified());
System. out. print("\n" + files[i].getPath()
+ " \t| " + files[i].length() + "\t| "
+ date.toString());
//использовать toLocaleString() или toGMTString()
}
// метод listRoots() возвращает доступные корневые каталоги
File root = File. listRoots ()[1];
System. out. printf("\n%s %,d из %,d свободно.", root.getPath(),root.getUsableSpace(),root.getTotalSpace());
}
}
В результате файл FileTest2.java будет очищен, а на консоль выведено: