Vertiefung der Programmierung

Unterschiede JOE und Java

Motivation

  • Java Online Editor (JOE) soll leichten Einstieg in Programmierung ermöglichen
  • Sprache ist an Java angelehnt
  • Einiges aus Java soll bewusst nicht 1:1 übernommen werden, z.B.
    • "Boilerplate Code": siehe Beispiel 🫨
public class Main {

    public static void main(String[] args) {
        System.out.println("Hello World");
    }   
}

Java

println("Hello World");

JOE

vs.

Wechsel von JOE zu Java

Boilerplate Code

Keine Shortcuts
bei Ausgaben

public class Main {

    public static void main(String[] args) {
        System.out.println("Hello World");
    }   
}

Alles braucht eine Klasse!

Es wird immer eine main()
benötigt

Wir brauchen Imports

import java.util.List;
import java.util.ArrayList;

public class Main {

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
    }   
}

Alle Klassen außerhalb des eigenen Packages müssen über import eingebunden werden. 

Je Klasse eine Datei

public class Point {
	private double x;
    private double y;
    
    public Point(double x, double y) {
      this.x = x;
      this.y = y;
    }
}
import java.util.List;
import java.util.ArrayList;

public class Main {

    public static void main(String[] args) {
        List<Point> points = new ArrayList<>();
    }   
}

Main.java

Point.java

Jede Klasse muss in eine eigene Datei. Es gibt nur wenige Ausnahmen (u.a. eingebettete Klassen, anonyme Klassen).

Ausgaben (auf der Konsole)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Gib deinen Namen ein: ");
        String name = scanner.nextLine();

        System.out.print("Gib dein Alter ein: ");
        int alter = scanner.nextInt();

        System.out.println("Hallo " + name + ", du bist " + alter + " Jahre alt.");

        scanner.close();
    }
}

Einlesen von der Kommandozeile muss mittels der Klassen Scanner und System.in durchgeführt werden.

Modifizierer static

  • static bei Variablen
    • Objekte teilen sich Variable (und Werte!)

 

 

  • static bei Methoden
    • z.B. für Methoden ohne Objekt(Instanz)

static Methoden / Variablen gehören zu Klassen und nicht zum (individuellen) Objekt

class MathUtil {
    static int add(int a, int b) {
        return a + b;
    }
}

// von außerhalb aufrufen

MathUtil.add(2, 3)
class Counter {
	// ...
    static float scale = 0.2;
    // ...
}

// scale-Faktor für alle 
// Objekt(instanzen) gleich

toString() überschreiben

  • JOE ermöglicht uns immer relativ einfach Ausgaben wie:

In Java wird für die Ausgabe von Objekten mit System.out.println(obj);

immer eine überladene toString-Methode benötigt.

   @Override
   public String toString() {
        return (this.name + ": " + 
			this.number + " \n");
   }
println(contact)

/* hier wird alles irgendwie 
 * (wenn auch nicht immer optimal)
 * ausgegeben 
 */

Java

JOE

  • Java: toString-Methode überladen:

⌨️ Let's go!