====== LernJ vs. Java: Unterschiede ======
Die Programmiersprache auf dieser Website ist eine Teilmenge von Java, die in folgenden kleinen Bereichen etwas vereinfacht wurde:
==== 1. System.out.print -> print ====
Statt ''System.out.print'' und ''System.out.println'' kann auch einfach ''print'' bzw. ''println'' geschrieben werden. Es ist zudem möglich, als zweiten Parameter eine Textfarbe anzugeben, z.B. ''println("Roter Text", Color.red)''.
==== 2. Hauptprogramm ====
In Java befindet sich das "Hauptprogramm" einer Anwendung (also die Anweisungen, die zu Beginn gestartet werden) in einer statischen main-Methode mit der Signatur ''public static void main(String[] args)''. Das kürzeste Hello-World-Programm sieht in Java also so aus:
class Beispiel {
public static void main(String[] args){
// Hier beginnen die Anweisungen des Hauptprogramms:
System.out.println("Hallo Welt!");
}
}
In LearnJ ist dies ebenso möglich. Darüber hinaus fasst LearnJ auch alle Anweisungen, die außerhalb einer Klassendefinition stehen, als Hauptprogramm auf. Dadurch lassen sich auf sehr einfache Weise kurze Programmbeispiele schreiben. Das obige Hello-World-Programm sieht in LearnJ also so aus:
String s1 = "Test";
String s2 = "Tes";
s2 = s2 + "t";
if(s1 == s2){
System.out.println("Die Strings sind gleich!");
} else {
System.out.println("Die Strings sind ungleich!");
}
Will man in Java zwei Zeichenketten vergleichen, so muss man die ''equals''-Methode verwenden, also ''if(s1.equals(s2)){...''. \\ \\
Die Programmiersprache dieser Website unterscheidet sich von Java dahingehend, dass der Vergleichsoperator ''=='' bei Strings nicht die Gleichheit der Objekte prüft, sondern einen Zeichenkettenvergleich durchführt. Das obige Programm gibt also "Die Strings sind gleich!" aus. Natürlich gibt es in der Programmiersprache dieser Seite auch die Methode ''equals''. Sie liefert exakt das selbe Resultat wie der Vergleichsoperator ''==''.
==== 4. Keine Pflicht zur Erstellung eines Konstruktors ====
Erbt eine Klasse von einer anderen Klasse, die keinen parameterlosen Konstruktor besitzt, so muss sie gemäß Java Specification einen eigenen Konstruktor haben. In der Online-IDE gibt es diese Pflicht nicht, so dass folgendes geht:
new MyRectangle(10, 10, 100, 100); // direkter Zugriff auf den Konstruktor der Oberklasse Rectangle möglich
class MyRectangle extends Rectangle {
}
==== 5. Standard Library ====
Derzeit sind Nachbildungen folgender Klassen aus der Java Standard Library vorhanden:
* die Klasse ''Math'',
* die Klasse ''String'',
* eine vereinfachte Version der Klasse ''Timer'' und des Interfaces ''Runnable'',
* eine vereinfachte Version der Klasse ''System'',
* die Klasse ''LocalDateTime'',
* ein großer Teil des **Collection-Frameworks** von Java, insbesondere die Klassen und Interfaces
* ''Iterable''
* ''Collection''
* ''Map'', ''HashMap''
* ''List'', ''ArrayList'', ''LinkedList''
* ''Set'', ''HashSet''
* ''Stack''
* die Klassen ''Boolean'', ''Integer'', ''Character'', ''Float'' und ''Double''
LearnJ besitzt über die Java Standard Library-Klassen hinaus aber viele weitere Klassen, z.B.
* die Klasse ''Input'' zum Einlesen von Tastatur-Benutzereingaben,
* die Klasse ''Sound'' zur Ausgabe von Tönen und Sound-Stücken,
* die Klasse ''PApplet'', die die einen Großteil der [[https://processing.org|Processing-Library]] enthält,
* die Klasse ''Vector2'' mit Methoden zur 2D-Vektorrechnung,
* die Klassen ''WebSocket'' und ''WebSocketClient'' zur Programmierung von Chat-Programmen, Netzwerkspielen u.ä.
* sowie eine eingebaute umfangreiche Grafikbibliothek, die die Programmierung einfacher Spiele möglich macht (Klassen ''World'', ''Circle'', ''Ellipse'', ''Rectangle'', ''Polygon'', ''Triangle'', ''Sprite'', ''Turtle'', ''Text'', ''Bitmap'', ''Group'', ''Gamepad'' usw.)
**Links:**
* [[https://www.online-ide.de/api_documentation.html|JavaDoc-ähnline Übersicht über alle Klassen von LearnJ]]
* [[api:documentation:start|Dokumentation der Klassenbibliothek mit Erklärungen und vielen Beispielprogrammen]]
* [[api:documentation:grafik:start|Dokumentation der Grafikklassen mit Erklärungen und vielen Beispielprogrammen]]
* [[api:documentation:spiele:start|Dokumentation der Möglichkeiten zur Spieleprogrammierung mit vielen Beispielprogrammen]]
== Hier ein einfaches Beispiel zur Verwendung der Grafikklassen ==