1
play

, , 1 - PowerPoint PPT Presentation

, , 1 ( , , )


  1. Пакеты, исключения, дженерики Валеев Тагир 1

  2. Имя класса ( интерфейса, перечисления, аннотации) Полноквалифицированное имя класса Fully-qualified class name (FQN) java.util.PrimitiveIterator.OfInt Имя пакета Имя класса Простое Package name верхнего уровня имя класса Top level class name Simple name Имя класса в виртуальной машине JVM class name java/util/PrimitiveIterator$OfInt 2

  3. Пакет x.y.z ✓ Располагается в каталоге x/y/z относительно корня элемента classpath ✓ Содержит заголовок “ package x.y.z; ” ✓ На классы из текущего пакета и из пакета java.lang можно ссылаться по простому имени. ✓ Для использования класса из другого пакета пишем его полное имя “ x.y.z.ClassName ” ✓ Если полное имя писать неохота, пишем в начале файла “ import x.y.z.ClassName; ” ✓ Для использования любых классов из пакета по простому имени, пишем “ import x.y.z.*; ” ✓ По умолчанию классы, поля, методы доступны из текущего пакета ✓ Пакеты “ x.y.a ”, “ x.y.b ”, “ x.y ” в отношениях не состоят. 3

  4. 4

  5. Имена ✓ Пакет : полностью маленькие буквы, обратное доменное имя, принадлежащее автору или компании. ✓ Нельзя использовать пакеты java. и javax. ( они используются стандартной библиотекой и защищены лиценцией ). ✓ Класс : каждое слово с большой буквы. ✓ Метод : camelCase ( первое слово с маленькой буквы), раньше рекомендовали начинать с глаголов. ✓ Поле, переменная : camelCase ( существительное) 5

  6. Модификаторы доступа Модификатор Класс Пакет Подкласс Все желающие public Да Да Да Да protected Да Да Да Нет (package-private) Да Да Нет Нет private Да Нет Нет Нет 6

  7. Protected // a/AbstractGreeter.java package a; public abstract class AbstractGreeter { private final String recipient ; protected AbstractGreeter(String recipient) { this . recipient = recipient; } protected void hello() { System. out .println( "Hello " + recipient + "!" ); } } 7

  8. Protected // b/Foo.java package b; import a.AbstractGreeter; public class WorldGreeter extends AbstractGreeter { public WorldGreeter() { super ( "World" ); } void test(AbstractGreeter other) { this .hello(); super .hello(); other.hello(); } } 8

  9. Abstract и final ✓ abstract класс – недоопределённый класс, который надо доопределить через наследование (экземпляр класса создать нельзя). ✓ abstract метод – метод, который надо определить в неабстрактном наследнике (методы интерфейсов abstract по умолчанию). ✓ final класс – класс, который нельзя унаследовать. ✓ final метод – метод, который нельзя переопределить. 9

  10. Статический импорт import static java.util.Arrays.*; public class Test { public static void main(String[] args) { int [] data = {5,3,1,7,2,4,6}; sort (data); System. out .println(toString(data)); } } 10

  11. Статический импорт import static java.util.Arrays.*; public class Test { public static void main(String[] args) { int [] data = {5,3,1,7,2,4,6}; sort (data); System. out .println(toString(data)); } } 11

  12. Исключения ✓ Выбрасываются явно оператором throw ✓ Выбрасываются вызванным методом или конструктором (непроверяемые или явно объявленные) ✓ Выбрасываются виртуальной машиной ( только непроверяемые) 12

  13. Исключения public class Test { static class MyException extends Exception { } static void test() throws MyException { throw new MyException(); } public static void main(String[] args) { test (); } } 13

  14. Исключения public class Test { static class MyException extends Exception { } static void test() throws MyException { throw new MyException(); } public static void main(String[] args) throws MyException { test (); } } 14

  15. Миллион исключений Throwable Error Exception RuntimeException IOException VirtualMachineError LinkageError SQLException IllegalAccessException AssertionError NullPointerException NoSuchFieldException ArithmeticException NoSuchMethodException ThreadDeath ArrayIndexOutOfBoundsException ClassNotFoundException ArrayStoreException InvocationTargetException StackOverflowError NoClassDefFoundError IllegalArgumentException TimeoutException OutOfMemoryError NoSuchFieldError IllegalStateException ExecutionException InternalError NoSuchMethodError UnsupportedOperationException AbstractMethodError IndexOutOfBoundsException InstantiationError NoSuchElementException ClassFormatError ConcurrentModificationException ExceptionInInitializerError UncheckedIOException VerifyError 15

  16. Конструирование исключений Throwable, Exception, RuntimeException ✓ Throwable(); ✓ Throwable(message); ✓ Throwable(cause); ✓ Throwable(message, cause); ✓ protected Throwable(message, cause, suppression, stackTrace); 16

  17. Что есть у исключения? ✓ Сообщение ( getMessage()) ✓ Стек ( getStackTrace()) ✓ Причина ( getCause()) ✓ Подавленные исключения (addSuppressed()/getSuppressed()) 17

  18. Обработка исключений public static void main(String[] args) { try { test (); } catch (MyException ex) { ex.printStackTrace(); } } Test$MyException at Test.test(Test.java:7) at Test.main(Test.java:12) 18

  19. Обработка исключений ✓ Логирование, вывод пользователю: редко, в специальных точках программы. ✓ Восстановление после исключения (например, вторая попытка подключения после обрыва связи). ✓ Исключение для управления потоком (ненормальная ситуация). ✓ Перебрасывание, завернув в исключение другого типа. Всегда сохраняйте исходное исключение в виде причины. 19

  20. Логирование ✓ Фреймворки: Log4j, Logback, Slf4j, Java Logging API (java.util.logging) ✓ Уровни (насколько всё плохо): ERROR/WARN/INFO/DEBUG ✓ Форматтеры: как логировать? (представление сообщений) ✓ Аппендеры: куда логировать ? 20

  21. Логирование : enterprise style public class PoolComposerPrincipalEventIdentifier { private static final Logger LOG = Logger. getLogger ( PoolComposerPrincipalEventIdentifier. class .getName()); public void identifyPrincipalEvent() { try { doIdentifyPrincipalEventUsingPoolComposer(); } catch (Exception ex) { LOG .log(Level. SEVERE , "Error while identifying principal event" , ex); } } } https://projects.haykranen.nl/java/ 21

  22. Перебрасывание исключений static class MyException extends Exception { public MyException(String message) { super (message); } } void readFile() throws MyException { try { byte [] bytes = Files. readAllBytes (Paths. get ( "/etc/passwd" )); System. out .println(Arrays. toString (bytes)); } catch (IOException e) { throw new MyException( "Unable to read file" ); } } Test$MyException: Unable to read file at Test.readFile(Test.java:16) at Test.main(Test.java:22) 22

  23. Перебрасывание исключений static class MyException extends Exception { public MyException(String message) { super (message); } public MyException(String message, Throwable cause) { super (message, cause); } } void readFile() throws MyException { try { byte [] bytes = Files. readAllBytes (Paths. get ( "/etc/passwd" )); System. out .println(Arrays. toString (bytes)); } catch (IOException e) { throw new MyException( "Unable to read file" , e); } } 23

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend