Dypdykk i kildekoden til Java
Hvordan få tak i kildekoden til Java
(i alle fall den delen som er skrevet i Java)
Hvis du har installert Java SDK har du allerede kildekoden!
Filen src.zip i mappa hvor Java er installert. Så hvordan finner vi den?
Hvordan få tak i kildekoden:
unzip $(/usr/libexec/java_home)/src.zip -d ~/Desktop/JavaSource
cd /snacks/encap/jdk-1.8.0.*/opt/jdk/
unzip src.zip -d ~/JavaSource
Mac
IFI-Linux
Gå til "C:/Program Files/Java/" (eller det tilsvarende)
Velg mappa som begynner med "jdk"
Pakk ut "src.zip" et passende sted
Windows
System.out.println
JavaSource/java/lang/System.java
Hvis JavaSource er mappen der du pakket ut kildekoden:
public final class System {
/* register the natives via the static initializer.
* ...
*/
private static native void registerNatives();
static {
registerNatives();
}
...
native og static-blokker
native betyr at denne metoden er ikke skrevet i Java (og er sannsynligvis forskjellig på Windows og Linux)
static-blokker kjøres første gang en klasse brukes
public void addName(String name) {
synchronized(this) {
lastName = name;
nameCount++;
}
nameList.add(name);
}
synchronized-blokker
Objektet man vil ha låsen til. (this her tilsvarer synchronized på ikke-statiske metoder)
- Gjør det mulig å beskytte bare en del av en metode.
- Gjør det mulig å beskytte forskjellige ting i samme klasse.
- Men fortsatt bedre å bruke klasser fra java.util.concurrent
public String readOption(String prompt, String... options) {
while (true) {
System.out.print(prompt + ": ");
String input = new Scanner(System.in).nextLine();
for (String option : options) {
if (option.equals(input)) return input;
}
}
}
varargs
- Gjør det mulig å sende et valgfritt antall argumenter, eller en array.
- Blir konvertert til en array.
String[] directions = new String[] {"N", "S", "E", "W"};
readOption("Direction", directions);
readOption("Continue(Y/N)", "yes", "y", "no", "n");
public static void main(String... args) { // !!!
ArrayList
Generics + Arrays
Iterator
LinkedList
ConcurrentLinkedQueue
Node
Arrays
sortering
HashMap
jdk.internal.misc.Unsafe
UNSAFE
Unsafe
Unsafe tilbyr funksjonalitet til kompilatoren som vi ikke bør bruke i vår egen "vanlige" kode, som å behandle Java-referanser som "rå" C-pekere.
Dypdykk i kildekoden til Java
By Erik Vesteraas
Dypdykk i kildekoden til Java
- 1,456