android - 02 - annotations, exceptions, io, generics
TRANSCRIPT
![Page 1: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/1.jpg)
Noveo Summer School
Лекция 2. Аннотации, исключения, IO, generics.
![Page 2: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/2.jpg)
Аннотации2
Аннотации
Аннотации – набор мета-данных, который может быть приложен к части программного кода.Аннотации могут применяться к:1. Классам2. Методам3. Полям4. Конструкторам5. Другим аннотациям
![Page 3: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/3.jpg)
Аннотации3
Аннотации
Примеры:• @Override• @SuppressWarnings• @Deprecated
![Page 4: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/4.jpg)
Тема лекции4
АннотацииКак применить
@Overrideclass MyClass() {…}
@SuppressWarnings(value=“…”)class MyClass() {…}
@SuppressWarnings(“…”)Class MyClass() {…}
![Page 5: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/5.jpg)
Аннотации5
Annotation
@interface Security {String id();String username() default
“Unknown”;int count() default 1;
}
![Page 6: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/6.jpg)
Аннотации6
Annotation
@Security(id = "uniqID", count = 10)public class MyClass {…}
![Page 7: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/7.jpg)
Аннотации7
Мета-аннотации@Documented
@Documented@interface Security {…}
![Page 8: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/8.jpg)
Аннотации8
Мета-аннотации@Retention
@Retention(RetentionPolicy.SOURCE)@interface Security {…}
Варианты:• RetentionPolicy.SOURCE• RetentionPolicy.CLASS• RetentionPolicy.RUNTIME
![Page 9: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/9.jpg)
Аннотации9
Мета-аннотации@Target
@Target(ElementType.TYPE)@interface Security {…}
Варианты:ElementType.ANNOTATION_TYPEElementType.CONSTRUCTORElementType.FIELDElementType.TYPE…
![Page 10: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/10.jpg)
Аннотации10
Мета-аннотации@Inherited
@Inherited@interface Security {…}
![Page 11: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/11.jpg)
Аннотации11
Мета-аннотацииИтого
@Documented@Target({ElementType.TYPE, ElementType.CONSTRUCTOR})@Retention(RetentionPolicy.RUNTIME)@Inherited@interface Security {…}
![Page 12: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/12.jpg)
Исключения12
Исключения
Исключение (Exception) – событие, нарушающее нормальное выполнение программы. В Java любое исключение – объект.Примеры:• FileNotFoundException;• AccessDeniedException;• NullPointerException
![Page 13: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/13.jpg)
Исключения13
ИсключенияИерархия
![Page 14: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/14.jpg)
Исключения14
ИсключенияTry-catch-finally
public void someMethod() {try {FileReader reader= new FileReader(…);} catch ( FileNotFoundException e) {
//handle exception} finally {
//do something}
}
![Page 15: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/15.jpg)
Исключения15
Исключения Multicatch(java 7)
…} catch (FirstException | SecondException e) {
//do something.}
![Page 16: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/16.jpg)
Исключения16
ИсключенияCatch or specify rule
public void catchMethod() {try {
new FileReader(…);} catch (FileNotFoundException e) {
//Do something.}
}
Либо
public void specifyMethod() throws FileNotFoundException {new FileReader(…);
}
![Page 17: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/17.jpg)
Исключения17
Исключения Создание собственного исключения
public class MyException extends Exception {
//…}
public void myMethod() throws Exception {//….throw new MyException();
}
![Page 18: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/18.jpg)
Исключения18
ИсключенияChained Exception
• Throwable(String, Throwable);• Throwable(Throwable).• Throwable initCause(Throwable);• Throwable getCause();
![Page 19: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/19.jpg)
Java IO19
Java IO
Поток(stream) – это некоторая абстракция, представляющая последовательность данных. Input stream используется для чтения данных, output stream – для записи.
![Page 20: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/20.jpg)
Java IO20
Java IO.Типы потоков
• Байтовые потоки – InputStream– OutputStream
• Символьные потоки– Reader–Writer
![Page 21: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/21.jpg)
Java IO21
Java IOПример чтения/записи
public void processFile() {FileInputStream in = null;FileOutputStream out = null;try {
in = new FileInputStream(…);out = new FileOutputStream(…);int c;while ((c = in.read()) != -1) {
out.write( c );}
} catch(Exception e) {//do something
}finally {if (in!=null) in.close();if (out!=null) out.close();
}}
![Page 22: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/22.jpg)
Java IO22
Try-with-resources
String readFirstLineFromFile(String path) throws IOException { try (BufferedReader br = new BufferedReader(new
FileReader(path))) { return br.readLine();
}}
java.lang.AutoCloseable
![Page 23: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/23.jpg)
Java IO23
Java IOБуферизация
Байтовые потокиIn = new FileInputStream(…);Out = new FileOutputStream(…);BufferedInputStream input = new BufferedInputStream(in);BufferedOutputStream output = new BufferedOutputStream(out);
Символьные потокиr = new FileReader(…);w = new FileWriter(…);BufferedReader reader = new BufferedReader( r)BufferedWriter writer = new BufferedWriter(w);
![Page 24: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/24.jpg)
Java IO24
Java IOData Streams
• DataInputStream– readByte– readChar– readInt
• DataOutputStream– writeByte– writeChar– writeInt
![Page 25: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/25.jpg)
Java IO25
Java IOObject streams
• ObjectInputStream– readObject
• ObjectOutputStream– writeObject
![Page 26: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/26.jpg)
Java IO26
Java IO.Сериализация.
public class serializationDemo implements Serializable {
private int age;private String login;private transient String
password;}
![Page 27: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/27.jpg)
Java IO27
Java IOСериализация
public class serializationDemo implements Serializable {
private void writeObject(ObjectOutputStream stream) {stream.defaultWriteObject();…}
private void readObject(ObjectInputStream stream) {stream.defaultReadObject();…}
}
![Page 28: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/28.jpg)
Generics28
Generics
Обобщения (Generics) – механизм, позволяющий параметризовать классы, интерфейсы и отдельные методы и улучшить возможности по проверке типов на стадии компиляции.
![Page 29: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/29.jpg)
Generics29
GenericsПример
public class Box<T> {private T value;
public T getValue() {return value;
}
public setValue(T value) {this.value = value;
}}
Использование:Box<String> box = new Box<String>();
![Page 30: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/30.jpg)
Generics30
Generics Ограничения типов
public class Box<T extends Number> {private T value;
public T getValue() {return value;
}
public setValue(T value) {this.value = value;
}}
Использование:Box<Integer> intBox = new Box<Integer> (); //okBox<String> stringBox = new Box<String>(); //compilation error
![Page 31: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/31.jpg)
Generics31
GenericsПараметризованные методы
public class MyClass {public static <T extends Number> void calc
(T value) {…
}}
Использование:MyClass.calc(25);
![Page 32: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/32.jpg)
Generics32
GenericsПроблема с наследованием
public void consumeBox(Box<Object> box) {
//do something.}consumeBox(new Box<Object>());//okconsumeBox(new Box<Integer>());//error
![Page 33: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/33.jpg)
Generics33
GenericsWildcard
public void consumeBox(Box<?> box) {
//do something.}consumeBox(new Box<Object>());//okconsumeBox(new Box<Integer>());//ok
![Page 34: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/34.jpg)
Generics34
GenericsWildcard. Ограничения
public void consumeBox(Box<? extends Number> box) {
//можно использовать методы Number. box.getValue().intValue();
}
public void consumeBox(Box<? super Integer> box) {
}
![Page 35: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/35.jpg)
Generics35
Generics Стирание типов
• Все параметры без ограничений стираются до Object;
• Все параметры с ограничением стираются до типа-ограничения;
• Добавляются операторы приведения типа, если это необходимо;
![Page 36: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/36.jpg)
Generics36
GenericsСтирание типов. Пример.
До стиранияpublic class Box<T> {
private T value;
public T getValue() {return value;
}
public setValue(T value) {
this.value = value;}
}
Послеpublic class Box {
private Object value;
public Object getValue() {return value;
}
public setValue(Object value){
this.value = value;
}}
![Page 37: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/37.jpg)
Материалы37
Материалы
Исключения:Just Java: глава 10.
IO:Just Java: глава 17.
Generics:Just Java: глава 15.
![Page 38: Android - 02 - annotations, exceptions, io, generics](https://reader036.vdocuments.site/reader036/viewer/2022062319/5576241cd8b42a4e1c8b4ecd/html5/thumbnails/38.jpg)
Практика38
Практическое задание
https://github.com/noveogroup/university-android-SecondJavaTask
1. Создать иерархию из трех классов вида «1 Родитель – 2 потомка»;
2. Реализовать бинарное дерево, которое сможет хранить классы из иерархии п.1 (использовать generics) и только их. Класс дерева должен поддерживать вставку, удаление и итерирование элементов;
3. Реализовать собственную иерархию исключений для бинарного дерева из п.2;
4. Реализовать сериализацию/десериализацию дерева из файла. Кроме самого дерева, необходимо складывать в файл количество листьев в нем (custom serialization).