Некоторые методы класса Object, часто используемые в порождённых классах public boolean equals(Object obj)//возвращает истину, когда равны значения объекта, из которого вызывается метод, и объекта, передаваемого через ссылку Object в списке параметров, в противном случае возвращается false. В классе Object равенство рассматривается как равенство ссылок и эквивалентно операторам сравнения. В подклассах, как правило, этот метод переопределён. Double d1=1.1, d2=1.0; System.out.println("d1==d2 даёт ",d1==d2);//d1==d2 даёт false System.out.println("d1.equals(d2) даёт ",d1.equals(d2));//d1.equals(d2) даёт true public int hashCode()//выдаёт хэш-код объекта, для которого она вызывается Хэш-кодом условно называется условно уникальный числовой идентификатор, сопоставляемый какому-либо элементу. Из соображений безопасности выдавать адрес объекта прикладной программе нельзя, поэтому в языке Java хэш-код заменяет адрес объекта в тех случаях, когда для каких-либо целей надо хранить таблицы адресов объектов. public final class getClass()//метод возвращает ссылку на метаобъект типа "класс". С его помощью можно получить информацию о классе, к которому принадлежит объект, вызываеть методы класса и поля класса. House h=new House(........); Object obj; obj=h; obj.getClass();//J3.House public String toString()//возвращает строковое представление объекта (настолько адекватно, насколько это возможно). В классе Object этот метод реализует выдачу в строку полного имени объекта (с именем пакета), после которого следует символ @, затем в шестнадцатеричном коде - хэш-код объекта. В большинстве стандартных классов этот метод переопределён. Для числовых классов возвращается строковое представление числа, для строковых - представление строки, для символьных - сам символ. Пример: Object obj=new Object(); System.out.println("Obj.toString() даёт ",Obj.toString()); Double d=new Double(1.1); System.out.println("d.toString() даёт ",d.toString()); String s=new String("abc"); System.out.println("s.toString() даёт ",s.toString()); obj.toString даёт java.lang.Object@fa4cf Обработка исключительных ситуаций Исключительная ситуация - это событие, прерывающее нормальную работу программы. При возникновении исключительной ситуации необходимо предоставить пользователю следующие возможности: 1) получить сообщение о возникшей ошибке; 2) сохранить некоторые результаты работы; 3) корректно завершить работу программы. Обработка исключительных ситуаций возможна только тогда, когда программист предвидит возможные ошибки, а также последствия, к которым могут они привести. Наиболее часто ошибки при работе программы вызываются следующими причинами: 1) ошибка ввода (ошибка в имени файла, ошибка в адресе при попытке соединения, ошибочно введенное данное и т. д.); 2) ошибки программирования (выход за пределы массива, непредусмотренный вариант вычислений, некорректный вызов метода, попытка извлечь запись из пустой динамической структуры и т. д.); 3) сбои оборудования (сбои сетевого оборудования, принтера и т. д.); 4) ограничения на ресурсы (недостаточно места в оперативной памяти, переполнение диска, других внешних носителей и т. д.). Классификация исключительных ситуаций В языке Java исключительная ситуация, возникающая при работе программы, является объектом некоторого класса. Все классы исключительных ситуаций имеют в корне класса Throwable. +------------+ |Throwable | +------------+ ^ ^ | | ++----+ +---+-------+ |Error| |Exception | +-----+ +-----------+ ^ ^ | | +--------+----+ +--+-------------+ |IOException | |RuntimeException| +-------------+ +----------------+ Класс Error описывает те исключительные ситуации, которые не могут быть перехвачены программой пользователя. Экземплярами класса Error являются непроверяемые исключительные ситации, которые невозможно перехватить в блоках catch. Такие исключительные ситуации представляют катастрофические ошибки, после которых невозможна нормальная работа приложения. К классу Exception относятся те исключительные ситуации, которые должны быть перехвачены программой пользователя. Исключительные ситуации класса RuntimeException относятся к категории непроверяемых. Понятие "непроверяемая исключительная ситуация" означает, что компилятор Java для этих исключительных ситуаций не проверяет метод с точки зрения возникновения и обработки этих ситуаций. Для проверяемых исключительных ситуаций компилятор требует использование оператора throws с перечислением исключительных ситуаций, возможных для данного метода. Исключительные ситуации типа RuntimeException возникают вследствие ошибок программирования (неверное приведение типов, выход за пределы массива, попытка обратиться к объекту по ссылке NULL и т. д.). Их проблема всегда может быть устранена, если более тщательно писать код. В отличие от этих исключительных ситуаций, ситуации IOException в основном не могут быть устранены на этапе программирования. Исключительная ситуация |Описание ситуации -----------------------------------+------------------------------------------------------------------------------- ArithmeticException |Арифметическая ошибка (обычно деление на ноль (только при делении целых чисел)) ArrayIndexOutOfBoundException |Неправильный индекс при обращении к массиву ArrayStoreException |Присвоение элементу массива неверного типа ClassCastException |Ошибка в приведении типа IllegalArgumentException |Ошибочный аргумент при вызове метода IndexOutOfBoundException |Неверный тип индекса NegativArraySizeException |Попытка создать массив с отрицательным размером NullPointerException |Неправильное использование ссылки NULL NumberFormatException |Ошибка при преобразовании строки в число SecurityException |Ошибка нарушения защиты Принцип обработки исключительных ситуаций: прежде всего, необходимо выделить ту часть программы, в которой может возникнуть исключительная ситуация. Если в выделенной части программы возникает исключительная ситуация, то её нужно перехватить и обработать. Обработка заключается в выполнении некоторых действий, соответствующих возникшей ситуации. Кроме этого, поскольку выделенная часть программы оказалась невыполнимой, а некоторые действия в ней всё же были выполнены к моменту возникновения исключительной ситуации, необходимо вернуть приложение в состояние, существовавшее до возникновения ошибки (напр., закрыть файлы, удалить созданные объекты и т. д.). Операторы try и catch Операторы try и catch позволяют выделить блок операторов, в которых может возникнуть исключительная ситуация, сгенерировать исключительную ситуацию при возникновении ошибки, распознать исключительную ситуацию и выполнить некоторые действия для её преодоления. Синтаксис оператора: ->(try)->({}->[оператор]+>(})->(catch)->(()->[тип исключения]->[переменная]->())->({)->[оператор]+>(})++>(finally)->({)->[оператор]+>(})-> ^-----------+ ^ ^-----------+ || ^-----------+ ^ +------------------------------------------------------------------------++--------------------------------+ Программа принимает из командной строки ряд целых чисел. Необходимо найти результат деления первого числа на результат всех последующих. Наше предположение: исключительная ситуация может возникнуть, если сумма окажется равной нулю. public class ProgExcept1{ public static void main(String args[]){ int i,s=0,x; x=Integer.parseInt(args[0]); for (i=1;i=2*s) arr[j++]=x; } System.out.println("Массив:"); for (i=0;i