Java руководство для начинающих - Шилдт Герберт (2012)
-
Год:2012
-
Название:Java руководство для начинающих
-
Автор:
-
Жанр:
-
Оригинал:Английский
-
Язык:Русский
-
Издательство:Вильямс
-
Страниц:316
-
ISBN:978-5-8459-1770-6
-
Рейтинг:
-
Ваша оценка:
Java руководство для начинающих - Шилдт Герберт читать онлайн бесплатно полную версию книги
членами класса, но недоступны за пределами этого класса.
Рассмотрим практическое применение средств управления доступом на примере приведенной ниже программы. Во время ее выполнения предотвращается возникновение ошибок нарушения границ отказоустойчивого целочисленного массива. Это достигается следующим образом. Массив объявляется как закрытый член класса, а доступ к нему осуществляется с помощью специально предназначенных для этой цели методов. Эти методы отслеживают попытки обращения к элементам, не входящим в массив, и вместо аварийной остановки программы возвращают сообщение об ошибке. Массив определяется в классе FailSof tArray, код которого приведен ниже.
/* В этом классе реализуется отказоустойчивый массив,
предотвращающий ошибки при выполнении программы.
*/
class FailSoftArray {
private int a[]; // Ссылка на массив.
private int errval; // Значение, возвращаемое в том случае, если
// в методе get() будет обнаружена ошибка,
public int length; // Переменная length открыта.
/* Конструктору данного класса передается размер массива и значение,
которое должен возвращать метод get () при обнаружении ошибки. */
public FailSoftArray(int size, int errv) {
a = new int[size];
errval = errv;
length = size;
}
// возвратить значение элемента массива по заданному индексу
public int get(int index) {
// Отслеживание попытки обращения за границы массива.
if(ok(index)) return a[index];
return errval;
}
// установить значение элемента no заданному индексу,
// если возникнет ошибка, возвратить логическое значение false
public boolean put(int index, int val) {
// Отслеживание попытки обращения эа границы массива.
if(ok(index)) {
a[index] = val;
return true;
}
return false;
}
// возвратить логическое значение true, если индекс
// не выходит за границы массива
private boolean ok(int index) {
if(index >= 0 & index < length) return true;
return false;
}
}
// продемонстрировать обращение к отказоустойчивому массиву
class FSDemo {
public static void main(String args[]) {
FailSoftArray fs = new FailSoftArray(5, -1);
int x;
// выявить скрытые сбои при обращении к массиву
System.out.println("Fail quietly.") ;
for(int i=0; i < (fs.length * 2); i++)
// Доступ к массиву должен осуществляться с помощью
// специально предназначенных для этого методов,
fs.put(i, i*10);
for (int i=0; i < (fs.length * 2); i++) {
// Доступ к массиву должен осуществляться с помощью
// специально предназначенных для этого методов.
х = fs.get (i);
if(x != -1) System.out.print(x + " ");
}
System.out.println ("") ;
// а теперь обработать сбои и вывести сообщения об ошибках
System.out.println("\nFail with error reports.");
for (int i=0; i < (fs.length * 2); i++)
if (!fs.put(i, i*10))
System.out.println("Index " + i + " out-of-bounds");
for(int i=0; i < (fs.length * 2); i++) {
x = fs.get (i);
if(x != -1) System.out.print(x + " ") ;
else
System.out.println("Index " + i + " out-of-bounds");
}
}
}
Выполнение этой программы дает следующий результат:
Fail quietly.
0 10 20 30 40
Fail with error reports.
Index 5 out-of-bounds
Index 6 out-of-bounds
Index 7 out-of-bounds
Index 8 out-of-bounds
Index 9 out-of-bounds
0 10 20 30 40 Index 5 out-of-bounds
Index 6 out-of-bounds
Index 7 out-of-bounds
Index 8 out-of-bounds
Index 9 out-of-bounds
Рассмотрим подробнее приведенный выше пример программы. В классе