JavaRush /Blog Java /Random-MS /Panduan Java 8. Bahagian 2.
ramhead
Tahap

Panduan Java 8. Bahagian 2.

Diterbitkan dalam kumpulan

API tarikh

Java 8 mengandungi API tarikh dan masa yang baharu sepenuhnya dalam pakej java.time. API Tarikh baharu adalah setanding dengan perpustakaan Joda-Time , namun ia tidak sama. Contoh berikut akan merangkumi bahagian terpenting API baharu.
jam
Jam memberikan akses kepada tarikh dan masa semasa. Jam mengetahui zon waktu dan oleh itu boleh digunakan sebagai ganti System.currentTimeMillis() untuk mengembalikan masa semasa dalam milisaat. Ketepatan masa jenis ini juga diwakili oleh kelas Segera . Semerta boleh digunakan untuk mencipta objek java.util.Date yang diwarisi . Clock clock = Clock.systemDefaultZone(); long millis = clock.millis(); Instant instant = clock.instant(); Date legacyDate = Date.from(instant); // legacy java.util.Date
Zon waktu
Zon waktu diwakili oleh kelas abstrak ZoneId . Mereka boleh diakses dengan mudah menggunakan kaedah kilang statistik. Zon waktu mentakrifkan offset yang penting untuk menukar antara tarikh dan masa serta-merta dan tempatan. 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
LocalTime memaparkan masa tanpa zon waktu, contohnya 17:30:15. Contoh berikut mencipta dua objek waktu tempatan untuk zon waktu yang ditakrifkan di atas. Kami kemudian membandingkan kedua-dua objek dan mengira perbezaan dalam jam dan minit antara mereka. 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 datang dengan pelbagai kaedah kilang untuk memudahkan instantiasi, termasuk penghuraian rentetan. 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 memaparkan tarikh tertentu, contohnya 2014-03-11. Kejadian tidak berubah dan berfungsi sama seperti LocalTime. Contoh menunjukkan cara mengira tarikh baharu dengan menambah atau menolak hari, bulan atau tahun. Perlu diingat bahawa setiap operasi pada objek mengembalikan objek baharu. 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 Menghuraikan LocalDate daripada rentetan adalah semudah menghuraikan 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 memaparkan datetime. Ini adalah gabungan tarikh dan masa yang diberikan di atas, dalam satu salinan. Kejadian LocalDateTime tidak boleh diubah dan berfungsi sama seperti LocalTime dan LocalDate. Kami boleh menggunakan kaedah untuk mendapatkan semula nilai sifat contoh yang kami perlukan: 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 Bersama-sama dengan maklumat zon waktu tambahan, tika itu boleh ditukar kepada segera. Semerta boleh ditukar dengan mudah kepada jenis lama yang diwarisi daripada 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 Memformat tarikh-masa berfungsi dengan cara yang sama seperti memformat tarikh atau masa. Daripada menggunakan format tarikh yang dipratentukan, kami boleh menggunakan format yang ditentukan secara manual. 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 Tidak seperti java.text.NumberFormat, DateTimeFormatter baharu adalah tidak boleh diubah dan selamat untuk thread. Untuk mendapatkan maklumat lanjut tentang sintaks untuk format penulisan, baca di sini .

Anotasi

Anotasi dalam Java 8 boleh diulang. Mari kita lihat contoh untuk menggambarkan cara ini berfungsi. Untuk memulakan, kami akan mentakrifkan pembalut anotasi yang menyimpan tatasusunan anotasi yang sah: @interface Hints { Hint[] value(); } @Repeatable(Hints.class) @interface Hint { String value(); } Java 8 membolehkan kami menggunakan berbilang anotasi daripada jenis yang sama dengan mengisytiharkan anotasi @Repeatable. Pilihan 1: Menggunakan anotasi bekas (sekolah lama) (Java 8 membenarkan kami menggunakan berbilang anotasi jenis yang sama dengan mengisytiharkan anotasi @Repeatable .) Pilihan 1: Menggunakan bekas anotasi (old school) @Hints({@Hint("hint1"), @Hint("hint2")}) class Person {} Pilihan 2: Menggunakan anotasi boleh ulang ( ciri baharu) @Hint("hint1") @Hint("hint2") class Person {} Menggunakan pilihan dua, pengkompil java secara tersirat menetapkan anotasi @Hint. Ini penting untuk membaca maklumat anotasi melalui refleksi. 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 Walaupun kami belum mengisytiharkan anotasi @Hints untuk kelas Person , ia boleh dibaca menggunakan kaedah getAnnotation(Hints.class) . Walau bagaimanapun, kaedah yang lebih mudah ialah getAnnotationsByType , yang menyediakan akses kepada semua anotasi menggunakan anotasi @Hint . Di samping itu, penggunaan anotasi dalam Java 8 berkembang kepada dua tujuan: @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE}) @interface MyAnnotation {}

Itu sahaja

Tutorial Pengaturcaraan Java 8 saya telah selesai. Jika anda ingin mengetahui lebih lanjut tentang semua kelas baharu dan ciri API dalam JDK 8, cuma baca artikel saya yang seterusnya. Ini akan membantu anda memahami semua kelas baharu dan ciri tersembunyi dalam JDK 8, seperti Arrays.parallelSort , StampedLock dan CompletableFuture .
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION