JavaRush /Java блогу /Random-KY /Java 8 колдонмосу. 2 бөлүк.
ramhead
Деңгээл

Java 8 колдонмосу. 2 бөлүк.

Группада жарыяланган

Date API

Java 8 java.time пакетинде такыр жаңы дата жана убакыт API'лерин камтыйт. Жаңы Date API Joda-Time китепканасы менен салыштырууга болот , бирок ал бирдей эмес. Төмөнкү мисалдар жаңы APIдин эң маанилүү бөлүктөрүн камтыйт.
Саат
Саат учурдагы датага жана убакытка мүмкүнчүлүк берет. Сааттар убакыт алHowтарын бorшет жана ошондуктан учурдагы убакытты миллисекунд менен кайтаруу үчүн System.currentTimeMillis() ордуна колдонулушу мүмкүн. Мындай убакыт тактыгын Instant классы да көрсөтөт . Instants мураска алынган java.util.Date an objectтерин түзүү үчүн колдонулушу мүмкүн . Clock clock = Clock.systemDefaultZone(); long millis = clock.millis(); Instant instant = clock.instant(); Date legacyDate = Date.from(instant); // legacy java.util.Date
Убакыт алHowтары
Убакыт алHowтары абстракттуу класс ZoneId менен көрсөтүлөт . Аларга статистикалык фабрикалык ыкмаларды колдонуу менен оңой жетүүгө болот. Убакыт алHowтары көз ирмемдик жана жергorктүү күн менен убакытты алмаштыруу үчүн маанилүү болгон офсеттерди аныктайт. 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]
Жергorктүү убакыт
LocalTime убакытты убакыт алкагы жок көрсөтөт, мисалы 17:30:15. Төмөнкү мисал жогоруда аныкталган убакыт алHowтары үчүн эки жергorктүү убакыт 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 түзүүнү жеңилдетүү үчүн ар кандай заводдук ыкмалар менен келет, анын ичинде сап талдоо. 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
LocalDate белгилүү бир датаны көрсөтөт, мисалы, 2014-03-11. Инстанциялар өзгөрүлбөйт жана LocalTimeге окшош иштейт. Мисал күндөрдү, айларды же жылдарды кошуу же кемитүү аркылуу жаңы датаны кантип эсептөө керектигин көрсөтөт. Объектке жасалган ар бир операция жаңы 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 Саптан LocalDate талдоо 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деги annotationлар кайталанат. Мунун кандайча иштээрин көрсөтүү үчүн бир мисалды карап көрөлү. Баштоо үчүн, биз жарактуу annotationлардын массивдерин сактаган annotation оромосун аныктайбыз: @interface Hints { Hint[] value(); } @Repeatable(Hints.class) @interface Hint { String value(); } Java 8 бизге @Repeatable annotationсын жарыялоо менен бир түрдөгү бир нече annotationларды колдонууга мүмкүндүк берет. 1-вариант: Контейнер annotationсын колдонуу (эски мектеп) (Java 8 бизге @Repeatable annotationсын жарыялоо менен бир түрдөгү бир нече annotationларды колдонууга мүмкүндүк берет .) 1-вариант: Аннотация контейнерин колдонуу (эски мектеп) @Hints({@Hint("hint1"), @Hint("hint2")}) class Person {} 2-вариант: Кайталануучу annotationларды колдонуу ( жаңы функция) @Hint("hint1") @Hint("hint2") class Person {} Экинчи вариантты колдонуп, java компилятору @Hint annotationсын кыйыр түрдө орнотот. Бул ой жүгүртүү аркылуу annotation маалыматын окуу үчүн маанилүү. Person классы үчүн @Hints 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 annotationсын жарыялабаганыбыз менен , аны getAnnotation(Hints.class) ыкмасы менен окуса болот . Бирок, бир кыйла ыңгайлуу ыкма getAnnotationsByType болуп саналат, ал @Hint annotationсын колдонуу менен бардык annotationларга мүмкүнчүлүк берет . Мындан тышкары, Java 8де annotationларды колдонуу эки максатта кеңейет: @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE}) @interface MyAnnotation {}

Бул баары

Менин Java 8 программалоо үйрөткүм бүттү. JDK 8деги бардык жаңы класстар жана API мүмкүнчүлүктөрү жөнүндө көбүрөөк билгиңиз келсе, менин кийинки макаламды окуп чыгыңыз. Бул сизге JDK 8деги Arrays.parallelSort , StampedLock жана CompletableFuture сыяктуу бардык жаңы класстарды жана жашыруун функцияларды түшүнүүгө жардам берет .
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION