Java: Unterschied zwischen den Versionen
Flinh1 (Diskussion | Beiträge) (→Klasse BufferedReader und Methode readLine()) |
Flinh1 (Diskussion | Beiträge) (→Übersetzung von Quellcode in Bytecode) |
||
(23 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
<div align="right"><big>'''[https://flinkwiki.de/index.php?title=Kategorie:Alle_Seiten Seitenübersicht]'''</big></div> | <div align="right"><big>'''[https://flinkwiki.de/index.php?title=Kategorie:Alle_Seiten Seitenübersicht]'''</big></div> | ||
+ | <div align="right">'''[[Java: JavaFX|Zur Seite "Java: JavaFX"]]'''</div> | ||
<div align="right">'''[[Java: Swing|Zur Seite "Java: Swing"]]'''</div> | <div align="right">'''[[Java: Swing|Zur Seite "Java: Swing"]]'''</div> | ||
+ | <div align="right">'''[[IntelliJ IDEA|Zur Seite "IntelliJ IDEA"]]'''</div> | ||
<div align="right">'''[[Eclipse|Zur Seite "Eclipse"]]'''</div> | <div align="right">'''[[Eclipse|Zur Seite "Eclipse"]]'''</div> | ||
<div align="right">'''[[Netbeans|Zur Seite "Netbeans"]]'''</div> | <div align="right">'''[[Netbeans|Zur Seite "Netbeans"]]'''</div> | ||
Zeile 8: | Zeile 10: | ||
== Allgemeines == | == Allgemeines == | ||
+ | |||
+ | [https://docs.oracle.com/javase/specs/ Java Language and Virtual Machine Specifications] | ||
+ | |||
+ | [https://docs.oracle.com/en/java/javase/15/ JDK 15 Documentation] | ||
+ | |||
+ | [https://docs.oracle.com/en/java/javase/14/ JDK 14 Documentation] | ||
+ | |||
+ | [https://docs.oracle.com/en/java/javase/14/docs/api/ Java® Platform, Standard Edition & Java Development Kit - Version 14 API Specification] | ||
[https://docs.oracle.com/javase/8/docs/api/ Java™ Platform, Standard Edition 8 API Specification] | [https://docs.oracle.com/javase/8/docs/api/ Java™ Platform, Standard Edition 8 API Specification] | ||
Zeile 13: | Zeile 23: | ||
---- | ---- | ||
+ | Installation unter Ubuntu: | ||
+ | |||
+ | * https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-on-ubuntu-20-04-de | ||
+ | |||
+ | ---- | ||
== Übersetzung von Quellcode in Bytecode == | == Übersetzung von Quellcode in Bytecode == | ||
− | Wenn keine IDE wie ''Eclipse'' mit einem Menüpunkt ''Run'' zur Verfügung steht, kann man die ''java''Datei auch auf der Kommandozeile (bash, cmd etc.) übersetzen: | + | Wenn keine IDE wie ''Eclipse'' mit einem Menüpunkt ''Run'' zur Verfügung steht, kann man die ''java''-Datei auch auf der Kommandozeile (bash, cmd etc.) übersetzen: |
<code>javac</code> Dateiname.java | <code>javac</code> Dateiname.java | ||
Es entsteht eine Datei ''Dateiname.class'', die mit dem Befehl | Es entsteht eine Datei ''Dateiname.class'', die mit dem Befehl | ||
Zeile 144: | Zeile 159: | ||
</nowiki> | </nowiki> | ||
− | Man kann sich auf dieser Grundlage | + | Man kann sich auf dieser Grundlage ein Set vorgefertigter Methoden für die Konsoleneingabe "basteln": |
<nowiki> | <nowiki> | ||
public static String readString() { | public static String readString() { | ||
Zeile 286: | Zeile 301: | ||
* https://javabeginners.de/Arrays_und_Verwandtes/Array_deklarieren.php | * https://javabeginners.de/Arrays_und_Verwandtes/Array_deklarieren.php | ||
+ | |||
+ | ---- | ||
+ | == Arraylists == | ||
+ | Arraylists können dynamisch verändert werden. | ||
+ | List<Integer> list = new ArrayList<>(); | ||
+ | |||
+ | ---- | ||
+ | Ein neues Element einfügen: | ||
+ | arraylist.add(int index, E element) | ||
+ | [https://www.programiz.com/java-programming/library/arraylist/add] | ||
+ | |||
+ | ---- | ||
+ | Ein Element durch ein anderes ersetzen: | ||
+ | arraylist.set(int index, E element) | ||
+ | [https://www.programiz.com/java-programming/library/arraylist/set] | ||
+ | |||
+ | ---- | ||
+ | Ein Element entfernen: | ||
+ | // remove the specified element | ||
+ | arraylist.remove(Object obj) | ||
+ | // remove element present in the specified index | ||
+ | arraylist.remove(int index) | ||
+ | [https://www.programiz.com/java-programming/library/arraylist/remove] | ||
---- | ---- | ||
Zeile 355: | Zeile 393: | ||
Wenn man die <code>break</code>-Anweisung weglässt, werden die folgenden Fälle bis zur nächsten <code>break-</code>-Anweisung mit abgearbeitet. | Wenn man die <code>break</code>-Anweisung weglässt, werden die folgenden Fälle bis zur nächsten <code>break-</code>-Anweisung mit abgearbeitet. | ||
+ | ---- | ||
+ | |||
+ | ==== Java 12 Switch Statements==== | ||
+ | |||
+ | <nowiki> | ||
+ | public static void main(String[] args) { | ||
+ | String taste = "way too hot"; | ||
+ | int tempAdjustment = switch(taste) { | ||
+ | case "too cold" -> 1; | ||
+ | case "way too hot" -> -2; | ||
+ | case "too hot" -> -1; | ||
+ | case "just right" -> 0; | ||
+ | default -> 0; | ||
+ | }; | ||
+ | System.out.println("Adjust temperature: " + tempAdjustment); | ||
+ | }</nowiki>[https://www.packtpub.com/product/the-java-workshop/9781838986698] | ||
+ | IntelliJ muss für Java 12 switch statements eventuell konfiguriert werden: ''Run > Edit Configurations > Edit Templates > Application > in VM options: <br> --enable-preview'' eintragen | ||
---- | ---- | ||
Zeile 512: | Zeile 567: | ||
=== Eclipse === | === Eclipse === | ||
− | + | [[Eclipse|Zur Seite Eclipse]] | |
---- | ---- | ||
Zeile 518: | Zeile 573: | ||
=== IntelliJ IDEA === | === IntelliJ IDEA === | ||
− | [[IntelliJ IDEA]] | + | [[IntelliJ IDEA | Zur Seite IntelliJ IDEA]] |
---- | ---- | ||
Zeile 550: | Zeile 605: | ||
=== Links === | === Links === | ||
+ | |||
+ | * https://openbook.rheinwerk-verlag.de/java8/ | ||
* https://javabeginners.de/index.php | * https://javabeginners.de/index.php | ||
Aktuelle Version vom 3. Juni 2021, 19:13 Uhr
Inhaltsverzeichnis
Allgemeines
Java Language and Virtual Machine Specifications
Java® Platform, Standard Edition & Java Development Kit - Version 14 API Specification
Java™ Platform, Standard Edition 8 API Specification
Installation unter Ubuntu:
Übersetzung von Quellcode in Bytecode
Wenn keine IDE wie Eclipse mit einem Menüpunkt Run zur Verfügung steht, kann man die java-Datei auch auf der Kommandozeile (bash, cmd etc.) übersetzen:
javac
Dateiname.java
Es entsteht eine Datei Dateiname.class, die mit dem Befehl
java
Dateiname
(ohne die Endung class) aufgerufen werden kann.
Importieren von Paketen und Klassen
Import einer einzelnen Klasse:
import java.util.Scanner;
Import aller Klassen eines Pakets:
import java.util.*;
Pakete:
- java.util // z. B. Klasse Scanner
- javax.swing // z. B. Klasse JOptionPane // Methode showInputDialog()
Java Archive (JAR-Datei)
Erzeugung in Netbeans:
> Run > Clean and Build""
Erzeugung im Terminal /cmd:
jar -cvf Dateiname.jar Datei.class
Aufruf:
Aus der Kommandozeile kann man Jar-Dateien mit java -jar
starten.
Eingabe über die Konsole (Tastatureingabe)
JOptionPane
import javax.swing.*; public class SwingPane { public static void main(String[] args) { String name = JOptionPane.showInputDialog("Wie ist Ihr Name?"); System.out.println("Sie heißen also " + name + "."); } }
Es öffnet sich eine Dialogbox für die Eingabe. Bei Eingabe einer Zahl muss diese gegebenenfalls mit Integer.parseInt() oder Float.parseFloat() umgewandelt werden.
Die Ausgabe eines Ergebnisses kann ebenfalls über ein Fenster erfolgen: JOptionPane.showMessageDialog(null, "Das Ergebnis lautet: " + ergebnis).
Klasse Scanner
public class Skanner { public static void main(String[] args) { Scanner eingabe = new Scanner(System.in); System.out.println("Geben Sie bitte Ihren Namen ein:"); String name = eingabe.next(); System.out.println("Sie heißen also " + name + "."); } }
Methoden für Scanner:
- next() >> Eingabe eines Wortes
- nextLine() >> Eingabe einer Textzeile
- nextInt() >> Eingabe einer Ganzzahl
- nextFloat() >> Eingabe einer Fließpunktzahl
- nextDouble() >> Eingabe einer Fließpunktzahl
Achtung: nextFloat() und nextDouble() erkennen die Lokalisierung des Rechners. Auf einem "deutschen" Rechner ist die Zahl mit Komma und nicht mit Punkt einzugeben.
Um Werte vom Typ char zu erhalten, verwendet man die Methode findWithinHorizon():
import java.util.*; public class Skanner { public static void main(String[] args) { Scanner eingabe = new Scanner(System.in); System.out.println("Geben Sie bitte Zeichen 1 ein:"); char zeichen1 = eingabe.findWithinHorizon(".", 0).charAt(0); System.out.println("Geben Sie bitte Zeichen 2 ein:"); char zeichen2 = eingabe.findWithinHorizon(".", 0).charAt(0); System.out.println("Zeichen 1 + Zeichen 2 ergeben zusammen " + zeichen1 + zeichen2 + "."); } }
Ein double von der Tastatur einlesen
Klasse BufferedReader und Methode readLine()
- InputStreamReader erlaubt die Umsetzung eines Bytestreams in einen Zeichenstream. Bytes werden gelesen und in Zeichen dekodiert.
- BufferedReader liefert einen gepufferten Eingabe-Stream für Unicode-Zeichen.[1]
- Die statische Methode readLine() stellt einen formatierten Prompt zur Verfügung und liest dann eine Textzeile von der Konsole.
Beispiel:
import java.io.*; public class MeineEingabe { public static void main(String[] args) throws IOException { String s; BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Bitte um Tastatureingabe: "); s = eingabe.readLine(); System.out.println("Ausgabe: " + s); } }
Man kann sich auf dieser Grundlage ein Set vorgefertigter Methoden für die Konsoleneingabe "basteln":
public static String readString() { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try { return br.readLine(); } catch (IOException ex) { return ""; } } public static int readInt() { try { return Integer.parseInt(readString()); } catch (NumberFormatException ex) { return 0; } } public static double readDouble() { try { return Double.parseDouble(readString()); } catch (NumberFormatException ex) { return 0.0; } } }
Beispiele für die Verwendung dieser Methoden:
String eingabe = readString(); System.out.println("Die Eingabe lautet: " + eingabe); int intEingabe = readInt(); System.out.println("Die intEingabe lautet: " + intEingabe); double doubleEingabe = readDouble(); System.out.println("Die doubleEingabe lautet: " + doubleEingabe);
(Dank an Hn. K.)
Datentypen
Primitive Datentypen
Typname | Größe | Wrapper-Klasse | Wertebereich | Beschreibung |
---|---|---|---|---|
boolean | undefiniert | java.lang.Boolean | true / false | Boolescher Wahrheitswert, Boolescher Typ |
char | 16 bit | java.lang.Character | 0 ... 65.535 (z. B. 'A') | Unicode-Zeichen (UTF-16) |
byte | 8 bit | java.lang.Byte | -128 ... 127 | Zweierkomplement-Wert |
short | 16 bit | java.lang.Short | -32.768 ... 32.767 | Zweierkomplement-Wert |
int | 32 bit | java.lang.Integer | -2.147.483.648 ... 2.147.483.647 | Zweierkomplement-Wert |
long | 64 bit | java.lang.Long | -263 bis 263-1, ab Java 8 auch 0 bis 264 -1 | Zweierkomplement-Wert |
float | 32 bit | java.lang.Float | +/-1,4E-45 ... +/-3,4E+38 | 32-bit IEEE 754 |
double | 64 bit | java.lang.Double | +/-4,9E-324 ... +/-1,7E+308 | 64-bit IEEE 754, doppelte Genauigkeit |
siehe Wikibooks, Java Standard: Primitive Datentypen
Für eine Genauigkeit bis zu 7 Stellen kann man den Datentyp float verwenden, bei mehr Stellen muss man double nehmen.
Diese Datentypen werden folgendermaßen deklariert:
float length = 1876.79f; double width = 1876.79797657
Division von Ganzzahlen:
int a = 10; int b = 4; int c = a/b; // Ausgabe: 2
type casting:
int a = 10; int b = 4; double c = a/(double) b; // Ausgabe: 2.5
Strings
String
ist kein primitiver Datentyp, sondern eine Klasse mit einer Reihe von Methoden.
Bei Verknüpfung von Strings und Zahlen mit +
erfolgt eine Konkatenation, bei der die Zahl in einen String umgewandelt wird.
String favoriteCity = "Buenos Aires"; int numberOfTrips = 5; String story = "Ich bin " + numberOfTrips + " Mal nach " + favoriteCity + " gereist!"; // "Ich bin 5 Mal nach // Buenos Aires gereist!"
Arrays
Deklaration:
int[] meinArray = new int[5];
Die Initialisierung erfolgt durch die Zuweisung der Werte:
meinArray[0] = 21; etc.
Deklaration mit Initialisierung:
int[] meinArray = {24, -7, 123456, 25, -64};
Arraylists
Arraylists können dynamisch verändert werden.
List<Integer> list = new ArrayList<>();
Ein neues Element einfügen:
arraylist.add(int index, E element)
Ein Element durch ein anderes ersetzen:
arraylist.set(int index, E element)
Ein Element entfernen: // remove the specified element
arraylist.remove(Object obj)
// remove element present in the specified index
arraylist.remove(int index)
Verzweigungen
Verzweigung (if
)
Selection mit (if
) / (else
)
if (<boolescher Ausdruck>) { Anweisung(en) 1 } else if { Anweisung(en) 2 } else { Anweisung(en) 3 }
Eine if
-Verzweigung führt stets die nachfolgende Anweisung aus, wenn der <boolesche Ausdruck> wahr ist. Sollen mehrere Anweisungen ausgeführt werden so sind diese in einen Block zusammenzufassen (mit Hilfe der geschweiften Klammern).
Die if else
/ else
Bedingung ist optional - auch hier gilt dass mehrere Anweisungen in einen Block zusammenzufassen sind.
Verschachtelte Selektion
Als Anweisung nach einer Selektion kann eine weitere Selektion stehen.
public class Verschachtelung { public static void main(String[] args) { int a = 10; int b = 100; int c = 1000; if (a < 50) { if (b < 500) { if (c < 5000) { System.out.println("Alle Bedingungen treffen zu."); } else {System.out.println("Die dritte Bedingung trifft nicht zu.");} } else {System.out.println("Die zweite Bedingung trifft nicht zu.");} } else {System.out.println("Die erste Bedingung trifft nicht zu.");} } }
Mehrfachselektion mit switch
Mit switch
kann man eine Variable auf verschiedene Werte abfragen.
public class SwitchErgebnis { public static void main(String[] args) { int ergebnis = 13; switch (ergebnis) { case 3: System.out.println("Das ist zu wenig."); break; case 13: System.out.println("Genau richtig."); break; case 14: System.out.println("Das geht übers Ziel hinaus."); break; default: System.out.println("Unbekannte Zahl"); } } }
Wenn man die break
-Anweisung weglässt, werden die folgenden Fälle bis zur nächsten break-
-Anweisung mit abgearbeitet.
Java 12 Switch Statements
public static void main(String[] args) { String taste = "way too hot"; int tempAdjustment = switch(taste) { case "too cold" -> 1; case "way too hot" -> -2; case "too hot" -> -1; case "just right" -> 0; default -> 0; }; System.out.println("Adjust temperature: " + tempAdjustment); }[5]
IntelliJ muss für Java 12 switch statements eventuell konfiguriert werden: Run > Edit Configurations > Edit Templates > Application > in VM options:
--enable-preview eintragen
Schleifen
do while
Es handelt sich um eine fußgesteuerte Schleife, da die Überprüfung der Bedingung am Ende der Schleife erfolgt. Die Anweisung im Schleifenkörper wird mindestens einmal ausgeführt.
public class DoWhile { public static void main(String[] args) { int a = 10; do { System.out.println(a); a = a + 10; } while (a <= 100); } }
while
Es handelt sich um eine fußgesteuerte Schleife, da die Überprüfung der Bedingung am Anfang der Schleife erfolgt. Wenn die Bedingung "false" ist, werden die Anweisungen im Schleifenrumpf nicht durchlaufen.
public class WhileSchleife { public static void main(String[] args) { int i = 10; while (i > 0) { System.out.println(i); i--; } } }
for
Die for
-Schleife ist zählergesteuert. Der Zähler läuft mit einer definierten Schrittweite von einem bestimmten Anfangswert zu einem bestimmten Endwert.
public class ForSchleife { public static void main(String[] args) { for (int i = 1; i <= 10; i++){ System.out.println(i); } } }
Sprung innerhalb der Schleife mit continue
Folgende Schleife gibt die Zahlen von 1 - 10 ohne die 7 aus:
public class ForSchleife { public static void main(String[] args) { for (int i = 1; i <= 10; i++){ if (i == 7) continue; System.out.println(i); } } }
Abbruch der Schleife mit break
Folgende Schleife gibt nur die die Zahlen von 1 - 6 aus:
public class ForSchleife { public static void main(String[] args) { for (int i = 1; i <= 10; i++){ if (i == 7) break; System.out.println(i); } } }
for each
Mit dieser Schleife wird ein Array durchlaufen:
public class JavaForEach { public static void main(String[] args) { int meinArray[] = {3, 5, 7, 9}; for (int i : meinArray) { System.out.println(i); } } }
Beispiel für ein Array mit Datentyp String
:
String meinArray2[] = {"cat", "dog", "bird", "lizard"}; for (String i : meinArray2) { System.out.println(i); }
JDBC
JDBC definiert ein Paket von Klassen (java.sql) für den dynamischen Zugriff auf Datenbanken.
- Verbindung zur Datenbank herstellen mit den Klassen DriverManager und Connection
- Eine SQL-Anweisung als String formulieren und mit der Klasse Statement ausführen
- Eine Ergebnismenge verarbeiten mit den Klassen ResultSet und ResultSetMetaData
- Fehler behandeln mit der Klasse SQLException
Für die MySQL-Datenbank muss der JDBCTreiber in den Klassenpfad CLASSPATH eingebunden werden. Es handelt sich um eine jar-Datei, z. B. mysql-connector-java-x.x.x.jar, in Netbeans einzubinden unter "Libraries".
Die Methode
static Connection getConnection (String url, String user, String password) throws Exception
der Klasse java.sql.DriverManager stellt die Verbindung her und liefert ein Objekt vom Typ des Interface java.sql.Connection. url ist die URL der Datenbank. Beispiel MySQL auf lokaler Maschine:
jdbc:mysql://localhost/datenbankname
Threads
Tipps und Tricks
Datum anzeigen
System.out.println(new java.util.Date());
Ausgabe im Format Fri Aug 30 14:15:03 CEST 2019
import java.time.LocalDate; import java.time.format.DateTimeFormatter; ... LocalDate aktuell = LocalDate.now(); DateTimeFormatter meinFormat = DateTimeFormatter.ofPattern("EEEE, d. MMMM yyyy"); System.out.println("Heute ist " + meinFormat.format(aktuell) + ".");
Ausgabe im Format Heute ist Freitag, 30. August 2019.
Arbeitswerkzeuge
Eclipse
IntelliJ IDEA
Netbeans
JShell
Am Eingabeprompt der JShell kann man unkompliziert Codefragmente testen.
Aufruf im Terminal (Linux): jshell
Aufruf unter Windows (cmd): jshell
. Die Datei jshell.exe liegt im bin-Verzeichnis der jdk-Installation.
Eingaben nachträglich editieren:
/edit
Importierte Klassen anzeigen:
/imports
Quellen
Links
Youtube
Bücher
- Hardy, Dirk: Java für IT-Berufe, Haan-Gruiten 2019 (Europa-Lehrmittel)
- Günster, Kai: Einführung in Java
- http://openbook.rheinwerk-verlag.de/javainsel/
- Jung, Elisabeth: Java 9 - Das Übungsbuch, Heidelberg 2017
- Abts, Dietmar: Grundkurs JAVA. Von den Grundlagen bis zu Datenbank- und Netzanwendungen, Heidelberg 2018 (Springer-Vieweg)
|