Java Flow Control Interview Spørgsmål (+ svar)

Denne artikel er en del af en serie: • Interviewsspørgsmål om Java Collections

• Spørgsmål om Java Type System Interview

• Java-spørgsmål om samtidige samtaler (+ svar)

• Interviewspørgsmål om Java-klassestruktur og initialisering

• Java 8 interviewspørgsmål (+ svar)

• Hukommelsesstyring i Java Interview-spørgsmål (+ svar)

• Interviews med Java Generics (+ svar)

• Interviewspørgsmål med Java Flow Control (+ svar) (nuværende artikel) • Interviewspørgsmål med Java-undtagelser (+ svar)

• Spørgsmål om Java-annotationer (+ svar)

• Top forårssamarbejdsspørgsmål

1. Introduktion

Kontrolflowangivelser giver udviklere mulighed for at bruge beslutningstagning, looping og forgrening til betinget at ændre strømmen af ​​eksekvering af bestemte kodeblokke.

I denne artikel gennemgår vi nogle spørgsmål om flowkontrolinterview, der muligvis dukker op under et interview og, hvor det er relevant; Vi implementerer eksempler for bedre at forstå deres svar.

2. Spørgsmål

Q1. Beskriv hvis så og hvis-så-ellers udsagn. Hvilke typer udtryk kan bruges som betingelser?

Begge udsagn fortæller vores program kun at udføre koden inde i dem, hvis en bestemt tilstand vurderes til rigtigt. Men den hvis-så-ellers erklæring giver en sekundær eksekveringsvej, hvis if-klausulen evalueres til falsk:

hvis (alder> = 21) {// ...} ellers {// ...}

I modsætning til andre programmeringssprog understøtter Java kun boolsk udtryk som betingelser. Hvis vi prøver at bruge en anden type udtryk, får vi en kompileringsfejl.

Q2. Beskriv kontakt udmelding. Hvilke objekttyper kan bruges i kontakt klausul?

Switch tillader valg af flere eksekveringsstier baseret på en variabels værdi.

Hver sti er mærket med sag eller Standard, det kontakt erklæring vurderer hver sag udtryk for et match og udfører alle udsagn, der følger den matchende etiket, indtil en pause erklæring findes. Hvis den ikke kan finde en match, Standard blok udføres i stedet:

switch (yearsOfJavaExperience) {case 0: System.out.println ("Student"); pause; sag 1: System.out.println ("Junior"); pause; tilfælde 2: System.out.println ("Middle"); pause; standard: System.out.println ("Senior"); }

Vi kan bruge byte, kort, char, int, deres indpakkede versioner, enums og Snors som kontakt værdier.

Q3. Hvad sker der, når vi glemmer at sætte en pause erklæring i en sag klausul om en kontakt?

Det kontakt udsagn falder-gennem. Dette betyder, at det vil fortsætte udførelsen af ​​alle sag etiketter indtil hvis finder a pause udsagn, selvom disse etiketter ikke matcher udtrykkets værdi.

Her er et eksempel for at demonstrere dette:

int operation = 2; int antal = 10; switch (operation) {case 1: number = number + 10; pause; tilfælde 2: tal = tal - 4; sag 3: tal = antal / 3; tilfælde 4: tal = antal * 10; pause; }

Efter at have kørt koden, nummer holder værdien 20 i stedet for 6. Dette kan være nyttigt i situationer, hvor vi vil knytte den samme handling til flere sager.

Q4. Hvornår foretrækkes det at bruge en Sheks Over et jegf-Then-Else Erklæring og omvendt?

EN kontakt sætning er bedre egnet, når man tester en enkelt variabel mod mange enkeltværdier, eller når flere værdier udfører den samme kode:

switch (måned) {sag 1: sag 3: sag 5: sag 7: sag 8: sag 10: sag 12: dage = 31; pause; tilfælde 2: dage = 28; pause; standard: dage = 30; }

En hvis-så-ellers erklæring foretrækkes, når vi skal kontrollere værdiområder eller flere betingelser:

hvis (aPassword == null || aPassword.isEmpty ()) {// tom adgangskode} ellers hvis (aPassword.length () <8 || aPassword.equals ("12345678")) {// svag adgangskode} andet {/ / god adgangskode}

Q5. Hvilke typer sløjfer understøtter Java?

Java tilbyder tre forskellige typer sløjfer: til, mensog gøre imens.

EN til loop giver en måde at gentage over en række værdier. Det er mest nyttigt, når vi på forhånd ved, hvor mange gange en opgave skal gentages:

for (int i = 0; i <10; i ++) {// ...}

EN mens loop kan udføre en sæt udsagn, mens en bestemt tilstand er rigtigt:

mens (iterator.hasNext ()) {// ...}

EN gøre imens er en variation af en mens erklæring, hvor evalueringen af boolsk udtryk er i bunden af ​​sløjfen. Dette garanterer, at koden udføres mindst en gang:

gør {// ...} mens (valg! = -1);

Q6. Hvad er en forbedret til løkke?

Er en anden syntaks af til erklæring designet til at gentage alle elementerne i en samling, matrix, enum eller ethvert objekt, der implementerer Iterabel grænseflade:

for (String aString: arrayOfStrings) {// ...}

Q7. Hvordan kan du afslutte forventet fra en løkke?

Bruger pause erklæring, kan vi straks afslutte udførelsen af ​​en sløjfe:

for (int i = 0;; i ++) {hvis (i> 10) {pause; }}

Q8. Hvad er forskellen mellem en umærket og en mærket pause udmelding?

En umærket pause udsagn afslutter det inderste kontakt, til, mens eller gøre imens erklæring, hvorimod en mærket pause afslutter udførelsen af ​​en ydre erklæring.

Lad os oprette et eksempel for at demonstrere dette:

int [] [] tabel = {{1, 2, 3}, {25, 37, 49}, {55, 68, 93}}; boolsk fundet = falsk; int loopCycles = 0; ydre: for (int [] rækker: tabel) {for (int række: rækker) {loopCycles ++; hvis (række == 37) {fundet = sand; bryde ydre; }}}

Når tallet 37 findes, mærkes det pause udsagn afslutter det yderste til loop, og der udføres ikke flere cyklusser. Dermed, loopCycles slutter med værdien 5.

Imidlertid umærket pause slutter kun den inderste erklæring og returnerer strømmen af ​​kontrol til den yderste til der fortsætter løkken til den næste række i bord variabel, hvilket gør loopCycles slut med en værdi på 8.

Q9. Hvad er forskellen mellem en umærket og en mærket Blive ved udmelding?

En umærket Blive ved udsagn springer over til slutningen af ​​den aktuelle iteration inderst til, mens, eller gøre imens loop, hvorimod en mærket Blive ved springer til en ydre sløjfe markeret med den givne etiket.

Her er et eksempel, der demonstrerer dette:

int [] [] tabel = {{1, 15, 3}, {25, 15, 49}, {15, 68, 93}}; int loopCycles = 0; ydre: for (int [] rækker: tabel) {for (int række: rækker) {loopCycles ++; hvis (række == 15) {fortsæt ydre; }}}

Begrundelsen er den samme som i det foregående spørgsmål. Mærket Blive ved udsagn afslutter det yderste til løkke.

Dermed, loopCycles ender med at holde værdien 5, hvorimod den umærkede version kun afslutter den inderste sætning, hvilket gør loopCycles slut med en værdi på 9.

Q10. Beskriv udførelsesstrømmen inde i prøv-fang-endelig konstruere.

Når et program er kommet ind i prøve og en undtagelse kastes inde i den, udførelsen af prøve blokken afbrydes, og strømmen af ​​kontrol fortsætter med en fangst blok, der kan håndtere undtagelsen, der smides.

Hvis der ikke findes en sådan blok, stopper den aktuelle metodeudførelse, og undtagelsen kastes til den tidligere metode på opkaldsstakken. Alternativt, hvis ingen undtagelse forekommer, alle fangst blokke ignoreres, og programudførelse fortsætter normalt.

EN langt om længe Blok udføres altid, uanset om en undtagelse blev kastet inde i kroppen af prøve blok.

Q11. I hvilke situationer langt om længe blok muligvis ikke udføres?

Når JVM afsluttes under udførelse af prøve eller fangst blokke, for eksempel ved at ringe System.exit (), eller når den udførende tråd afbrydes eller dræbes, så udføres den endelige blok ikke.

Q12. Hvad er resultatet af udførelse af følgende kode?

offentlig statisk int-tildeling () {int-nummer = 1; prøv {nummer = 3; if (true) {kast ny undtagelse ("Testundtagelse"); } antal = 2; } fange (Undtagelse ex) {returnummer; } til sidst {nummer = 4; } returneringsnummer; } System.out.println (opgave ());

Koden udsender tallet 3. Selvom langt om længe blok udføres altid, dette sker først efter prøve blokere udgange.

I eksemplet er Vend tilbage erklæring udføres før prøve-fangst blok ender. Således opgaven til nummer i langt om længe blokken har ingen effekt, da variablen allerede returneres til opkaldskoden for aunderskrift metode.

Q13. I hvilke situationer prøv endelig blok kan bruges, selv når undtagelser måske ikke smides?

Denne blok er nyttig, når vi vil sikre, at vi ikke ved et uheld omgår oprydning af ressourcer, der bruges i koden, ved at støde på en pause, Blive ved eller Vend tilbage udmelding:

HeavyProcess heavyProcess = ny HeavyProcess (); prøv {// ... return heavyProcess.heavyTask (); } endelig {heavyProcess.doCleanUp (); }

Vi kan også blive udsat for situationer, hvor vi ikke lokalt kan håndtere den undtagelse, der kastes, eller vi vil have, at den nuværende metode stadig kaster undtagelsen, mens vi tillader os at frigøre ressourcer:

offentlig ugyldighed doDangerousTask (opgaveopgave) kaster ComplicatedException {prøv {// ... task.gatherResources (); if (task.isComplicated ()) {smid nyt ComplicatedException ("For svært"); } // ...} endelig {task.freeResources (); }}

Q14. Hvordan gør det? prøv med ressourcer arbejde?

Det prøv med ressourcer erklæring erklærer og initialiserer en eller flere ressourcer, før den udføres prøve blokere og lukke dem automatisk i slutningen af ​​erklæringen, uanset om blokken blev udført normalt eller brat. Ethvert objekt, der implementeres Kan lukkes automatisk eller Kan lukkes grænseflader kan bruges som en ressource:

prøv (StringWriter-forfatter = ny StringWriter ()) {writer.write ("Hej verden!"); }

3. Konklusion

I denne artikel dækkede vi nogle af de hyppigst stillede spørgsmål, der dukkede op i tekniske interviews for Java-udviklere, vedrørende kontrolflowangivelser. Dette bør kun behandles som starten på yderligere forskning og ikke som en udtømmende liste.

Held og lykke i dit interview.

Næste » Spørgsmål om Java-undtagelser Interview (+ svar) « Tidligere interviewspørgsmål med Java Generics (+ svar)

$config[zx-auto] not found$config[zx-overlay] not found