Modules Flashcards

1
Q

Wat voor bestand moeten we aanmaken voor een module in java, en wat is de basis syntax voor die module?

A

module-info.java.
Deze file kan er zo uit zien:
module mymodule {}

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

Stel: dit is mijn folder structuur:
~~~
src
greeter
module-info.java
javafiles
A.java
B.java
~~~
Welk terminal commando kan ik runnen om greeter als module te compileren?

A
javac -d out --module-source-path src -m greeter
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Hoe zorgen we er in de definitie van een module voor dat een bepaald package beschikbaar is voor de desbetreffende module, en alle andere modules die deze module exporteren?

A

Met de volgende constructie:
~~~
module mymodule {
exports com.application.mypackage;
}
~~~

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

Stel, we hebben een package die we exporteren in een module:

module mymodule {
    exports com.application.mypackage;
}

we hebben ook com.application.mypackage.childpackage. Wordt deze ook geexporteerd?

A

Nee. com.application.mypackage.childpackage is alleen in mymodule beschikbaar, tenzij expliciet geexporteerd. Het feit dat childpackage een child is van mypackage is irrelevant.

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

Hoe halen we de de exports van een andere module binnen in onze module?

A

met requires othermodule;
We hebben dan beschikking over alle packages die other module exporteert.

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

Stel, we hebben twee modules:
~~~
module mymoduleOne {
imports myModuleTwo;
}
~~~
en
~~~
module mymoduleTwo {
imports mymoduleOne;
}
~~~
Hoe gaat de compiler hiermee om?

A

Dit gaat niet werken! Circular dependencies, in wat voor vorm dan ook, leveren compilation of runtime errors op.

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

Stel, we hebben twee modules:
~~~
module mymoduleOne {
imports myModuleTwo;
}
~~~
en
~~~
module mymoduleTwo {
exports com.mypackage;
}
~~~
en vervolgens run ik een compile commando:
javac -d out --module-source-path src -m mymoduleone.
welke modules compileert de compiler?

A

mymoduleone en mymoduletwo. Gezien beide modules nodig zijn is de compiler slim genoeg om beide te compileren.

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

Hoe runnen we een gecompileerde class?

A

Met bijvoorbeeld:
java -p compilationdir -m my.module.MainClass

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

Hoe stel ik alle packages binnen een module ter beschikking van andere modules?

A

door het open keyword voor je module definitie te zetten.

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

Hoe specificeer ik dat een package binnen mijn module alleen door 1 of meerdere specifieke modules kan worden geimporteerd?

A

met het to keyword. Bijvoorbeeld:
~~~
module mymoduleOne {
exports com.mypackage to mymoduleTwo, mymoduleThree;
}
~~~

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

Wat betekent ‘requires transitive’ in java modules?

A

transitive betekent dat we niet alleen alle packages verkrijgen van een geimporteerde module, maar ook alle packages van de modules die die module importeert.

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

Wat is in modules het verschil tussen open en opens ?

A

Het keyword open komt voor een module declaration en betekent dat de module al zijn packages automatisch in alle importerende modules mee importeert.
opens zetten we voor een package definitie. We kunnen zeggen opens {mijn.package} to {mijn.module} om zo aan te geven in welke andere module de package in ingeladen mag worden.

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

Wat is het verschil tussen opens en exports?

A

Het enige wat we voor het examen moeten weten is dat beide exporteren. In beide gevallen kunnen we opens to en exports to zeggen.
Het grote verschil zit hem in reflection; iets wat we voor het examen niet hoeven te weten?

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

Welke modules hoeven we niet in een module te definiëren omdat ze standaard in elke module ingeladen worden?

A
  • java.base
  • java.desktop
  • java.logging
  • java.sql
  • java.xml
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Hoe krijg ik in de console een overzicht van alle dependencies in een .jar bestand?

A

jdeps -s my.project.module.jar
of
jdeps -summary my.project.module.jar

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

Compileert deze code?:
~~~
module mymodule {
requires skin;
requires transitive skin;
}
~~~

A

nee, een package mag maar 1 keer required worden

17
Q

Stel, ik wil Java Swing in mijn applicatie. Tot welk package hoort dit? En moet ik dit in mijn module-info.java toevoegen om in andere modules te gebruiken of wordt dit standaard geimporteerd?

A

Java swing behoort tot java.desktop. Dit wordt niet standaard geimporteerd in de JDK en zal dus in je module gedefinieerd moeten worden.

18
Q

Wanneer we deze jar op onze module path hebben: commons-dbcp-0.9.jar
Wat is de automatische module naam voor deze jar?

A

commons.dbcp.
De stappen zijn als volgt:
* (.jar) bestandsextensie wordt weggehaald (resultaat: commons-dbcp-0.9)
* versie informatie wordt weggehald (resultaat: commons-dbcp)
* speciale karakters(als $, - en _) worden vervangen door een . (resultaat: commons.dbcp)
* dot sequences (dus meerdere punten achter elkaar) worden weggehaald (resultaat: commons.dbcp)
* punt aan het einde van een bestand wordt weggehaald. (resultaat: commons.dbcp)