Java SE/JDK új lehetőségei Flashcards

1
Q

Mi az előzetes lehetőség és milyen lehet?

A

Java nyelv, virtuális gép vagy a Java SE API egy új lehetősége, mely pontosan meghatározott, teljesen implementált de még nem végleges.
Lehet: előzetes nyelvi lehetőség, előzetes VM lehetőség vagy előzetes API-l.
Nem lehet kísérleti, kockázatos, hiányos vagy instabil.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Jellemezd a lokális változó típus kikövetkeztetést!

A

A nem null kezdőértékű lokális változók típus megadása var azonosítóval is deklarálhatók. Fordítási időben következteti ki a típust. A var azonosító nem kulcsszó, hanem fenntartott típusnév.

Használható a var:
inicializált lokális változóknál
for-each ciklus indexeiben
Hagyományos for ciklusban deklarált változókban
try-with-resources utasításban

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Jellemezd a lokális változó szintaxisát lambda paraméterkhez!

A

var fenntartott típusnév használható lambda kifejezések paraméterinek deklarásához (var x, var y) -> x.process(y)
Ez által lehet annotációkat is használni, ez kötelező minden elemhez, vagy tilos bármelyikhez is
(@NonNull var x, @Nullable var y) -> x.process(y).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Jellemezd a Swtich kifejezéseket!

A

A switch használható utasításként és kifejezésként is. Mindkét esetben van case címke (áteséses és anélküli). Továbbá rendelkezésre áll egy “yield” utasítás, mely által értéket ad vissza a switch kifejezés.
Egy switch kifejezés vagy normális módon egy értékkel kell lezárulnia, vagy kivétellel.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Jellemezd a switch címke szintaxisát!

A

Új forma a case … ->, melyben megadható egy elem, vagy vesszővel elválasztott elemek, a jobb oldalán pedig kifejezés, blokk, vagy throw engedélyezett. Ha illeszkedik akkor nincs átesés.
var s = switch (items.size()) {
case 0 -> “no items”;
case 1 -> “only one item”;
default -> String.format(“%d items”);
}
Címkéit kimerítő módon kell felsorolni, azaz minden lehetséges esetre kell valami illeszkedjen. Szükséges egy default záradék, kivétel ha az enum konstans minden elemét lefedi.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Hogy használjuk switchben a yield utasítást?

A

Akkor kerül használatra, mikor a switch egy értéket ad vissza. A yield nem kulcsszó, hanem korlátozott azonoító.
int j = switch (day) {
—-case MONDAY -> 0;
—-case TUESDAY -> 1;
—-default -> {
——–int k = day.toString().length();
——–int result = f(k);
——–yield result;
—-}
};

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Jellemezd a szövegblokkokat!

A

Többsoros string literál, bárhol használható ahol a string literál.
var html = “””
line 1
line 2
line 3
“””

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Jellemezd a mintaillesztést az instanceof operátorhoz!

A

Komponensek objektumból történő feltételes kinyerésének tömörebb és biztonságosabb kifejezését segítik elő.
A minta szerkezete:
Célra alkalmazható predikátum vagy teszt
Minta változóknak nevezett változók egy halmaza, melyek csak a predikátum teljesülésekor kerülnek kinyerésre.

if (obj instanceof String s) {
// …
}
Egy típust meghatározó predikátumból és egy minta változóból áll.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Jellemezd a mintaillesztés határkörkezelését (flow scoping)!

A

Egy minta változó határköre a program azon pontjaira terjed ki, ahol a mintaillesztés sikeres és változó értéket kap vissza.
Fordítási hibát okoz egy olyan változóra való hivatkozás melyre nem teljesül a mintaillesztés.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Jellemezd a rekordokat!

A

Nem módosítható adatokat becsomagoló osztályok.
Rögzített értékek halmaza.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Jellemezd a lezárt osztályokat és interfészeket!

A

Megszabhatják, mely osztályok vagy interfészek terjeszthetik ki őket. Olyan osztályhierarchiát is lehet deklarálni, mely nem nyitott a tetszőleges osztályok általi kiterjesztésre. sealed módosíthatóval lehet lezárni. permits záradék adja meg azon osztályok nevét melyek kiterjeszthetik.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Milyen megszorításokat szab a lezárt osztály az alosztályokra?

A

Ugyanahhoz a modulhoz kell a lezárt és az alosztály tartozzon. Ha névtelen a modul, akkor csomaghoz.
Közvetlenül kell kiterjeszteni a lezárt osztályokat.
A megengedettekhez meg kell adni azt leíró módosítót:
final: nem terjeszthető ki
sealed: csak megengedett alosztályok terjeszthetik ki
non-sealed: bárki kiterjesztheti

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Jellemezd a mintaillesztést switch-hez!

A

Mintás casekben a kiválasztást a mintaillesztés határozza meg egyenlőség vizsgálat helyett.
Az őrzött minta címke (guarded pattern label) p when e formájú, ahol p egy minta e pedig logikai kifejezés. Egy érték illeszkedi p when e őrzött minta címkére, ha illeszkedik a p mintára és e értéke igaz. Ha nem illeszkedik p-re akkor az e nem kerül kiértékelésre.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Sorold fel a főbb tervezési kérdéseket, amikor a case címkék lehetnek minták!

A

Kibővített típusellenőrzés
Switch kifejezés és utasítás teljessége
Null kezelése
Minta változó deklaráció hatásköre
Hibák

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Jellemezd a kibővített típusellenőrzést!

A

Kibővül a szelektor kifejezések típusa, lehet egész primitív (kivéve long) vagy pedig referencia típus.
Egy case p alakú minta címke dominál egy case p when e alakú minta címkét, azaz az eredeti egy őrzött verzióját.
Dominálhat konstans case címkét, pl case Integer i dominálja a case 42
Akkor dominál, ha az őrfeltétel nem kerül ellenőrzésre.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Jellemezd a switch kifejezések és utasítások teljességét!

A

Kimerítő egy switch, ha minden lehetséges érték kezelve van, azaz értéket eredményez.
static int coverage(Object o) {
—-return switch (o) {
——–case String s -> s.length();
—-};
}
Itt a lefedettség csak stringre irányul.
static int coverage(Object o) {
—-return switch (o) {
——–case String s -> s.length();
——–case Integer i -> i;
——–default -> 0;
—-};
}
Itt már minden le van kezelve.

17
Q

Jellemezd a minta változó deklarációk hatáskörét!

A

Minták által deklarált lokális változók.
Minta változó deklarációk hatásköre:
- beletartozik a switch címke bármely when záradéka
- case címkében a hatáskörébe a nyíl jobboldali része tartozik