# Woche 3 ## Übung * Gradle Projekt anlegen * Was ist der Gradle Wrapper? * Was macht der gradle daemon? * Wofür ist der build Ordner? * Kleines Beispiel für FindBugs ```java String foo = "foo"; foo.replace("f", "z"); System.out.println(foo); ``` * Was ist der erwartete Output? * Warum wird foo nicht geändert? (Stichwort: Strings sind immutable!) * Unterschied zu einer Liste (`list.add(...)` vs `foo.replace()`) * Was sind Gradle Dependencies? * Joda Time eingebunden `compile 'joda-time:joda-time:2.0'` * Codebeispiel als eigene Funktion, welches das Datum als String ausgibt ```java // System.out.println(getDate("dd-MM-YYYY")); public static String getDate(String pattern) { DateTime date = new DateTime(); return date.toString(pattern); } ``` * JavaDocs für getDate() generieren lassen * einmal in der IDE * einmal direkt mit Gradle * generierte index.html im Browser öffnen und anschauen * Was sieht man? (Standard: Nur public / protected Funktionen) * Warum genügt es in der Regel nur die public-Methoden zu sehen? (Stichwort: API, Menschen-lesbar und für andere Entwickler gedacht) * Wofür steht API / Was ist eine API? ## Häufige Fehler im letzten Wochentest Wieviele Instanzmethoden kann man auf einer Instanz der folgenden Klasse aufrufen? ```java public class Leer {} ``` Welche Fehlerpattern zeigt FindBugs an, wenn man folgenden Code analysieren lässt? ```java public static void print(int[] a) { String result = new String(); for (int i = 0; i < a.length; i++) { result += a[i]; } System.out.println(result); } ``` Der Wert von Variablen zu einem Zeitpunkt nennt man ...?