# 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 ...?