Suche senden
Hochladen
Вещи в Java, о которых вы (возможно) не знали
•
Als PPTX, PDF herunterladen
•
0 gefällt mir
•
335 views
Zheka Kozlov
Folgen
8 вещей в Java, о которых вы возможно не знали
Weniger lesen
Mehr lesen
Software
Diashow-Anzeige
Melden
Teilen
Diashow-Anzeige
Melden
Teilen
1 von 39
Jetzt herunterladen
Empfohlen
Statis code analysis
Statis code analysis
chashnikov
C++ idioms
C++ idioms
COMAQA.BY
Анастасия Бордонос - Проектирование тестов
Анастасия Бордонос - Проектирование тестов
Yandex
WTF Code @ jug.lv
WTF Code @ jug.lv
Andrei Solntsev
закон иерархических компенсаций седова и C++ core guidelines
закон иерархических компенсаций седова и C++ core guidelines
COMAQA.BY
Конструирование алгоритмов
Конструирование алгоритмов
Andrey Dolinin
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
LogeekNightUkraine
Android - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, generics
Noveo
Empfohlen
Statis code analysis
Statis code analysis
chashnikov
C++ idioms
C++ idioms
COMAQA.BY
Анастасия Бордонос - Проектирование тестов
Анастасия Бордонос - Проектирование тестов
Yandex
WTF Code @ jug.lv
WTF Code @ jug.lv
Andrei Solntsev
закон иерархических компенсаций седова и C++ core guidelines
закон иерархических компенсаций седова и C++ core guidelines
COMAQA.BY
Конструирование алгоритмов
Конструирование алгоритмов
Andrey Dolinin
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
LogeekNightUkraine
Android - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, generics
Noveo
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестирования
Ruslan Shevchenko
C# Desktop. Занятие 13.
C# Desktop. Занятие 13.
Igor Shkulipa
Тест-дизайн в тестировании ПО. Задача "Треугольник"
Тест-дизайн в тестировании ПО. Задача "Треугольник"
OdessaQA
Программирование как этап решения задач на компьютере
Программирование как этап решения задач на компьютере
Andrey Dolinin
Компилируемые в реальном времени DSL для С++
Компилируемые в реальном времени DSL для С++
corehard_by
Дизайн больших приложений в ФП
Дизайн больших приложений в ФП
Alexander Granin
Android - 01 - Java Basics
Android - 01 - Java Basics
Noveo
Тестовый оракул: что, где, когда
Тестовый оракул: что, где, когда
Marat Akhin
паттерны программирования
паттерны программирования
guestfc8ae0
Legacy: как победить в гонке (Joker)
Legacy: как победить в гонке (Joker)
Victor_Cr
Автоматическая генерация тестов по комментариям к программному коду
Автоматическая генерация тестов по комментариям к программному коду
Alexey Noskov
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
ScalaNsk
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
Alexander Granin
C# Desktop. Занятие 04.
C# Desktop. Занятие 04.
Igor Shkulipa
Golang WTF talks
Golang WTF talks
Daniel Podolsky
C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.
Igor Shkulipa
Scala lecture #4
Scala lecture #4
Alexander Podkhalyuzin
Тестирование программного обеспечения: что, зачем и почему?
Тестирование программного обеспечения: что, зачем и почему?
Marat Akhin
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
Igor Shkulipa
обработка исключений в Java
обработка исключений в Java
metaform
Bytecode
Bytecode
Alex Tumanoff
Oop java.generics
Oop java.generics
muqaddas_m
Weitere ähnliche Inhalte
Was ist angesagt?
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестирования
Ruslan Shevchenko
C# Desktop. Занятие 13.
C# Desktop. Занятие 13.
Igor Shkulipa
Тест-дизайн в тестировании ПО. Задача "Треугольник"
Тест-дизайн в тестировании ПО. Задача "Треугольник"
OdessaQA
Программирование как этап решения задач на компьютере
Программирование как этап решения задач на компьютере
Andrey Dolinin
Компилируемые в реальном времени DSL для С++
Компилируемые в реальном времени DSL для С++
corehard_by
Дизайн больших приложений в ФП
Дизайн больших приложений в ФП
Alexander Granin
Android - 01 - Java Basics
Android - 01 - Java Basics
Noveo
Тестовый оракул: что, где, когда
Тестовый оракул: что, где, когда
Marat Akhin
паттерны программирования
паттерны программирования
guestfc8ae0
Legacy: как победить в гонке (Joker)
Legacy: как победить в гонке (Joker)
Victor_Cr
Автоматическая генерация тестов по комментариям к программному коду
Автоматическая генерация тестов по комментариям к программному коду
Alexey Noskov
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
ScalaNsk
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
Alexander Granin
C# Desktop. Занятие 04.
C# Desktop. Занятие 04.
Igor Shkulipa
Golang WTF talks
Golang WTF talks
Daniel Podolsky
C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.
Igor Shkulipa
Scala lecture #4
Scala lecture #4
Alexander Podkhalyuzin
Тестирование программного обеспечения: что, зачем и почему?
Тестирование программного обеспечения: что, зачем и почему?
Marat Akhin
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
Igor Shkulipa
обработка исключений в Java
обработка исключений в Java
metaform
Was ist angesagt?
(20)
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестирования
C# Desktop. Занятие 13.
C# Desktop. Занятие 13.
Тест-дизайн в тестировании ПО. Задача "Треугольник"
Тест-дизайн в тестировании ПО. Задача "Треугольник"
Программирование как этап решения задач на компьютере
Программирование как этап решения задач на компьютере
Компилируемые в реальном времени DSL для С++
Компилируемые в реальном времени DSL для С++
Дизайн больших приложений в ФП
Дизайн больших приложений в ФП
Android - 01 - Java Basics
Android - 01 - Java Basics
Тестовый оракул: что, где, когда
Тестовый оракул: что, где, когда
паттерны программирования
паттерны программирования
Legacy: как победить в гонке (Joker)
Legacy: как победить в гонке (Joker)
Автоматическая генерация тестов по комментариям к программному коду
Автоматическая генерация тестов по комментариям к программному коду
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
C# Desktop. Занятие 04.
C# Desktop. Занятие 04.
Golang WTF talks
Golang WTF talks
C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.
Scala lecture #4
Scala lecture #4
Тестирование программного обеспечения: что, зачем и почему?
Тестирование программного обеспечения: что, зачем и почему?
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
обработка исключений в Java
обработка исключений в Java
Ähnlich wie Вещи в Java, о которых вы (возможно) не знали
Bytecode
Bytecode
Alex Tumanoff
Oop java.generics
Oop java.generics
muqaddas_m
Лекция 6
Лекция 6
itc73
course js day 2
course js day 2
Georgyi Grigoryev
[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)
Evgeny Kaziak
Лекция 11. Тестирование.
Лекция 11. Тестирование.
Roman Brovko
Поддержка Java 8 в Excelsior JET
Поддержка Java 8 в Excelsior JET
Nikita Lipsky
Java осень 2014 занятие 3
Java осень 2014 занятие 3
Technopark
Сладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и Zephir
CodeFest
Зачем нужна Scala?
Зачем нужна Scala?
Vasil Remeniuk
Java весна 2013 лекция 9
Java весна 2013 лекция 9
Technopark
Let's Talk About Junit 5
Let's Talk About Junit 5
SQALab
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программиста
Andrey Karpov
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
Igor Khrol
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
Zestranec
Zagursky
Zagursky
kuchinskaya
Эффективный C++
Эффективный C++
Andrey Karpov
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
Platonov Sergey
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
Platonov Sergey
Память в Java. Garbage Collector
Память в Java. Garbage Collector
Olexandra Dmytrenko
Ähnlich wie Вещи в Java, о которых вы (возможно) не знали
(20)
Bytecode
Bytecode
Oop java.generics
Oop java.generics
Лекция 6
Лекция 6
course js day 2
course js day 2
[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)
Лекция 11. Тестирование.
Лекция 11. Тестирование.
Поддержка Java 8 в Excelsior JET
Поддержка Java 8 в Excelsior JET
Java осень 2014 занятие 3
Java осень 2014 занятие 3
Сладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и Zephir
Зачем нужна Scala?
Зачем нужна Scala?
Java весна 2013 лекция 9
Java весна 2013 лекция 9
Let's Talk About Junit 5
Let's Talk About Junit 5
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программиста
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
Zagursky
Zagursky
Эффективный C++
Эффективный C++
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
Память в Java. Garbage Collector
Память в Java. Garbage Collector
Mehr von Zheka Kozlov
Модули в Java
Модули в Java
Zheka Kozlov
Java 9 модули
Java 9 модули
Zheka Kozlov
Введение в Scalaz
Введение в Scalaz
Zheka Kozlov
Интерпретирование языков с помощью Free-монад
Интерпретирование языков с помощью Free-монад
Zheka Kozlov
Введение в Akka
Введение в Akka
Zheka Kozlov
Xtend
Xtend
Zheka Kozlov
Сервис MobiBarC
Сервис MobiBarC
Zheka Kozlov
Устойчивый к искажениям алгоритм распознавания штрих-кода EAN-13
Устойчивый к искажениям алгоритм распознавания штрих-кода EAN-13
Zheka Kozlov
Mehr von Zheka Kozlov
(8)
Модули в Java
Модули в Java
Java 9 модули
Java 9 модули
Введение в Scalaz
Введение в Scalaz
Интерпретирование языков с помощью Free-монад
Интерпретирование языков с помощью Free-монад
Введение в Akka
Введение в Akka
Xtend
Xtend
Сервис MobiBarC
Сервис MobiBarC
Устойчивый к искажениям алгоритм распознавания штрих-кода EAN-13
Устойчивый к искажениям алгоритм распознавания штрих-кода EAN-13
Вещи в Java, о которых вы (возможно) не знали
1.
Вещи в Java,
о которых вы не знали Евгений Козлов, 17.11.2017
2.
Вещи в Java,
о которых вы (возможно) не знали Евгений Козлов, 17.11.2017
3.
#1. Что выведет
данный код? System.out.println(5);
4.
#1. Что выведет
данный код? System.out.println((Integer) 5);
5.
#1. Что выведет
данный код? Class<?> c = Class.forName("java.lang.Integer$IntegerCache"); Field cache = c.getDeclaredField("cache"); cache.setAccessible(true); Integer[] array = (Integer[]) cache.get(null); array[133] = 6;
6.
#2. Non-denotable types
7.
#2. Non-denotable types •
Non-denotable type – это тип, который нельзя выразить в языке Java
8.
Union type
9.
Union type try { … }
catch (IOException | SQLException e) { … }
10.
Union type interface ErrorCode
{ int getErrorCode(); } class Exception1 extends Exception implements ErrorCode { … } class Exception2 extends Exception implements ErrorCode { … }
11.
Union type try { … }
catch (Exception1 | Exception2 e) { System.out.println(e.getErrorCode()); }
12.
Intersection type
13.
Intersection type interface Foo
{ void foo(); } interface Bar { void bar(); } public <T extends Foo & Bar> void f(T t) { t.foo(); t.bar(); }
14.
Intersection type Arrays.asList(1, 2,
"three") .forEach(e -> { … }); e : Serializable & Comparable<…>
15.
Intersection type List<Object> list
= … list.stream() .map(e → (Foo & Bar) e) .forEach(e → { e.foo(); e.bar(); });
16.
Anonymous class new Object()
{ int x; int y; }
17.
Anonymous class public <T>
f(T t) { return t; } int x = f(new Object() { int x = 1; }).x
18.
Anonymous class Stream<String> stream
= Stream.of("hello", "world!"); Map<Integer, String> map = stream .map(s → new Object() { int key = s.length(); String value = s; }) .collect(Collectors.toMap( t → t.key, t → t.value));
19.
#3. Receiver parameter
20.
#3. Receiver parameter class
Currency { String getName() { … } }
21.
#3. Receiver parameter class
Currency { String getName(Currency this) { … } }
22.
#3. Receiver parameter class
Currency implements Comparable<Currency> { int compareTo(Currency this, Currency that) { … } }
23.
#3. Receiver parameter class
Currency implements Comparable<Currency> { int compareTo(@Param Currency this, @Param Currency that) { … } }
24.
#3. Receiver parameter public
class List<any T> { public int sum(List<int> this) { … } } List.of(1, 2, 3).sum();
25.
#4. Как получить
имена параметров метода через reflection?
26.
#4. Как получить
имена параметров метода через reflection? • Method.getParameters() • Появилось в Java 8 • Нужна опция javac -parameters
27.
#5. Как ускорить
рефлексию? public class Incrementor { public static int inc(int i) { return i + 1; } }
28.
#5. Как ускорить
рефлексию? Method method = Incrementor.class .getMethod("inc", int.class); int result = (int) method.invoke(null, 3);
29.
#5. Как ускорить
рефлексию? Method method = Incrementor.class .getMethod("inc", int.class); MethodHandle methodHandle = MethodHandles.lookup() .unreflect(method); int result = (int) methodHandle .invokeExact(3)
30.
#6. Финализация public class
App { public static void main(String[] args) { new App(); System.gc(); } @Override protected void finalize() throws Throwable { System.out.println("Finalizing"); } }
31.
#6. Финализация public class
App { public static void main(String[] args) { new App(); System.gc(); } @Override protected void finalize() throws Throwable { System.out.println("Finalizing"); } }
32.
#6. Финализация • java.lang.ref.Cleaner
33.
#6. Финализация public class
App { private static final Cleaner CLEANER = Cleaner.create(); public static void main(String[] args) { CLEANER.register(new App(), () -> { System.out.println("Cleaning..."); }); System.gc(); System.out.println("Program finished"); } }
34.
#6. Финализация в Java
6, 7, 8 com.google.common.base.FinalizablePhantomReference<T> и com.google.common.base.FinalizableReferenceQueue
35.
#7. Логирование в
Java 9
36.
#7. Логирование в
Java 9 System.Logger
37.
#8. IOException в
лямбдах List<byte[]> collect = Stream.of( "file1.txt", "file2.txt", "file3.txt") .map(Paths::get) .map(path → Files.readAllBytes(path)); .collect(Collectors.toList());
38.
#8. IOException в
лямбдах List<byte[]> collect = Stream.of( "file1.txt", "file2.txt", "file3.txt") .map(Paths::get) .map(path → Files.readAllBytes(path)); .collect(Collectors.toList());
39.
#8. IOException в
лямбдах List<byte[]> collect = Stream.of( "file1.txt", "file2.txt", "file3.txt") .map(Paths::get) .map(path → { try { Files.readAllBytes(path)); } catch (IOException e) { throw new UncheckedIOException(e); } }) .collect(Collectors.toList());
Jetzt herunterladen