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

Mais conteúdo relacionado

Mais procurados

10. java lecture generics&collections
10. java lecture generics&collections10. java lecture generics&collections
10. java lecture generics&collections
MERA_school
 
9. java lecture library
9. java lecture library9. java lecture library
9. java lecture library
MERA_school
 

Mais procurados (12)

C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.
 
Сетевое взаимодействие
Сетевое взаимодействиеСетевое взаимодействие
Сетевое взаимодействие
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.
 
Лекция 6. Классы 1.
Лекция 6. Классы 1.Лекция 6. Классы 1.
Лекция 6. Классы 1.
 
10. java lecture generics&collections
10. java lecture generics&collections10. java lecture generics&collections
10. java lecture generics&collections
 
Bytecode
BytecodeBytecode
Bytecode
 
Лекция 11. Тестирование.
Лекция 11. Тестирование.Лекция 11. Тестирование.
Лекция 11. Тестирование.
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологии
 
Лекция 8. Итераторы, генераторы и модуль itertools.
 Лекция 8. Итераторы, генераторы и модуль itertools. Лекция 8. Итераторы, генераторы и модуль itertools.
Лекция 8. Итераторы, генераторы и модуль itertools.
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.
 
9. java lecture library
9. java lecture library9. java lecture library
9. java lecture library
 

Destaque (6)

Tatiana doronina
Tatiana doroninaTatiana doronina
Tatiana doronina
 
Riesgos naturales en Peñalolén
Riesgos naturales en PeñalolénRiesgos naturales en Peñalolén
Riesgos naturales en Peñalolén
 
P Erika T
P Erika TP Erika T
P Erika T
 
園林風光長卷
園林風光長卷園林風光長卷
園林風光長卷
 
Dias de verão a4
Dias de verão a4Dias de verão a4
Dias de verão a4
 
Africa 2 nairobi-kenya-(catherine)
Africa 2 nairobi-kenya-(catherine)Africa 2 nairobi-kenya-(catherine)
Africa 2 nairobi-kenya-(catherine)
 

Semelhante a Android - 02 - annotations, exceptions, io, generics

Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9
Technopark
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9
Technopark
 
Java осень 2012 лекция 9
Java осень 2012 лекция 9Java осень 2012 лекция 9
Java осень 2012 лекция 9
Technopark
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
Technopark
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
metaform
 

Semelhante a Android - 02 - annotations, exceptions, io, generics (20)

Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9
 
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9
 
Классы и объекты С#
Классы и объекты С#Классы и объекты С#
Классы и объекты С#
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage Collector
 
Java осень 2012 лекция 9
Java осень 2012 лекция 9Java осень 2012 лекция 9
Java осень 2012 лекция 9
 
Метапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScriptМетапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScript
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
 
Семинар ФКН: современные подходы к разработке ПО - часть 2
Семинар ФКН: современные подходы к разработке ПО - часть 2Семинар ФКН: современные подходы к разработке ПО - часть 2
Семинар ФКН: современные подходы к разработке ПО - часть 2
 
Aspect Oriented Approach
Aspect Oriented ApproachAspect Oriented Approach
Aspect Oriented Approach
 
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionRoslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
 
Delegates and events in C#
Delegates and events in C#Delegates and events in C#
Delegates and events in C#
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 

Mais de Noveo

Mais de Noveo (20)

Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрии
 
Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)
 
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)
 
Yii2
Yii2Yii2
Yii2
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизация
 
Rest
RestRest
Rest
 
PHP basic
PHP basicPHP basic
PHP basic
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP Advanced
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
MySQL
MySQLMySQL
MySQL
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)
 
Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
 

Android - 02 - annotations, exceptions, io, generics