5719afcc1a7b6a834fac57bbc806978f.ppt
- Количество слайдов: 33
Объектно-ориентированное программирование Особенности языка Java
Литература Bruce Eckel – Thinking in Java – 2000 г. Философия Java n
Языки Java. Script n n n Java – компилируемый язык в отличие от Java. Script Java – типизированный Java более сложный язык по сравнению с Java. Script
Блок static { }
Создание и уничтожение объектов n n new – создание объекта finalyze()
Массивы При объявлении массива не указывается количество элементов n Для создания массива надо использовать new с указанием количества элементов n Создание массива не инициализирует его значения n У каждого объекта-массива есть поле length Объявления: String[] a; String a[]; String[] b=new String[5]; String[] c={"a", "b", "c"} String[] d=new String[] {"d", "e", "f"} Класс Arrays n q q q equals() fill(el) sort() binarysearch(el) as. List()
Строки n n n Класс String Невозможно изменить существующую строку, можно только создать новую Методы q concat(S) q append(S) q substring(Start, End) q index. Of(S) q last. Index. Of(S) q starts. With(S) q ends. With(S) q char. At(n) q replace(S 1, S 2) q to. Lower. Case() q to. Upper. Case() q Integer. parse. Int(S)
Спецификаторы доступа n n никакого public private protected
Пакеты
Запрещение наследования n final q q q Для полей Для методов Для классов
Абстрактные классы n n abstract для метода abstract для всего класса
Интерфейсы n n interface implements
Обработка исключительных ситуаций, работа с файлами n. Исключительные ситуации n. Классы File, Input. Stream, Random. Access. File, File. Reader, Buffered. Writer, File. Writer, Input. Stream. Reader, Input. Stream. Writer
try, catch n n n throw new Exception(); try { … } catch( Exception e) { … } public void f() throws Exception { … }
Создание своих исключений class Simple. Exception extends Exception { }
Работа с файловой системой. Класс File n n n Это скорее путь к файлу Соответствует файлу или папке: new File("test. txt") new File(". ") Методы q File. separator - или / q String[] list() - список файлов папки q boolean is. Directory() q String get. Path() q String get. Absolute. Path() q File get. Absolute. File() q String get. Canonical. Path() q File get. Canonical. File() q boolean exists() q boolean create. New. File() q boolean delete() q boolean rename. To(File f) q long length()
Работа с двоичными файлами n Чтение из файла. Класс Input. Stream File file = new File("file. tst"); Input. Stream str = new File. Input. Stream(file); long length = file. length(); byte[] bytes = new byte[(int)length]; int readed = str. read(bytes, 0, length); str. close(); n Запись в файл. Класс Random. Access. File try { File f = new File("file. tst"); Random. Access. File raf = new Random. Access. File(f, "rw"); raf. seek(f. length()); raf. write. Chars("The End"); raf. close(); } catch IOException e) { System. out. println("Ошибка при чтении или записи файла"); }
Работа с файлами n Чтение из текстового файла try { Buffered. Reader in = new Buffered. Reader(new File. Reader("file. txt")); String str; while( (str=in. read. Line()) != null) { // } in. close(); } catch(IOException e) { System. out. println("Ошибка при чтении"); } n Запись (дополнение) в текстовый файл try { Buffered. Writer out = new Buffered. Writer(new File. Writer("file. txt", true)); out. write("It’s a new line"); in. close(); } catch(IOException e) { System. out. println("Ошибка при записи"); }
Указание кодировки n Чтение из текстового файла try { Buffered. Reader in = new Buffered. Reader( new Input. Stream. Reader(new File. Input. Stream("file. txt"), "windows-1251")); String str; while( (str=in. read. Line()) != null) { // } in. close(); } catch(IOException e) { System. out. println("Ошибка при чтении"); } n Запись в текстовый файл try { Buffered. Writer out = new Buffered. Writer( new Output. Stream. Writer(new File. Output. Stream("file. txt"), "windows-1251")); out. write("Мы дописали этот текст"); out. close(); } catch(IOException e) { System. out. println("Ошибка при записи"); }
Интерфейсы n n interface и abstract Использование interface Instrument { // Константа времени компиляции: int i = 5; // static & final // Не могут присутствовать определения методов: void play(); // автоматически public String what(); } class Wind implements Instrument { public void play() { System. out. println("Wind. play()"); } public String what() { return "Wind"; } } n Интерфейсы можно наследовать
Интерфейсы n Множественное наследование interface Can. Swim { void swim(); } interface Can. Fly { void fly(); } class Hero extends Any. Class implements Can. Swim, Can. Fly { public void swim() {} public void fly() {} }
Вложенные (внутренние) классы и интерфейсы public class Parcel { class Contents { private int i = 11; public int value() { return i; } } class Destination { private String label; Destination(String where. To) { label = where. To; } } // Использование внутреннего класса похоже на использование обычного public void ship(String dest) { Contents c = new Contents(); Destination d = new Destination(dest); } public static void main(String[] args) { Parcel p = new Parcel(); p. ship("Tanzania"); } }
Контейнеры
Сортировка n n Метод sort() Интерфейс Comparable q q n метод int compare. To(Object o) вызов: Arrays. sort(a) Интерфейс Comparator метод int compare(Object o), метод boolean equals(Object o) q вызов: Arrays. sort(a, экземпляр_класса_реал. Comparator) q вызов: Arrays. sort(a, Collections. reverse. Order()) q Пример: public class Comp. Type implements Comparable { int i; int j; } class Comp. Type. J implements Comparator { public int compare(Object o 1, Object o 2) { int j 1 = ((Comp. Type)o 1). j; int j 2 = ((Comp. Type)o 2). j; return (j 1 < j 2 ? -1 : (j 1 == j 2 ? 0 : 1)); } } Comp. Type[] a = new Comp. Type[10]; Arrays. sort(a, new Comp. Type. J()); q
Двоичный поиск n Arrays. binary. Search(Object a, Object o) Если элемент найден, возвращает его индекс Иначе значение: -индекс_первого_большего-1
Контейнерные классы n List Поддерживается порядок элементов n Set Элемент может присутствовать только один раз n Map Содержит ключи и соответствующие им значения n Queue Очереди
Методы контейнеров n n n n n boolean add(Object o) boolean add. All(Collection b) boolean contains(Object o) boolean contains. All(Collection b) void clear() boolean is. Empty() boolean remove(Object o) int size() Iterator iterator() Object[] to. Array()
Методы для List n n n n boolean add(int index, Object o) Object get(int index) Object set(int index, Object o) int index. Of(Object o) int last. Index. Of(Object o) List. Iterator list. Iterator(int index)
Методы для Map n n n n boolean contains. Key(Object key) boolean contains. Value(Object value) Set entry. Set() Object get(Object key) Object put(Object key, Object value) Set key. Set() Collection values()
Особенности использования контейнеров Плюсы n Поддержка очень многих методов n Скорость критичных операций n Универсальность Минусы n Некоторая громоздкость реализации n Неизвестный тип результата
Итераторы Класс Iterator n Любой контейнер имеет метод iterator(), возвращающий итератор Методы класса Iterator n next() n has. Next() n remove()
Итераторы Collection c = new Array. List(); … Iterator it = c. iterator(); while(it. has. Next()){ System. out. print(it. next(), " "); }
Иерархия контейнеров Iterator - интерфейсы Absract. List - абстрактные классы Vector - реальные классы
5719afcc1a7b6a834fac57bbc806978f.ppt