JavaRush /Блоги Java /Random-TG /Дастури Java 8. Қисми 2.
ramhead
Сатҳи

Дастури Java 8. Қисми 2.

Дар гурӯҳ нашр шудааст

Санаи API

Java 8 дорои API-ҳои комилан нави сана ва вақт дар бастаи java.time мебошад. API-и нави Date бо китобхонаи Joda-Time муқоисашаванда аст , аммо он яксон нест. Намунаҳои зерин қисмҳои муҳимтарини API-и навро фаро мегиранд.
Соат
Соат дастрасӣ ба сана ва вақти ҷорӣ медиҳад. Соатҳо аз минтақаҳои вақт огоҳанд ва аз ин рӯ метавонанд ба ҷои System.currentTimeMillis() барои баргардонидани вақти ҷорӣ бо миллисонияҳо истифода шаванд. Ин намуди дақиқи вақтро синфи Instant низ муаррифӣ мекунад . Инстантҳоро барои сохтани an objectҳои меросии java.util.Date истифода бурдан мумкин аст . Clock clock = Clock.systemDefaultZone(); long millis = clock.millis(); Instant instant = clock.instant(); Date legacyDate = Date.from(instant); // legacy java.util.Date
Минтақаҳои вақт
Минтақаҳои вақт бо синфи абстрактии ZoneId муаррифӣ карда мешаванд . Онҳоро бо истифода аз усулҳои статистикии завод дастрас кардан мумкин аст. Минтақаҳои вақт ҷубронҳоро муайян мекунанд, ки барои табдил додани сана ва вақти фаврӣ ва маҳаллӣ муҳиманд. System.out.println(ZoneId.getAvailableZoneIds()); // prints all available timezone ids ZoneId zone1 = ZoneId.of("Europe/Berlin"); ZoneId zone2 = ZoneId.of("Brazil/East"); System.out.println(zone1.getRules()); System.out.println(zone2.getRules()); // ZoneRules[currentStandardOffset=+01:00] // ZoneRules[currentStandardOffset=-03:00]
Вақти маҳаллӣ
LocalTime вақтро бе минтақаи вақт нишон медиҳад, масалан 17:30:15. Мисоли зерин ду an objectи вақти маҳаллиро барои минтақаҳои вақти дар боло муайяншуда эҷод мекунад. Сипас, мо ду an objectро муқоиса мекунем ва фарқияти байни онҳоро бо соатҳо ва дақиқаҳо ҳисоб мекунем. LocalTime now1 = LocalTime.now(zone1); LocalTime now2 = LocalTime.now(zone2); System.out.println(now1.isBefore(now2)); // false long hoursBetween = ChronoUnit.HOURS.between(now1, now2); long minutesBetween = ChronoUnit.MINUTES.between(now1, now2); System.out.println(hoursBetween); // -3 System.out.println(minutesBetween); // -239 LocalTime бо усулҳои гуногуни заводӣ барои осон кардани намоиш, аз ҷумла таҳлor сатр меояд. LocalTime late = LocalTime.of(23, 59, 59); System.out.println(late); // 23:59:59 DateTimeFormatter germanFormatter = DateTimeFormatter .ofLocalizedTime(FormatStyle.SHORT) .withLocale(Locale.GERMAN); LocalTime leetTime = LocalTime.parse("13:37", germanFormatter); System.out.println(leetTime); // 13:37
МаҳаллиСана
LocalDate санаи мушаххасро нишон медиҳад, масалан 2014-03-11. Мисолҳо тағирнопазиранд ва ба LocalTime шабеҳ кор мекунанд. Мисол нишон медиҳад, ки чӣ гуна санаи навро тавассути илова ё тар кардани рӯзҳо, моҳҳо ё солҳо ҳисоб кардан мумкин аст. Дар хотир доред, ки ҳар як амалиёт дар an object an objectи навро бармегардонад. LocalDate today = LocalDate.now(); LocalDate tomorrow = today.plus(1, ChronoUnit.DAYS); LocalDate yesterday = tomorrow.minusDays(2); LocalDate independenceDay = LocalDate.of(2014, Month.JULY, 4); DayOfWeek dayOfWeek = independenceDay.getDayOfWeek(); System.out.println(dayOfWeek); // FRIDAY Таҳлor LocalDate аз сатр ба монанди таҳлor LocalTime оддӣ аст: DateTimeFormatter germanFormatter = DateTimeFormatter .ofLocalizedDate(FormatStyle.MEDIUM) .withLocale(Locale.GERMAN); LocalDate xmas = LocalDate.parse("24.12.2014", germanFormatter); System.out.println(xmas); // 2014-12-24
LocalDateTime
LocalDateTime санаи вақтро нишон медиҳад. Ин маҷмӯи сана ва вақти дар боло овардашуда дар як нусха аст. Намунаҳои LocalDateTime тағирнопазиранд ва ба LocalTime ва LocalDate шабеҳ кор мекунанд. Мо метавонем усулҳоро барои дарёфти арзишҳои амволе, ки ба мо лозим аст, истифода барем: LocalDateTime sylvester = LocalDateTime.of(2014, Month.DECEMBER, 31, 23, 59, 59); DayOfWeek dayOfWeek = sylvester.getDayOfWeek(); System.out.println(dayOfWeek); // WEDNESDAY Month month = sylvester.getMonth(); System.out.println(month); // DECEMBER long minuteOfDay = sylvester.getLong(ChronoField.MINUTE_OF_DAY); System.out.println(minuteOfDay); // 1439 Якҷоя бо маълумоти иловагии минтақаи вақт, мисолро ба фаврӣ табдил додан мумкин аст. Лавҳаҳоро ба осонӣ ба навъҳои кӯҳна, ки аз java.util.Date мерос гирифтаанд, табдил додан мумкин аст. Instant instant = sylvester .atZone(ZoneId.systemDefault()) .toInstant(); Date legacyDate = Date.from(instant); System.out.println(legacyDate); // Wed Dec 31 23:59:59 CET 2014 Форматкунии санаи вақт ҳамон тавре кор мекунад, ки форматкунии сана ё вақт. Ба ҷои истифодаи форматҳои санаи пешакӣ муайяншуда, мо метавонем форматҳои дастӣ муайяншударо истифода барем. DateTimeFormatter formatter = DateTimeFormatter .ofPattern("MMM dd, yyyy - HH:mm"); LocalDateTime parsed = LocalDateTime.parse("Nov 03, 2014 - 07:13", formatter); String string = formatter.format(parsed); System.out.println(string); // Nov 03, 2014 - 07:13 Баръакси java.text.NumberFormat, DateTimeFormatter нав тағирнопазир ва бехатар аст. Барои маълумоти бештар дар бораи синтаксиси форматҳои навиштан, дар ин ҷо хонед .

Аннотацияҳо

Эзоҳҳо дар Java 8 такроршавандаанд. Барои нишон додани он, ки ин чӣ гуна кор мекунад, биёед як мисолро дида бароем. Барои оғоз, мо сарпӯши эзоҳро муайян хоҳем кард, ки массиви тавзеҳоти дурустро нигоҳ медорад: @interface Hints { Hint[] value(); } @Repeatable(Hints.class) @interface Hint { String value(); } Java 8 ба мо имкон медиҳад, ки тавассути эълони эзоҳ @Repeatable якчанд эзоҳҳои як навъро истифода барем. Варианти 1: Истифодаи annotationи контейнерӣ (мактаби кӯҳна) (Java 8 ба мо имкон медиҳад, ки эзоҳоти сершумори як навъро тавассути эълон кардани annotationи @Repeatable истифода барем.) Варианти 1: Истифодаи контейнери эзоҳ (мактаби кӯҳна) @Hints({@Hint("hint1"), @Hint("hint2")}) class Person {} Варианти 2: Истифодаи эзоҳҳои такроршаванда ( Хусусияти нав) @Hint("hint1") @Hint("hint2") class Person {} Бо истифода аз варианти дуюм, компилятори java ба таври ғайримустақим шарҳи @Hint-ро муқаррар мекунад. Ин барои хондани иттилооти эзоҳ тавассути инъикос муҳим аст. Гарчанде ки мо шарҳи @Hints -ро барои синфи Person Hint hint = Person.class.getAnnotation(Hint.class); System.out.println(hint); // null Hints hints1 = Person.class.getAnnotation(Hints.class); System.out.println(hints1.value().length); // 2 Hint[] hints2 = Person.class.getAnnotationsByType(Hint.class); System.out.println(hints2.length); // 2 эълон накардаем , онро метавон бо истифода аз усули getAnnotation(Hints.class) хонд . Аммо, усули қулайтар getAnnotationsByType мебошад , ки дастрасиро ба ҳама эзоҳҳо бо истифода аз annotationи @Hint таъмин мекунад . Илова бар ин, истифодаи эзоҳҳо дар Java 8 ба ду ҳадаф васеъ мешавад: @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE}) @interface MyAnnotation {}

Ин ҳама аст

Омӯзиши барномасозии Java 8 ман анҷом ёфт. Агар шумо хоҳед, ки дар бораи ҳама синфҳои нав ва хусусиятҳои API дар JDK 8 маълумоти бештар гиред, танҳо мақолаи навбатии маро хонед. Ин ба шумо дар фаҳмидани ҳама синфҳои нав ва хусусиятҳои пинҳонии JDK 8, ба монанди Arrays.parallelSort , StampedLock ва CompletableFuture кӯмак мекунад .
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION