android - 02 - annotations, exceptions, io, generics

Post on 09-Jun-2015

168 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

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).

top related