JavaRush /Java Blog /Random-TL /Gabay sa Java 8. Bahagi 2.
ramhead
Antas

Gabay sa Java 8. Bahagi 2.

Nai-publish sa grupo

API ng petsa

Ang Java 8 ay naglalaman ng ganap na bagong mga API ng petsa at oras sa java.time package. Ang bagong Date API ay maihahambing sa Joda-Time library , gayunpaman hindi ito pareho. Sasakupin ng mga sumusunod na halimbawa ang pinakamahalagang bahagi ng bagong API.
orasan
Ang orasan ay nagbibigay ng access sa kasalukuyang petsa at oras. Alam ng mga orasan ang mga time zone at samakatuwid ay maaaring gamitin sa halip na System.currentTimeMillis() upang ibalik ang kasalukuyang oras sa millisecond. Ang ganitong uri ng katumpakan ng oras ay kinakatawan din ng Instant na klase . Maaaring gamitin ang mga instant upang lumikha ng minanang java.util.Date na mga bagay . Clock clock = Clock.systemDefaultZone(); long millis = clock.millis(); Instant instant = clock.instant(); Date legacyDate = Date.from(instant); // legacy java.util.Date
Mga timezone
Ang mga timezone ay kinakatawan ng abstract na klase na ZoneId . Madali silang ma-access gamit ang mga istatistikal na pamamaraan ng pabrika. Tinutukoy ng mga timezone ang mga offset na mahalaga para sa pag-convert sa pagitan ng madalian at lokal na petsa at oras. 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]
Lokal na Oras
Ipinapakita ng LocalTime ang oras na walang time zone, halimbawa 17:30:15. Ang sumusunod na halimbawa ay lumilikha ng dalawang lokal na bagay sa oras para sa mga time zone na tinukoy sa itaas. Pagkatapos ay ihambing namin ang dalawang bagay at kalkulahin ang pagkakaiba sa mga oras at minuto sa pagitan nila. 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 Ang LocalTime ay may kasamang iba't ibang paraan ng pabrika upang gawing mas madali ang instantiation, kabilang ang pag-parse ng 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
LocalDate
Ang LocalDate ay nagpapakita ng isang partikular na petsa, halimbawa 2014-03-11. Ang mga pagkakataon ay hindi nababago at gumagana nang katulad ng LocalTime. Ipinapakita ng halimbawa kung paano kalkulahin ang isang bagong petsa sa pamamagitan ng pagdaragdag o pagbabawas ng mga araw, buwan o taon. Tandaan na ang bawat operasyon sa isang bagay ay nagbabalik ng bagong bagay. 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 Ang pag-parse ng LocalDate mula sa isang string ay kasing simple ng pag-parse ng 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
Ipinapakita ng LocalDateTime ang datetime. Ito ay kumbinasyon ng petsa at oras na ibinigay sa itaas, sa isang kopya. Ang mga pagkakataon ng LocalDateTime ay hindi nababago at gumagana nang katulad sa LocalTime at LocalDate. Maaari kaming gumamit ng mga paraan upang makuha ang mga value ng instance na property na kailangan namin: 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 Kasama ng karagdagang impormasyon sa time zone, ang instance ay maaaring ma-convert sa instant. Ang mga instant ay madaling ma-convert sa mga lumang uri na nagmana mula sa 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 Ang pag-format ng petsa-oras ay gumagana sa parehong paraan tulad ng pag-format ng petsa o oras. Sa halip na gumamit ng mga paunang natukoy na format ng petsa, maaari naming gamitin ang mga manual na tinukoy na mga format. 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 Hindi tulad ng java.text.NumberFormat, ang bagong DateTimeFormatter ay hindi nababago at ligtas ang thread. Para sa higit pang impormasyon tungkol sa syntax para sa mga format ng pagsulat, basahin dito .

Mga anotasyon

Ang mga anotasyon sa Java 8 ay nauulit. Tingnan natin ang isang halimbawa upang ilarawan kung paano ito gumagana. Upang magsimula, tutukuyin namin ang isang wrapper ng anotasyon na nag-iimbak ng hanay ng mga wastong anotasyon: @interface Hints { Hint[] value(); } @Repeatable(Hints.class) @interface Hint { String value(); } Binibigyang-daan kami ng Java 8 na gumamit ng maraming anotasyon ng parehong uri sa pamamagitan ng pagdedeklara ng anotasyong @Repeatable. Opsyon 1: Gamit ang container annotation (old school) (Java 8 ay nagbibigay-daan sa amin na gumamit ng maramihang anotasyon ng parehong uri sa pamamagitan ng pagdedeklara ng @Repeatable annotation .) Opsyon 1: Paggamit ng anotation container (old school) @Hints({@Hint("hint1"), @Hint("hint2")}) class Person {} Opsyon 2: Paggamit ng repeatable annotation ( bagong feature) @Hint("hint1") @Hint("hint2") class Person {} Gamit ang opsyon na dalawa, ang java compiler ay tahasang nagtatakda ng @Hint annotation. Mahalaga ito para sa pagbabasa ng impormasyon ng anotasyon sa pamamagitan ng pagmuni-muni. 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 Bagama't hindi pa namin idineklara ang @Hints annotation para sa Person class , maaari itong basahin gamit ang getAnnotation(Hints.class) method . Gayunpaman, ang isang mas maginhawang paraan ay getAnnotationsByType , na nagbibigay ng access sa lahat ng anotasyon gamit ang @Hint annotation . Bilang karagdagan, ang paggamit ng mga anotasyon sa Java 8 ay lumalawak sa dalawang layunin: @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE}) @interface MyAnnotation {}

Ito lang

Kumpleto na ang aking Java 8 Programming Tutorial. Kung gusto mong matuto nang higit pa tungkol sa lahat ng mga bagong klase at feature ng API sa JDK 8, basahin lang ang susunod kong artikulo. Makakatulong ito sa iyong maunawaan ang lahat ng bagong klase at mga nakatagong feature sa JDK 8, gaya ng Arrays.parallelSort , StampedLock , at CompletableFuture .
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION