Exceptions Flashcards

1
Q

is een catch block verplicht?

A

Ja, met een paar uitzonderingen:
* tenzij een finally is gedefinieerd
* tenzij er een try-with-resources aan vooraf gaat

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

Compileert onze code wanneer we in een try block
throw new IOException(); zetten?
Zo ja, wat zijn de voorwaarden?

A

Het kan. De voorwaarden:
1) Er mag na die regel geen nieuwe code in dat block worden gerund. Niet alleen is die code unreachable, het zorgt ook voor een compilation error
2) Een gepaste Exception moet gevangen worden in het catch block

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

Mogen we een try - catch block zonder brackets schrijven? (net als een if statement)

A

nee, brackets in een try - catch/finally zijn altijd verplicht! (in tegenstelling tot if/else statements

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

Kunnen we meerder catch statements hebben? Wat zijn de voorwaarden?

A

Dit mag. De voornaamste voorwaarde is de hyrarchie.
Begin met de specifiekste Exception en eindig met de meest generieke.

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

Wordt een finally block altijd uitgevoerd?

A

Ja.

De enige uitzondering hierop is wanneer System.exit(0) wordt uitgevoerd. Dan kapt de applicatie meteen en wordt niets hierna uitgevoerd.

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

Hoe ziet een multi catch block eruit? Waar moeten we op letten wanneer we dit schrijven?

A

catch(MyException | OtherException e) { ... }
Let erop dat we de parameter naam maar 1 keer definiëren.
catch(MyException m | OtherException e) { ... } is dus invalide code!

Let er verder op dat de Exceptions die je definieert geen parent / child relatie van elkaar mogen hebben! Ze moeten disjointed zijn.

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

Wat voor exception wordt gegooid wanneer een method wordt aangetrapt met parameters die niet voldoen aan de verwachte parameters

A

IllegalArgumentException

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

Wat voor type argumenten moet ik in mijn try-with-resources hebben?

A

Dit moeten AutoCloseable objecten zijn. Bijvoorbeeld een FileInputStream of FileOutputStream. Simpelweg een String of int in een try-with-resources levert compilation errors op.

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

Kan ik in try-with-resources naar bestaande variabelen refereren?

A

Een variabele in t-w-r is alleen in local scope beschikbaar en moet dus tussen de haakjes geinstantieerd worden. Een uitzondering hierop is wanneer een bestaande variabele final of effectively final is.
Effectively final betekent dat op geen enkel moment (ook niet na het try block) de variabele gewijzigd mag worden.

Goed:
~~~
try (var myFile = new FileReader(“dummy.txt”)){…
~~~
Goed:
~~~
final var myFile = new FileReader(“dummy.txt”);
try (myFile){…
~~~
Goed:
~~~
var myFile = new FileReader(“dummy.txt”);
`try (myFile){…
~~~
Fout:
~~~
FileReader myFile;
try (myFile = new FileReader(“dummy.txt”)){…
~~~
Fout:
~~~
var myFile = new FileReader(“dummy.txt”);
try (myFile){…}
myFile = new FileReader(“other.txt”);
~~~

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

Wat betekent AutoCloseable?

A

Een AutoCloseable kan als parameter in een try-with-resources blok worden gebruikt, en wordt gesloten aan het einde van dat blok. In dat geval hoef je geen .close() method aan te trappen; dit gebeurt automatisch.

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

Wat is het verschil tussen checked en unchecked exceptions?

A

Een checked exception gebeurt op compile time. Handel je een method die een checked exception gooit niet goed af dan compileert je code niet.

Een unchecked exception gooit pas een error in runtime en java geeft je de kans om je code te compileren.

checked exceptions moeten afgehandeld worden. Unchecked exceptions mogen afgehandeld worden.

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

Wat voor soort Exception is de IllegalArgumentException (checked of unchecked)

A

unchecked (want extent de RuntimeException)

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

Wat voor soort Exception is de IOException (checked of unchecked)

A

checked
(moet dus compile time afgehandeld worden)

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

Wat voor soort Exception is de FileNotFoundException (checked of unchecked)

A

checked
(moet dus compile time afgehandeld worden)

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

Noem 4 Runtime Exceptions

A

ArithmeticException, ArrayIndexOutOfBoundsException, ClassCastException, IllegalArgumentException, IllegalStateException, NullPointerException, NumberFormatException

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

Wanneer zouden we een ArithmeticException kunnen krijgen?

A

Als we bijvoorbeeld iets door 0 proberen te delen.

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

Wat is het verschil tussen een Error en een Exception?

A

Een Exception kunnen we ‘catchen’. Een Error niet.

Errors komen doorgaans alleen voor wanneer je machine te weinig geheugen heeft. Een infinite loop kan hiervan de oorzaak zijn. Op dat moment is er niets wat je programma kan doen; het crasht simpelweg.

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

Wanneer gebruiken we throw en throws in exception handling?

A

Throws gebruiken we in de method signature.

Throw gebruiken we in een method of een try/catch block.

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

Stel, we hebben een class:
~~~
class Parent {
void doThing() throws IOException { … }
}
~~~
mogen we in een child class van Parent de doThing method als volgt overriden?
void doThing() throws Exception

A

Nee.
De overriden Exception dient net zo specifiek of specifieker te zijn dan zijn parent.

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

Stel, we hebben een class:
~~~
class Parent {
void doThing() throws IOException { … }
}
~~~
mogen we in een child class van Parent de doThing method als volgt overriden?
void doThing() throws RuntimeException

A

Nee.
De overriden Exception dient net zo specifiek of specifieker te zijn dan zijn parent, en ze dienen dus gerelateerd te zijn aan elkaar. IOException en RuntimeException hebben geen relatie tot elkaar.

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

Hoe herkennen we een checked exception

A

Aan het sleutelwoord throws. Een method signature kan bijvoorbeeld throws IOException bevatten. Dit betekent dat wanneer die method wordt afgevuurd, dat er ergens een throw new IOException(); moet staan.

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

Compileert de volgende code? waarom wel / niet?
~~~
public void bad() {
try {
eatCarrot();
} catch (NoMoreCarrotsException e) {
System.out.print(“sad rabbit”);
}
}
private void eatCarrot() {}
~~~

A

Dit compileert niet. Het probleem is dat we iets proberen te catchen, terwijl eatCarrot geen throws bevat. Daarom is dit unreachable code en compileert het niet.

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

Noem de 3 manieren om een Exception te printen.

A
  1. Simpelweg het exception object zelf
    print java.lang.RuntimeException: {{ message }}
  2. e.getMessage();
    print {{ message }}
  3. e.printStackTrace();
    print
    ~~~
    java.lang.RuntimeException: {{ message }}
    at MyClass.method(MyClass.java:15)
    at MyClass.main(MyClass.java:7)
    ~~~
24
Q

Wanneer krijgen we een ArithmeticException?

A

Wanneer we iets door 0 proberen te delen bijvoorbeeld

25
Q

Wanneer krijgen we een ArrayIndexOutOfBoundsException?

A

Wanneer we een index van een array willen benaderen die niet bestaat.

26
Q

Wanneer krijgen we een ClassCastException?

A

Wanneer we een variabele naar een type casten wat niet bestaat.

bijvoorbeeld:
~~~
String type = “moose”;
Integer number = (Integer) type;
~~~

27
Q

Wanneer krijgen we een NullPointerException?

A

Wanneer een object null als waarde heeft, en we voeren een method uit op dit object.

28
Q

Wanneer krijgen we een IllegalArgumentException?

A

Wanneer we een parameter value (argument) mee proberen te geven die niet overeen komt met de waarde die wordt verwacht. Voorbeeld:

public void setNumberEggs(int numberEggs) {
    if (numberEggs < 0)
        throw new IllegalArgumentException("# eggs must not be negative");
    this.numberEggs = numberEggs;
}
29
Q

Wanneer krijgen we een NumberFormatException?

A

NumberFormatException is vergelijkbaar met IllegalArgumentException. Alleen specifiek voor nummers. Hij wordt gegooid wanneer een parseInt bijvoorbeeld een String meekrijgt:
Integer.parseInt("abc");

30
Q

Noem de vijf Checked Exception classes die we voor het examen moeten weten

A
  • IOException
  • FileNotFoundException (subclass van IOException)
  • NotSerializableException (subclass van IOException)
  • ParseException
  • SQLException
31
Q

Betekent een ‘gethrowde’ exception dat het runnen van je java applicatie stopt?

A

Niet persé. Een gethrowde exception kan met een try/catch afgevangen worden. Dan kun je gedrag definiëren en vanaf daar verder gaan.

32
Q

Beschouw deze code. Wat returnt het?
~~~
int fooMethod() {
try {
return 1
} finally {
return 2
}
}
~~~

A

return value is 2. Onthoud dat finally altijd als laatste runt; en ook iets returnt voordat het try block dit kan doen.

33
Q

Hoe ziet de syntax voor meerdere try-with-resources eruit?

A
try (
    var in = new FileInputStream("in.txt");
    var out = new FileOutputStream("out.txt")
)
  • variables worden gescheiden met ;. (niet , dus)
  • na de laatste variable is de ; optioneel
34
Q

Stel, we hebben deze code:
~~~
try (
var in = new MyFileClass(1);
var out = new MyFileClass(2)
) { }
~~~
de close in MyFileClass logt de parameters die mee worden gegeven (dus 1 en 2). In welke volgorde geubeurt dit?

A

Omgekeerd. Eerst wordt 2 gelogd en dan 1. Denk eraan dat de close() method van alle autoCloseables in een try block in reverse order worden afgetrapt

35
Q

Leg kort uit hoe de DecimalFormat API werkt.
* Wat is / zijn de mogelijke input(s)?
* Hoe formatten we de nummers?

A
  • Wanneer we var myDf = new DecimalFormat(...) zeggen verwachten we een String als input.
  • In die String kan bijvoorbeeld dit geplaatst worden: $#,###,###.00.
  • Elke # betekent dat het wordt vervangen door het getal, of niets als er geen waarde voor is.
  • Elke 0 betekent dat het wordt vervangen door het getal, of 0 als er geen waarde voor is.
  • myDf.format(1234) print zo $1,124.00 uit.
36
Q

Stel, we hebben een localdate object.
* hoe krijgen we de uitgeschreven dag?
* hoe krijgen we de uitgeschreven maand?
* hoe krijgen we het jaar?
* hoe krijgen we de dag van het jaar terug?

A
  • .getDayOfWeek() // THURSDAY
  • .getMonth() // OCTOBER
  • .getYear() // 2024
  • .getDayOfYear() // 293
37
Q

Waarom compileert deze code niet?
~~~
LocalDate date = LocalDate.of(2022, Month.OCTOBER, 20);
date.format(DateTimeFormatter.ISO_LOCAL_TIME)
~~~

A

date.format verwacht een date object, geen time object

38
Q

Waarom compileert dit niet?
~~~
LocalTime time = LocalTime.of(11, 12, 34);
time.format(DateTimeFormatter.ISO_LOCAL_DATE);
~~~

A

time.format verwacht een time object, geen date object

39
Q

Hoe maken we een eigen format voor een datum / tijd?

A

met DateTimeFormatter.ofPattern. Bijvoorbeeld:
~~~
LocalDateTime dt = LocalDateTime.of(date, time);
var f = DateTimeFormatter.ofPattern(“MMMM dd, yyyy ‘at’ hh:mm”);
System.out.println(dt.format(f));
~~~

40
Q

Noem de symbolen om een datetime te formatten, en in welke api’s zijn ze beschikbaar?:
* jaar
* maand
* dag
* uur
* minuut
* seconde
* am/pm
* tijdzone naam
* tijdzone afwijking

A
  • jaar: y (LocalDate, LocalDateTime en ZonedDateTime)
  • maand: M (LocalDate, LocalDateTime en ZonedDateTime)
  • dag: d (LocalDate, LocalDateTime en ZonedDateTime)
  • uur: h (LocalTime, LocalDateTime en ZonedDateTime)
  • minuut: m (LocalTime, LocalDateTime en ZonedDateTime)
  • seconde: S (LocalTime, LocalDateTime en ZonedDateTime)
  • am/pm: a (LocalTime, LocalDateTime en ZonedDateTime)
  • tijdzone naam: z (alleen in ZonedDateTime)
  • tijdzone afwijking: Z (alleen in ZonedDateTime)
41
Q

Kan ik in DateTimeFormatter.ofPattern ook mijn eigen tekst opgeven?

A

Ja, mits het met single quotes is weergegeven:
DateTimeFormatter.ofPattern("'Het is ' hh:mm");

Mocht je een quote in je pattern hebben, gebruik dan een dubbele quote:
DateTimeFormatter.ofPattern("'Het is ' hh:mm 'uur ''s nachts'");

42
Q

Compileert dit?
~~~
DateTimeFormatter.ofPattern(“‘Time is: hh:mm: “);
~~~

A

Nee. Een single quote wordt niet gesloten.

43
Q

Compileert dit?
~~~
DateTimeFormatter.ofPattern(“The time is hh:mm”);
~~~

A

Nee, custom tekst moet tussen single quotes komen te staan.

44
Q

Hoe verkrijgen we de locale van de huidige machine?

A

Locale.getDefault();
dit geeft in ons geval nl_NL terug

45
Q

Wat zijn de regels voor een valide Locale string?

A
  • patroon is language_LAND. Bijvoorbeeld en_US.
  • language moet lowercase zijn
  • land moet uppercase zijn
  • language is verplicht
  • land is optioneel
  • Als het land is ingevuld, moeten de 2 gescheiden zijn door een underscore
46
Q

Wat zijn de drie manieren om een locale object met een fixed land en/of taal mee te geven?

A
Locale locale1 = Locale.GERMANY;
Locale locale2 = new Locale("de", "DE");
Locale locale3 = new Locale.Builder()
    .setLanguage("de")
    .setRegion("DE")
    .build();
47
Q

Hoe stellen we een nieuwe default locale in?

A

Locale.setDefault(new Locale("fr"));

48
Q

Stel, ik heb een int:
int myInt = 1000000;

Hoe print ik dit in het format van een Locale naar wens uit?

A
var us = NumberFormat.getInstance(Locale.US);
System.out.println(us.format(myInt)); // 1,000,000

of
~~~
var de = NumberFormat.getInstance(Locale.GERMAN);
System.out.println(de.format(myInt)); // 1.000.000
~~~

49
Q

Hoe converteer ik een int naar de juiste currency van een Locale die ik definieer?

A

met .getCurrencyInstance().
bijvoorbeeld:
~~~
double myInt = 1000000.15;
System.out.println(NumberFormat
.getCurrencyInstance(Locale.US)
.format(myInt));
System.out.println(NumberFormat
.getCurrencyInstance(Locale.GERMANY)
.format(myInt));
~~~

50
Q

Hoe converteer ik een int naar de juiste procent weergave van een Locale die ik definieer?

A

met .getPercentInstance().
bijvoorbeeld:
~~~
double myInt = 0.15;
System.out.println(NumberFormat
.getPercentInstance(Locale.US)
.format(myInt));
System.out.println(NumberFormat
.getPercentInstance(Locale.GERMANY)
.format(myInt));
~~~

51
Q

Hoe maak ik van deze int:
int myNumber = 7_323_800
een uitgeschreven nummer?

A

met getCompactNumberInstance().
Bijv:
~~~
NumberFormat
.getCompactNumberInstance(
Locale.getDefault(),
Style.SHORT)
.format(myNumber); // 7M
~~~
Short hoeft niet gedefinieerd te worden. Style.SHORT is de default waarde. We kunnen million ook uitschrijven:
~~~
NumberFormat
.getCompactNumberInstance(
Locale.getDefault(),
Style.LONG)
.format(myNumber); // 7 million
~~~

52
Q

Wat voor verschillende eenheden worden met getCompactNumberInstance uitgeschreven? En wat is de korte en lange equivalent?

A
  • duizenden: thousand (lang) en K (kort)
  • miljoenen: milion (lang) en M (kort)
  • biljoenen: billion (lang) en B (kort)
  • triljoenen: trillion (lang) en T (kort)
53
Q

Wat is een resource bundle? Hoe moeten we een resource bundle noemen en hoe halen we deze op?

A

Een resource bundle is geschikt voor vertaal bestanden. Het bestand kunnen we bijvoorbeeld zo noemen: App_en.properties. En kan deze regel hebben:
hw=Hello World

In onze class maken we een resource bundle aan:
var rb = ResourceBundle.getBundle("App", locale);
en van deze bundle kunnen we vervolgens hw printen:
System.out.println(rb.getString("hw");

54
Q

Hoe itereren we over alle strings van een resource bundle?

A

Bijvoorbeeld als volgt:
~~~
ResourceBundle rb = ResourceBundle
.getBundle(“App”, locale);
rb.keySet().stream()
.map(k -> k + “: “ + rb.getString(k))
.forEach(System.out::println);
~~~

55
Q

Compileert dit? Zo nee wat is er mis mee?
~~~
LocalDate date = LocalDate.parse(
“2022-04-30”,
DateTimeFormatter.ISO_LOCAL_DATE_TIME);
~~~

A

Dit compileert niet omdat ISO_LOCAL_DATE_TIME niet meegegeven kan worden aan een LocalDate object.

56
Q

Hoe ziet een goede locale builder syntax eruit?

A
new Locale.Builder()
    .setLanguage("nl")
    .setRegion("NL").build();
  • setLanguage is verplicht
  • setRegion is optioneel
  • .build is vereist!
57
Q
public static int doIt() throws Exception {
    throw new Exception("aaa");
}

compileert dit?

A

Ja. Hoewel de method een int returnt, hoeft het deze int niet te returnen als het in plaats daarvan een exception goed afhandelt.