unterschiede_zu_java:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Vorhergehende Überarbeitung | |||
— | unterschiede_zu_java:start [2025/06/05 13:52] (aktuell) – [5. Standard Library] martin | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== 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 '' | ||
+ | ==== 2. Hauptprogramm ==== | ||
+ | In Java befindet sich das " | ||
+ | <code java> | ||
+ | class Beispiel { | ||
+ | |||
+ | public static void main(String[] args){ | ||
+ | // Hier beginnen die Anweisungen des Hauptprogramms: | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | In LearnJ ist dies ebenso möglich. Darüber hinaus fasst LearnJ auch alle Anweisungen, | ||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | println(" | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | | ||
+ | Seit Version 2.0 der Online-IDE ist es auch möglich, Methoden im Hauptprogramm zu deklarieren und zu verwenden: | ||
+ | < | ||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | println(fakultät(8)); | ||
+ | |||
+ | int fakultät(int n){ | ||
+ | if(n <= 1) return 1; | ||
+ | return n * fakultät(n - 1); | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | <WRAP center round info 80%> | ||
+ | Im Hauptprogramm definierte lokale Variablen und Methoden sind nur im Hauptprogramm sichtbar, nicht innerhalb anderer Methoden/ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ==== 3. Vergleich zweier String-Werte ==== | ||
+ | In Java bewirkt der Vergleichsoperator '' | ||
+ | <code java> | ||
+ | String s1 = " | ||
+ | String s2 = " | ||
+ | |||
+ | s2 = s2 + " | ||
+ | |||
+ | if(s1 == s2){ | ||
+ | | ||
+ | } else { | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | Will man in Java zwei Zeichenketten vergleichen, | ||
+ | Die Programmiersprache dieser Website unterscheidet sich von Java dahingehend, | ||
+ | |||
+ | ==== 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: | ||
+ | <code java> | ||
+ | new MyRectangle(10, | ||
+ | |||
+ | class MyRectangle extends Rectangle { | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== 5. Standard Library ==== | ||
+ | Derzeit sind Nachbildungen folgender Klassen aus der Java Standard Library vorhanden: | ||
+ | * die Klasse '' | ||
+ | * die Klasse '' | ||
+ | * eine vereinfachte Version der Klasse '' | ||
+ | * eine vereinfachte Version der Klasse '' | ||
+ | * die Klasse '' | ||
+ | * ein großer Teil des **Collection-Frameworks** von Java, insbesondere die Klassen und Interfaces | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * die Klassen '' | ||
+ | |||
+ | LearnJ besitzt über die Java Standard Library-Klassen hinaus aber viele weitere Klassen, z.B. | ||
+ | * die Klasse '' | ||
+ | * die Klasse '' | ||
+ | * die Klasse '' | ||
+ | * die Klasse '' | ||
+ | * die Klassen '' | ||
+ | * sowie eine eingebaute umfangreiche Grafikbibliothek, | ||
+ | * Klassen für [[api: | ||
+ | * Klassen zum Zugriff auf Datenbanken der [[https:// | ||
+ | |||
+ | **Links:** | ||
+ | * [[https:// | ||
+ | * [[api: | ||
+ | * [[api: | ||
+ | * [[api: | ||
+ | |||
+ | == Hier ein einfaches Beispiel zur Verwendung der Grafikklassen == | ||
+ | < | ||
+ | <div class=" | ||
+ | <script type=" | ||
+ | new Feuerwerk(); | ||
+ | |||
+ | class Feuerwerk extends Actor { | ||
+ | |||
+ | | ||
+ | if(Math.random() < 0.03) { | ||
+ | |||
+ | int funkenzahl = Math.floor(Math.random() * 50 + 30); | ||
+ | int farbe = Math.floor(Math.random() * 0xffffff); | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | new Funke(x, y, farbe, lebensdauer); | ||
+ | } | ||
+ | | ||
+ | |||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | class Funke extends Circle { | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | super(x, y, 4); | ||
+ | double winkel = Math.random() * 2 * Math.PI; | ||
+ | double v = Math.random() * 15 + 5; | ||
+ | vx = v * Math.cos(winkel); | ||
+ | vy = v * Math.sin(winkel); | ||
+ | setFillColor(farbe); | ||
+ | this.lebensdauer = lebensdauer; | ||
+ | } | ||
+ | |||
+ | | ||
+ | lebensdauer--; | ||
+ | move(vx, vy); | ||
+ | vy = vy + 0.2; | ||
+ | if(lebensdauer < 30) { | ||
+ | | ||
+ | } | ||
+ | if(isOutsideView() || lebensdauer < 0) { | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | | ||
+ | |||
+ | ====== LearnJ: Sprachumfang/ | ||
+ | Hier eine grobe Übersicht über den vorhandenen Sprachumfang von LearnJ und die Features der Online-Entwicklungsumgebung: | ||
+ | ==== Klassen ==== | ||
+ | * '' | ||
+ | * '' | ||
+ | * abstrakte Klassen | ||
+ | * '' | ||
+ | * '' | ||
+ | * Überladen von Methoden, Überschreiben von Attributen und Methoden | ||
+ | * Konstruktoren (auch '' | ||
+ | * '' | ||
+ | * casten (implizit und explizit) | ||
+ | * inner classes | ||
+ | * anonymous classes | ||
+ | |||
+ | ==== Strukturanweisungen ==== | ||
+ | * '' | ||
+ | * Vereinfachte '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | ==== Datentypen ==== | ||
+ | * primitive Datentypen '' | ||
+ | * Sonderrolle von '' | ||
+ | * '' | ||
+ | * implicit casting und explicit casting (mit cast-operator) | ||
+ | * lokale Variablen und Parameter können als '' | ||
+ | * Generics, z.B. '' | ||
+ | * Das Schlüsselwort '' | ||
+ | * Instanzierung von Generics ohne Angabe der Typen in '<>', | ||
+ | * Wrapper-Klassen '' | ||
+ | |||
+ | ==== Exceptions ==== | ||
+ | * '' | ||
+ | |||
+ | ==== Nebenläufige Programmierung ==== | ||
+ | * Klasse '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * Klasse ' | ||
+ | |||
+ | ==== JUnit ==== | ||
+ | * Annotation '' | ||
+ | * integrierter Test-Runner | ||
+ | ==== Operatoren ==== | ||
+ | * '' | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | ==== Editor ==== | ||
+ | * Verwendet wird der Monaco-Editor von Visual Studio Code. Viele [[https:// | ||
+ | * Syntax-Highlighting | ||
+ | * markiert alle Positionen, an denen die Variable/ | ||
+ | * springt zur Definition eines Symbols (Strg + click) | ||
+ | * Auto-Format während der Eingabe (immer nach Enter oder mit Alt + Shift + f) | ||
+ | * Codeverfollständigung | ||
+ | * Refactor-Rename (F2) | ||
+ | * Laufendes Compilieren während der Eingabe mit Anzeige der Fehler | ||
+ | * Parameter hints (Strg + Shift + Leertaste) | ||
+ | * Show References (Shift + F12) | ||
+ | |||
+ | ==== Debugger ==== | ||
+ | * Zeigt alle Variablen im aktuellen Scope | ||
+ | * Auswertung von Termen (watch) | ||
+ | * Zeigt den Variableninhalt beim Mouseover im Editor | ||
+ | * Auswertung von Termen durch Markieren mit der Maus im Editor | ||
+ | * Step into, Step over, Step out | ||
+ | * Breakpoints | ||
+ | |||
+ | ==== Console ==== | ||
+ | * Code completion (mit Strg + Leertaste) | ||
+ | * Parameter hints (mit Strg + Shift + Leertaste) | ||
+ | * Auswertung beliebiger Terme | ||
+ | * Ausführen von Statements | ||
+ | * Während des Debuggings: Zugriff auf die Variablen im aktuellen Scope des gerade ausgeführten Programms | ||
+ | * Edit History (mit Pfeil nach oben/unten) |