android - 02 - annotations, exceptions, io, generics

38
Noveo Summer School Лекция 2. Аннотации, исключения, IO, generics.

Upload: noveo

Post on 09-Jun-2015

168 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Android - 02 - annotations, exceptions, io, generics

Noveo Summer School

Лекция 2. Аннотации, исключения, IO, generics.

Page 2: Android - 02 - annotations, exceptions, io, generics

Аннотации2

Аннотации

Аннотации – набор мета-данных, который может быть приложен к части программного кода.Аннотации могут применяться к:1. Классам2. Методам3. Полям4. Конструкторам5. Другим аннотациям

Page 3: Android - 02 - annotations, exceptions, io, generics

Аннотации3

Аннотации

Примеры:• @Override• @SuppressWarnings• @Deprecated

Page 4: Android - 02 - annotations, exceptions, io, generics

Тема лекции4

АннотацииКак применить

@Overrideclass MyClass() {…}

@SuppressWarnings(value=“…”)class MyClass() {…}

@SuppressWarnings(“…”)Class MyClass() {…}

Page 5: Android - 02 - annotations, exceptions, io, generics

Аннотации5

Annotation

@interface Security {String id();String username() default

“Unknown”;int count() default 1;

}

Page 6: Android - 02 - annotations, exceptions, io, generics

Аннотации6

Annotation

@Security(id = "uniqID", count = 10)public class MyClass {…}

Page 7: Android - 02 - annotations, exceptions, io, generics

Аннотации7

Мета-аннотации@Documented

@Documented@interface Security {…}

Page 8: Android - 02 - annotations, exceptions, io, generics

Аннотации8

Мета-аннотации@Retention

@Retention(RetentionPolicy.SOURCE)@interface Security {…}

Варианты:• RetentionPolicy.SOURCE• RetentionPolicy.CLASS• RetentionPolicy.RUNTIME

Page 9: Android - 02 - annotations, exceptions, io, generics

Аннотации9

Мета-аннотации@Target

@Target(ElementType.TYPE)@interface Security {…}

Варианты:ElementType.ANNOTATION_TYPEElementType.CONSTRUCTORElementType.FIELDElementType.TYPE…

Page 10: Android - 02 - annotations, exceptions, io, generics

Аннотации10

Мета-аннотации@Inherited

@Inherited@interface Security {…}

Page 11: Android - 02 - annotations, exceptions, io, generics

Аннотации11

Мета-аннотацииИтого

@Documented@Target({ElementType.TYPE, ElementType.CONSTRUCTOR})@Retention(RetentionPolicy.RUNTIME)@Inherited@interface Security {…}

Page 12: Android - 02 - annotations, exceptions, io, generics

Исключения12

Исключения

Исключение (Exception) – событие, нарушающее нормальное выполнение программы. В Java любое исключение – объект.Примеры:• FileNotFoundException;• AccessDeniedException;• NullPointerException

Page 13: Android - 02 - annotations, exceptions, io, generics

Исключения13

ИсключенияИерархия

Page 14: Android - 02 - annotations, exceptions, io, generics

Исключения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

Исключения15

Исключения Multicatch(java 7)

…} catch (FirstException | SecondException e) {

//do something.}

Page 16: Android - 02 - annotations, exceptions, io, generics

Исключения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

Исключения17

Исключения Создание собственного исключения

public class MyException extends Exception {

//…}

public void myMethod() throws Exception {//….throw new MyException();

}

Page 18: Android - 02 - annotations, exceptions, io, generics

Исключения18

ИсключенияChained Exception

• Throwable(String, Throwable);• Throwable(Throwable).• Throwable initCause(Throwable);• Throwable getCause();

Page 19: Android - 02 - annotations, exceptions, io, generics

Java IO19

Java IO

Поток(stream) – это некоторая абстракция, представляющая последовательность данных. Input stream используется для чтения данных, output stream – для записи.

Page 20: Android - 02 - annotations, exceptions, io, generics

Java IO20

Java IO.Типы потоков

• Байтовые потоки – InputStream– OutputStream

• Символьные потоки– Reader–Writer

Page 21: Android - 02 - annotations, exceptions, io, generics

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

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

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

Java IO24

Java IOData Streams

• DataInputStream– readByte– readChar– readInt

• DataOutputStream– writeByte– writeChar– writeInt

Page 25: Android - 02 - annotations, exceptions, io, generics

Java IO25

Java IOObject streams

• ObjectInputStream– readObject

• ObjectOutputStream– writeObject

Page 26: Android - 02 - annotations, exceptions, io, generics

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

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

Generics28

Generics

Обобщения (Generics) – механизм, позволяющий параметризовать классы, интерфейсы и отдельные методы и улучшить возможности по проверке типов на стадии компиляции.

Page 29: Android - 02 - annotations, exceptions, io, 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>();

Page 30: Android - 02 - annotations, exceptions, io, generics

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

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

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

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

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

Generics35

Generics Стирание типов

• Все параметры без ограничений стираются до Object;

• Все параметры с ограничением стираются до типа-ограничения;

• Добавляются операторы приведения типа, если это необходимо;

Page 36: Android - 02 - annotations, exceptions, io, generics

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

Материалы37

Материалы

Исключения:Just Java: глава 10.

IO:Just Java: глава 17.

Generics:Just Java: глава 15.

Page 38: Android - 02 - annotations, exceptions, io, generics

Практика38

Практическое задание

https://github.com/noveogroup/university-android-SecondJavaTask

1. Создать иерархию из трех классов вида «1 Родитель – 2 потомка»;

2. Реализовать бинарное дерево, которое сможет хранить классы из иерархии п.1 (использовать generics) и только их. Класс дерева должен поддерживать вставку, удаление и итерирование элементов;

3. Реализовать собственную иерархию исключений для бинарного дерева из п.2;

4. Реализовать сериализацию/десериализацию дерева из файла. Кроме самого дерева, необходимо складывать в файл количество листьев в нем (custom serialization).