Java kommentárok Interjúkérdések (+ válaszok)

Ez a cikk egy sorozat része: • Java Collections interjúkérdések

• Java típusú rendszerinterjúkérdések

• Java egyidejű interjúkérdések (+ válaszok)

• Java osztály felépítése és inicializálása interjúkérdések

• Java 8 interjúkérdések (+ válaszok)

• Memóriakezelés Java interjúkérdésekben (+ válaszok)

• Java Generics interjúkérdések (+ válaszok)

• Java Flow Control interjúkérdések (+ válaszok)

• Java kivételek interjúkérdések (+ válaszok)

• Java Annotations Interjúkérdések (+ Válaszok) (aktuális cikk) • Top Spring Interjúkérdések

1. Bemutatkozás

A kommentárok a Java 5 óta léteznek, és manapság mindenütt jelen lévő programozási konstrukciókról van szó, amelyek lehetővé teszik a kód gazdagítását.

Ebben a cikkben áttekintünk néhány kérdést a kommentárokkal kapcsolatban; amelyeket gyakran kérdeznek technikai interjúkon, és adott esetben; példákat valósítunk meg, hogy jobban megértsük válaszaikat.

2. Kérdések

Q1. Mik azok a kommentárok? Melyek a tipikus használati eseteik?

A kommentárok a program forráskódjának elemeihez kötött metaadatok, és nincsenek hatással az általuk működtetett kód működésére.

Tipikus felhasználási eseteik a következők:

  • Információk a fordító számára - kommentárokkal a fordító hibákat észlelhet vagy elnyomhatja a figyelmeztetéseket
  • Fordítási és telepítési idejű feldolgozás - a szoftvereszközök képesek feldolgozni a jegyzeteket, és generálni kódot, konfigurációs fájlokat stb.
  • Futásidejű feldolgozás - az annotációk futás közben vizsgálhatók a program viselkedésének testreszabása érdekében

Q2. Írjon le néhány hasznos megjegyzést a Standard könyvtárból.

Több feljegyzés található a java.lang és java.lang.jegyzet csomagok, a leggyakoribbak a következőket tartalmazzák, de nem kizárólag:

  • @ Felülírás - azt jelöli, hogy egy módszer célja egy szuperosztályban deklarált elem felülírása. Ha nem sikerül felülírni a metódust helyesen, a fordító hibát ad ki
  • @Elavult - azt jelzi, hogy az elem elavult és nem használható. A fordító figyelmeztetést ad ki, ha a program egy metódust, osztályt vagy mezőt használ, amelyet ezzel a kommentárral jelöltek meg
  • @SuppressWarnings - utasítja a fordítót, hogy szüntesse meg a speciális figyelmeztetéseket. Leggyakrabban akkor használják, amikor interakcióba lépnek a generikus kódok megjelenése előtt írt régi kóddal
  • @FunctionalInterface - a Java 8-ban bevezetve, azt jelzi, hogy a típusdeklaráció funkcionális interfész, és amelynek megvalósítása a Lambda Expression segítségével biztosítható

Q3. Hogyan hozhat létre kommentárokat?

A kommentárok egy olyan felület formája, ahol a kulcsszó felület előtt áll @, és akinek a teste tartalmaz annotáció típusú elem deklarációk, amelyek nagyon hasonlítanak a módszerekhez:

public @interface SimpleAnnotation {Karakterlánc értéke (); int [] típusok (); }

A kommentár definiálása után a yon elkezdheti használni a kódján keresztül:

@SimpleAnnotation (value = "egy elem", type = 1) public class Element {@SimpleAnnotation (value = "an attribute", type = {1, 2}) public Element nextElement; }

Ne feledje, hogy ha több értéket ad meg tömbelemekhez, zárójelbe kell foglalnia azokat.

Opcionálisan az alapértelmezett értékek is megadhatók, amennyiben azok állandó kifejezések a fordító számára:

public @interface SimpleAnnotation {String value () alapértelmezett "Ez egy elem"; int [] type () alapértelmezett {1, 2, 3}; }

Most már az elemek nélkül is használhatja a megjegyzéseket:

@SimpleAnnotation public class Element {// ...}

Vagy csak néhány közülük:

@SimpleAnnotation (value = "egy attribútum") public Element nextElement;

Q4. Milyen objektumtípusokat lehet visszaküldeni egy kommentár módszer deklarációból?

A visszatérési típusnak primitívnek kell lennie, Húr, Osztály, Enum, vagy az előző típusok tömbje. Ellenkező esetben a fordító hibát dob.

Íme egy példa kód, amely sikeresen követi ezt az elvet:

enum Complexity {LOW, HIGH} public @interface ComplexAnnotation {Osztályérték (); int [] típusok (); Komplexitás komplexitás (); }

A következő példa nem fog összeállítani azóta Tárgy nem érvényes visszatérési típus:

public @interface FailingAnnotation {Object complexity (); }

Q5. Mely programelemeket lehet kommentálni?

A kommentárok a forráskódban több helyen is alkalmazhatók. Alkalmazhatók osztályok, konstruktorok és mezők deklarációira:

@SimpleAnnotation public class {@SimpleAnnotation private String aField; @SimpleAnnotation public Jelentkezés () {// ...}}

Módszerek és paramétereik:

@SimpleAnnotation public void aMethod (@SimpleAnnotation String param) {// ...}

Helyi változók, beleértve a hurok- és erőforrás-változókat:

@SimpleAnnotation int i = 10; for (@SimpleAnnotation int j = 0; j <i; j ++) {// ...} próbálkozzon (@SimpleAnnotation FileWriter író = getWriter ()) {// ...} fogással (ex kivétel) {// .. .}

Egyéb kommentár típusok:

@SimpleAnnotation public @interface ComplexAnnotation {// ...}

És még csomagokat is package-info.java fájl:

@PackageAnnotation csomag com.baeldung.interview.annotations;

A Java 8-tól kezdve a használat típusúak. Ahhoz, hogy ez működjön, a kommentárnak meg kell adnia egy @Cél értékű kommentár ElementType.USE:

@Target (ElementType.TYPE_USE) public @interface SimpleAnnotation {// ...}

Most az annotáció alkalmazható osztálypéldányok létrehozására:

új @SimpleAnnotation Apply ();

Típusgipsz:

aString = (@SimpleAnnotation String) valami;

Végrehajtási záradék:

public class SimpleList megvalósítja a @SimpleAnnotation List {// ...}

És dob kikötés:

void aMethod () @SimpleAnnotation Exception {// ...}

Q6. Van-e mód arra, hogy korlátozzuk azokat az elemeket, amelyekben egy kommentár alkalmazható?

Igen, a @Cél annotáció használható erre a célra. Ha megpróbálunk annotációt olyan környezetben használni, ahol az nem alkalmazható, a fordító hibát ad ki.

Itt van egy példa a @SimpleAnnotation csak a mezei nyilatkozatokhoz tartozó kommentár:

@Target (ElementType.FIELD) public @interface SimpleAnnotation {// ...}

Több állandót is áthaladhatunk, ha azt több kontextusban is alkalmazhatóvá akarjuk tenni:

@Target ({ElementType.FIELD, ElementType.METHOD, ElementType.PACKAGE})

Akár feljegyzést is készíthetünk, így nem lehet semmit feljegyezni. Ez jól jöhet, ha a deklarált típusokat kizárólag tagtípusként kívánják használni összetett annotációkban:

@Target ({}) public @interface NoTargetAnnotation {// ...}

Q7. Mik azok a meta-kommentárok?

Megjegyzések más jelölésekre is vonatkoznak.

Minden olyan jelölés, amely nincs jelölve @Cél, vagy vannak jelölve vele, de tartalmazzák ANNOTATION_TYPE állandóak a meta-annotációk is:

@Target (ElementType.ANNOTATION_TYPE) public @interface SimpleAnnotation {// ...}

Q8. Mi az ismétlődő kommentár?

Ezek olyan kommentárok, amelyek többször alkalmazhatók ugyanarra az elem deklarációra.

Kompatibilitási okokból, mivel ezt a funkciót a Java 8-ban vezették be, az ismétlődő megjegyzések a konténer megjegyzés amelyet a Java fordító automatikusan generál. Ahhoz, hogy a fordító ezt megtegye, két lépéssel deklarálhatjuk őket.

Először is meg kell ismételni a megismételhető kommentárokat:

@Megismételhető (Schedules.class) public @interface Ütemezés {String time () alapértelmezett "reggel"; }

Ezután egy kötelezővel megadjuk a tartalmazó kommentárokat érték elemet, és amelynek típusának megismételhető kommentár típusú tömbnek kell lennie:

public @interface Schedules {Schedule [] érték (); }

Most többször használhatjuk a @Schedule-t:

@Schedule @Schedule (időpont = "délután") @Schedule (idő = "éjszaka") void tervezett módszer () {// ...}

Q9. Hogyan lehet letölteni a kommentárokat? Hogyan viszonyul ez a megőrzési politikájához?

Használhatja a Reflection API-t vagy egy annotációs processzort a kommentárok lekéréséhez.

A @Visszatartás annotáció és annak RetentionPolicy paraméter befolyásolja, hogyan lehet lekérni őket. Három állandó van RetentionPolicy enum:

  • RetentionPolicy.SOURCE - a fordító elveti az annotációt, de az annotációs processzorok el tudják olvasni őket
  • RetentionPolicy.CLASS - azt jelzi, hogy az annotáció hozzá lett adva az osztályfájlhoz, de reflexióval nem érhető el
  • RetentionPolicy.RUNTIME –A kommentárokat a fordító rögzíti az osztályfájlban, és a JVM futás közben megőrzi, hogy reflektív módon olvashatók legyenek

Íme egy példa kód futás közben olvasható kommentár létrehozására:

@Retention (RetentionPolicy.RUNTIME) public @interface Leírás {String value (); }

Most a kommentárok reflexióval lekérhetők:

Leírás leírása = AnnotatedClass.class.getAnnotation (Description.class); System.out.println (description.value ());

Egy annotációs processzor működhet együtt RetentionPolicy.SOURCE, ezt a Java kommentárok feldolgozása és egy készítő létrehozása című cikk ismerteti.

RetentionPolicy.CLASS használható, ha Java bájtkód-elemzőt írsz.

Q10. Összeállítja a következő kódot?

@Target ({ElementType.FIELD, ElementType.TYPE, ElementType.FIELD}) public @interface TestAnnotation {int [] érték () alapértelmezett {}; }

Nem. Fordítási időbeli hiba, ha ugyanaz az enumállandó többször is megjelenik egy @Cél annotáció.

Az ismétlődő konstans eltávolításával a kód sikeresen lefordítható:

@Target ({ElementType.FIELD, ElementType.TYPE})

Q11. Lehetséges a kommentárok kiterjesztése?

Nem. A kommentárok mindig kiterjednek java.lang.annotation.A kommentár, amint azt a Java nyelvi specifikáció tartalmazza.

Ha megpróbáljuk használni a kiterjed záradék egy annotációs nyilatkozatban, fordítási hibát kapunk:

public @interface Az AnAnnotation kiterjeszti a OtherAnnotation {// fordítási hiba}

Következtetés

Ebben a cikkben a Java-fejlesztők számára készített technikai interjúkban megjelenő, a kommentárokkal kapcsolatos gyakran feltett kérdéseket ismertettük. Ez korántsem teljes körű felsorolás, és csak a további kutatások kezdetének tekinthető.

Mi, a Baeldungnál sikert kívánunk a közelgő interjúkhoz.

Következő » Legfrissebb tavaszi keretinterjúkérdések « Korábbi Java-kivételek Interjúkérdések (+ Válaszok)