JavaRush /Java blogi /Random-UZ /Java 8 uchun qo'llanma. 2-qism.
ramhead
Daraja

Java 8 uchun qo'llanma. 2-qism.

Guruhda nashr etilgan

Sana API

Java 8 java.time paketida mutlaqo yangi sana va vaqt API-larini o'z ichiga oladi. Yangi Date API-ni Joda-Time kutubxonasi bilan solishtirish mumkin , ammo u bir xil emas. Quyidagi misollar yangi API ning eng muhim qismlarini qamrab oladi.
Soat
Soat joriy sana va vaqtga kirish imkonini beradi. Soatlar vaqt mintaqalaridan xabardor va shuning uchun joriy vaqtni millisekundlarda qaytarish uchun System.currentTimeMillis() o'rniga ishlatilishi mumkin . Bunday vaqt aniqligi Instant sinfi tomonidan ham ifodalanadi . Instants meros qilib olingan java.util.Date obyektlarini yaratish uchun ishlatilishi mumkin . Clock clock = Clock.systemDefaultZone(); long millis = clock.millis(); Instant instant = clock.instant(); Date legacyDate = Date.from(instant); // legacy java.util.Date
Vaqt mintaqalari
Vaqt zonalari ZoneId mavhum klassi bilan ifodalanadi . Ularga statistik zavod usullari yordamida osongina kirish mumkin. Vaqt mintaqalari bir lahzali va mahalliy sana va vaqt o'rtasida konvertatsiya qilish uchun muhim bo'lgan ofsetlarni belgilaydi. 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]
Mahalliy vaqt
LocalTime vaqtni mintaqasiz ko'rsatadi, masalan, 17:30:15. Quyidagi misol yuqorida belgilangan vaqt zonalari uchun ikkita mahalliy vaqt ob'ektini yaratadi. Keyin ikkala ob'ektni solishtiramiz va ular orasidagi soat va daqiqalardagi farqni hisoblaymiz. 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 instantsiyani osonlashtirish uchun turli xil zavod usullari bilan birga keladi, shu jumladan qatorni tahlil qilish. 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
Mahalliy sana
LocalDate ma'lum bir sanani ko'rsatadi, masalan, 2014-03-11. Misollar o'zgarmas va LocalTime bilan bir xil ishlaydi. Misol kunlarni, oylarni yoki yillarni qo'shish yoki ayirish orqali yangi sanani qanday hisoblashni ko'rsatadi. Shuni yodda tutingki, ob'ektdagi har bir operatsiya yangi ob'ektni qaytaradi. 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-ni satrdan ajratish LocalTime-ni tahlil qilish kabi oddiy: 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 sana vaqtini ko'rsatadi. Bu yuqorida keltirilgan sana va vaqtning kombinatsiyasi, bitta nusxada. LocalDateTime misollari o'zgarmas va LocalTime va LocalDate kabi ishlaydi. Bizga kerak bo'lgan misol xususiyati qiymatlarini olish uchun usullardan foydalanishimiz mumkin: 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 qo'shimcha vaqt mintaqasi ma'lumotlari bilan birgalikda namunani lahzaga aylantirish mumkin. Instantlarni java.util.Date dan meros qolgan eski turlarga osongina aylantirish mumkin. Instant instant = sylvester .atZone(ZoneId.systemDefault()) .toInstant(); Date legacyDate = Date.from(instant); System.out.println(legacyDate); // Wed Dec 31 23:59:59 CET 2014 Sana-vaqtni formatlash sana yoki vaqtni formatlash bilan bir xil ishlaydi. Oldindan belgilangan sana formatlarini ishlatish o'rniga, biz qo'lda belgilangan formatlardan foydalanishimiz mumkin. 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.NumberFormatdan farqli o'laroq, yangi DateTimeFormatter o'zgarmas va xavfsizdir. Yozish formatlari sintaksisi haqida ko'proq ma'lumot olish uchun bu erda o'qing .

Izohlar

Java 8 da izohlar takrorlanadi. Bu qanday ishlashini ko'rsatish uchun bir misolni ko'rib chiqaylik. Boshlash uchun biz yaroqli izohlar qatorini saqlaydigan izohli oʻramni aniqlaymiz: @interface Hints { Hint[] value(); } @Repeatable(Hints.class) @interface Hint { String value(); } Java 8 @Repeatable izohini eʼlon qilish orqali bir xil turdagi bir nechta izohlardan foydalanish imkonini beradi. Variant 1: Konteyner annotatsiyasidan foydalanish (eski maktab) (Java 8 bizga @Repeatable annotatsiyasini e'lon qilish orqali bir xil turdagi bir nechta izohlardan foydalanish imkonini beradi .) Variant 1: Annotatsiya konteyneridan foydalanish (eski maktab) @Hints({@Hint("hint1"), @Hint("hint2")}) class Person {} 2-variant: Takrorlanadigan izohlardan foydalanish ( yangi xususiyat) @Hint("hint1") @Hint("hint2") class Person {} Ikkinchi variantdan foydalanib, java kompilyatori bilvosita @Hint izohini o'rnatadi. Bu mulohaza orqali annotatsiya ma'lumotlarini o'qish uchun muhimdir. Biz Person sinfi uchun @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 izohini e'lon qilmagan bo'lsak ham , uni getAnnotation(Hints.class) usuli yordamida o'qish mumkin . Biroq, qulayroq usul getAnnotationsByType bo'lib, u @Hint izohi yordamida barcha izohlarga kirish imkonini beradi . Bundan tashqari, Java 8-da izohlardan foydalanish ikki maqsadda kengayadi: @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE}) @interface MyAnnotation {}

Bu hammasi

Mening Java 8 dasturlash darsligim tugallandi. Agar siz JDK 8 dagi barcha yangi sinflar va API xususiyatlari haqida koʻproq maʼlumotga ega boʻlishni istasangiz, keyingi maqolamni oʻqing. Bu sizga JDK 8 da Arrays.parallelSort , StampedLock va CompletableFuture kabi barcha yangi sinflar va yashirin xususiyatlarni tushunishga yordam beradi .
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION