JavaRush /Java Blog /Random-ID /Panduan Java 8. Bagian 2.
ramhead
Level 13

Panduan Java 8. Bagian 2.

Dipublikasikan di grup Random-ID

API Tanggal

Java 8 berisi API tanggal dan waktu yang benar-benar baru dalam paket java.time. Date API yang baru sebanding dengan perpustakaan Joda-Time , namun tidak sama. Contoh berikut akan membahas bagian terpenting dari API baru.
Jam
Jam memberikan akses ke tanggal dan waktu saat ini. Jam mengetahui zona waktu dan oleh karena itu dapat digunakan sebagai pengganti System.currentTimeMillis() untuk mengembalikan waktu saat ini dalam milidetik. Ketepatan waktu semacam ini juga diwakili oleh kelas Instan . Instan dapat digunakan untuk membuat 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
Zona waktu
Zona waktu diwakili oleh kelas abstrak ZoneId . Mereka dapat dengan mudah diakses menggunakan metode statistik pabrik. Zona waktu menentukan offset yang penting untuk mengkonversi antara tanggal dan waktu instan dan lokal. 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]
Waktu lokal
LocalTime menampilkan waktu tanpa zona waktu, misalnya 17:30:15. Contoh berikut membuat dua objek waktu lokal untuk zona waktu yang ditentukan di atas. Kami kemudian membandingkan kedua objek tersebut dan menghitung perbedaan jam dan menit di antara keduanya. 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 hadir dengan berbagai metode pabrik untuk mempermudah pembuatan instance, termasuk penguraian string. 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
Tanggal Lokal
LocalDate menampilkan tanggal tertentu, misalnya 11-03-2014. Instance tidak dapat diubah dan bekerja serupa dengan LocalTime. Contoh ini menunjukkan cara menghitung tanggal baru dengan menambahkan atau mengurangi hari, bulan, atau tahun. Ingatlah bahwa setiap operasi pada suatu objek mengembalikan objek baru. 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 Mengurai LocalDate dari sebuah string semudah mengurai 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
TanggalWaktu Lokal
LocalDateTime menampilkan waktu tanggal. Ini adalah kombinasi tanggal dan waktu yang diberikan di atas, dalam satu salinan. Instance LocalDateTime tidak dapat diubah dan berfungsi serupa dengan LocalTime dan LocalDate. Kita dapat menggunakan metode untuk mengambil nilai properti instance yang kita 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 dengan informasi zona waktu tambahan, instance dapat dikonversi menjadi instan. Instan dapat dengan mudah dikonversi ke tipe lama yang diwarisi dari 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 Cara kerja memformat tanggal-waktu sama seperti memformat tanggal atau waktu. Daripada menggunakan format tanggal yang telah ditentukan sebelumnya, kita dapat 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 yang baru tidak dapat diubah dan aman untuk thread. Untuk informasi lebih lanjut tentang sintaks untuk format penulisan, baca di sini .

Anotasi

Anotasi di Java 8 dapat diulang. Mari kita lihat contoh untuk mengilustrasikan cara kerjanya. Untuk memulai, kita akan mendefinisikan pembungkus anotasi yang menyimpan array anotasi yang valid: @interface Hints { Hint[] value(); } @Repeatable(Hints.class) @interface Hint { String value(); } Java 8 memungkinkan kita menggunakan beberapa anotasi bertipe sama dengan mendeklarasikan anotasi @Repeatable. Opsi 1: Menggunakan anotasi kontainer (jadul) (Java 8 memungkinkan kita menggunakan beberapa anotasi berjenis sama dengan mendeklarasikan @Repeatable annotation .) Opsi 1: Menggunakan wadah anotasi (jadul) @Hints({@Hint("hint1"), @Hint("hint2")}) class Person {} Opsi 2: Menggunakan anotasi berulang ( fitur baru) @Hint("hint1") @Hint("hint2") class Person {} Menggunakan opsi dua, kompiler java secara implisit menyetel anotasi @Hint. Hal ini penting untuk membaca informasi 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 Meskipun kami belum mendeklarasikan anotasi @Hints untuk kelas Person , anotasi tersebut dapat dibaca menggunakan metode getAnnotation(Hints.class) . Namun, metode yang lebih mudah adalah getAnnotationsByType , yang menyediakan akses ke semua anotasi menggunakan @Hint annotation . Selain itu, penggunaan anotasi di Java 8 diperluas untuk dua tujuan: @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE}) @interface MyAnnotation {}

Ini semua

Tutorial Pemrograman Java 8 saya sudah selesai. Jika Anda ingin mempelajari lebih lanjut tentang semua kelas dan fitur API baru di JDK 8, baca saja artikel saya berikutnya. Ini akan membantu Anda memahami semua kelas baru dan fitur tersembunyi di JDK 8, seperti Arrays.parallelSort , StampedLock , dan CompletableFuture .
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION