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,364