android - 02 - annotations, exceptions, io, generics
TRANSCRIPT
Noveo Summer School
Лекция 2. Аннотации, исключения, IO, generics.
Аннотации2
Аннотации
Аннотации – набор мета-данных, который может быть приложен к части программного кода.Аннотации могут применяться к:1. Классам2. Методам3. Полям4. Конструкторам5. Другим аннотациям
Аннотации3
Аннотации
Примеры:• @Override• @SuppressWarnings• @Deprecated
Тема лекции4
АннотацииКак применить
@Overrideclass MyClass() {…}
@SuppressWarnings(value=“…”)class MyClass() {…}
@SuppressWarnings(“…”)Class MyClass() {…}
Аннотации5
Annotation
@interface Security {String id();String username() default
“Unknown”;int count() default 1;
}
Аннотации6
Annotation
@Security(id = "uniqID", count = 10)public class MyClass {…}
Аннотации7
Мета-аннотации@Documented
@Documented@interface Security {…}
Аннотации8
Мета-аннотации@Retention
@Retention(RetentionPolicy.SOURCE)@interface Security {…}
Варианты:• RetentionPolicy.SOURCE• RetentionPolicy.CLASS• RetentionPolicy.RUNTIME
Аннотации9
Мета-аннотации@Target
@Target(ElementType.TYPE)@interface Security {…}
Варианты:ElementType.ANNOTATION_TYPEElementType.CONSTRUCTORElementType.FIELDElementType.TYPE…
Аннотации10
Мета-аннотации@Inherited
@Inherited@interface Security {…}
Аннотации11
Мета-аннотацииИтого
@Documented@Target({ElementType.TYPE, ElementType.CONSTRUCTOR})@Retention(RetentionPolicy.RUNTIME)@Inherited@interface Security {…}
Исключения12
Исключения
Исключение (Exception) – событие, нарушающее нормальное выполнение программы. В Java любое исключение – объект.Примеры:• FileNotFoundException;• AccessDeniedException;• NullPointerException
Исключения13
ИсключенияИерархия
Исключения14
ИсключенияTry-catch-finally
public void someMethod() {try {FileReader reader= new FileReader(…);} catch ( FileNotFoundException e) {
//handle exception} finally {
//do something}
}
Исключения15
Исключения Multicatch(java 7)
…} catch (FirstException | SecondException e) {
//do something.}
Исключения16
ИсключенияCatch or specify rule
public void catchMethod() {try {
new FileReader(…);} catch (FileNotFoundException e) {
//Do something.}
}
Либо
public void specifyMethod() throws FileNotFoundException {new FileReader(…);
}
Исключения17
Исключения Создание собственного исключения
public class MyException extends Exception {
//…}
public void myMethod() throws Exception {//….throw new MyException();
}
Исключения18
ИсключенияChained Exception
• Throwable(String, Throwable);• Throwable(Throwable).• Throwable initCause(Throwable);• Throwable getCause();
Java IO19
Java IO
Поток(stream) – это некоторая абстракция, представляющая последовательность данных. Input stream используется для чтения данных, output stream – для записи.
Java IO20
Java IO.Типы потоков
• Байтовые потоки – InputStream– OutputStream
• Символьные потоки– Reader–Writer
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();
}}
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
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);
Java IO24
Java IOData Streams
• DataInputStream– readByte– readChar– readInt
• DataOutputStream– writeByte– writeChar– writeInt
Java IO25
Java IOObject streams
• ObjectInputStream– readObject
• ObjectOutputStream– writeObject
Java IO26
Java IO.Сериализация.
public class serializationDemo implements Serializable {
private int age;private String login;private transient String
password;}
Java IO27
Java IOСериализация
public class serializationDemo implements Serializable {
private void writeObject(ObjectOutputStream stream) {stream.defaultWriteObject();…}
private void readObject(ObjectInputStream stream) {stream.defaultReadObject();…}
}
Generics28
Generics
Обобщения (Generics) – механизм, позволяющий параметризовать классы, интерфейсы и отдельные методы и улучшить возможности по проверке типов на стадии компиляции.
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>();
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
Generics31
GenericsПараметризованные методы
public class MyClass {public static <T extends Number> void calc
(T value) {…
}}
Использование:MyClass.calc(25);
Generics32
GenericsПроблема с наследованием
public void consumeBox(Box<Object> box) {
//do something.}consumeBox(new Box<Object>());//okconsumeBox(new Box<Integer>());//error
Generics33
GenericsWildcard
public void consumeBox(Box<?> box) {
//do something.}consumeBox(new Box<Object>());//okconsumeBox(new Box<Integer>());//ok
Generics34
GenericsWildcard. Ограничения
public void consumeBox(Box<? extends Number> box) {
//можно использовать методы Number. box.getValue().intValue();
}
public void consumeBox(Box<? super Integer> box) {
}
Generics35
Generics Стирание типов
• Все параметры без ограничений стираются до Object;
• Все параметры с ограничением стираются до типа-ограничения;
• Добавляются операторы приведения типа, если это необходимо;
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;
}}
Материалы37
Материалы
Исключения:Just Java: глава 10.
IO:Just Java: глава 17.
Generics:Just Java: глава 15.
Практика38
Практическое задание
https://github.com/noveogroup/university-android-SecondJavaTask
1. Создать иерархию из трех классов вида «1 Родитель – 2 потомка»;
2. Реализовать бинарное дерево, которое сможет хранить классы из иерархии п.1 (использовать generics) и только их. Класс дерева должен поддерживать вставку, удаление и итерирование элементов;
3. Реализовать собственную иерархию исключений для бинарного дерева из п.2;
4. Реализовать сериализацию/десериализацию дерева из файла. Кроме самого дерева, необходимо складывать в файл количество листьев в нем (custom serialization).