Java Grundlagen

Ein Einführung in die Grundlagen der Programmiersprache Java.

07. Nov 2023

Einführung

Dieser Artikel ist für Personen gedacht, die mit Java ihre ersten Programmiererfahrungen machen.

Java Plattform

Wenn man Java auf seinem Computer installieren möchte, hat man zwei verschiedene Installationsoptionen zur Auswahl:

  • Java Runtime Environment
    Die JRE (Java Runtime Environment) beinhaltet alle Funktionen um Java Programme auf dem Computer ausführen zu können darunter auch die JVM.

  • Java Development Kit
    Das JDK (Java Development Kit) ist für die Entwicklung von Java Programmen gedacht. Alle Funktionen aus dem JRE sind hier ebenfalls enthalten. Zusätzlich wird der JAVAC (Java Compiler) mitgeliefert der es ermöglicht, Programmcode in Maschinencode umzuwandeln.

Das nachfolgende Diagramm veranschaulicht die Verschachtelung der einzelnen Installationspakete.

+-----------------------+
|          JDK          |
|  +-----------------+  |
|  |       JRE       |  |
|  |  +-----------+  |  |
|  |  |    JVM    |  |  |
|  |  +-----------+  |  |
|  +-----------------+  |
|                       |
|  +-----------------+  |
|  |      JAVAC      |  |
|  +-----------------+  |
+-----------------------+

Java Virtual Machine

Die JVM (Java Virtual Machine) ermöglicht es Java Programme auszuführen. Dabei wird der Maschinenecode (.class Dateien) von der Software interpretiert und die entsprechenden Betriebssystem-abhängigen Befehle ausgeführt.

Somit kann der Programmcode auf verschiedenen Betriebssystemen ohnen zusätzliche Anpassungen ausgeführt werden.

       +-----------------------+
       |         Java          |
       |     Maschinencode     |
       +-----------------------+
       /           |           \
      /            |            \
     v             v             v
+---------+   +---------+   +---------+
|   JVM   |   |   JVM   |   |   JVM   |
+---------+   +---------+   +---------+
| Windows |   |  Linux  |   |  MacOS  |
|         |   |         |   |         |

Kompilieren und Ausführen

Zu Beginn schreiben wir ein simples Java Programm. Dazu erstellen wir eine neue Datei mit dem Namen HelloWorld.java und schreiben den nachfolgenden Programmcode im Texteditor deiner Wahl.

HelloWorld.java

public class HelloWorld {

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

Dieses Programm soll den Text "Hello world!" in der Konsole ausgeben. Nachdem die Datei gespeichert wurde, können wir nun unseren Programmcode kompilieren. Dies wird im nächsten Kapitel behandelt.

Merke: Der Klassenname muss mit dem Dateinamen übereinstimmen.

Kompilierung des Programmcodes

javac HelloWorld.java

Nachdem der Programmcode erfolgreich und ohne Fehler kompiliert wurde, sollte nun eine neue Datei mit dem gleichen Namen und der Dateiendung .class erstellt worden sein. Diese Class-Datei enthält den Maschinencode der von der JVM ausgeführt werden kann.

Ausführung des Maschinencodes

java HelloWorld

TIPP: Wenn der java Befehl mit der Dateiendung .java ausgeführt wird, wird der Programmcode gleichzeitig kompiliert und ausgeführt. Dies funktioniert jedoch nur, wenn es sich um eine einzige Java Datei handelt.

java HelloWorld.java

Grafische Veranschaulichung des Kompilierungs- und Ausführungsprozesses.

+--------+                  +--------+                  +---------+
|        |      javac       |        |       java       |         |
| .java  |  ------------->  | .class |  ------------->  |   JVM   |
|        |   kompilieren    |        |    ausführen     |         |
+--------+                  +--------+                  +---------+
  • .java = Programmcode
  • .class = Binäre Repräsentation des Programmcodes (Maschinencode)

Variablen

...

SYNTAX: Deklaration und Initialisierung einer Variable

int count = 21;
^   ^       ^
|   |       Wert
|   Variable
Datentyp

Datentypen

Primitive Datentypen

Datentyp Speichergröße Beschreibung
byte 1 byte (8 bit) binäre Daten
short 2 bytes (16 bit) Ganzzahl
int 4 bytes (32 bit) Ganzzahl
long 8 bytes (64 bit) Ganzzahl
float 4 bytes (32 bit) Fließkommazahl
double 8 bytes (64 bit) Fließkommazahl
boolean 1 bit Wahrheitswert (true oder false)
char 2 bytes (16 bit) Textzeichen

Merke: Primitive Datentypen haben immer einen Wert, wobei nicht-primitive Datentypen null sein können.

Wrapper Klassen

  • Byte
  • Short
  • Integer
  • Long
  • Float
  • Double
  • Boolean
  • Character

Referenztypen

  • String
  • Array
  • Class (Klasse)
  • Interface (Schnittstelle)

Klassen

...

Das folgende Diagramm veranschaulicht den Aufbau einer Klasse.

+-----------------------+
|  Class (Klasse)       |
|  +--------------------+
|  |  Method (Methode)  |
|  |  +-----------------+
|  |  |  Programmcode   |
|  |  |                 |
|  |  |                 |
|  |  +-----------------+
|  +--------------------+
+-----------------------+

SYNTAX: Instanziierung einer Klasse

Person person = new Person(...);
^      ^            ^      ^
|      |            |      Konstruktor-Argumente
|      |            Klasse
|      Instanz (Variable)
Klassenobjekt

Methoden

...

SYNTAX: Definition und Deklaration einer Klassenmethode

public int add(int a, int b) { ... }
^      ^   ^   ^               ^
|      |   |   |               Inhalt der Methode
|      |   |   Parameter
|      |   Methodenname
|      Datentyp des Rückgabewerts
Zugriffsmodifikator

Modifikatoren

static-Modifikator

Diese Klasse dient für die nachfolgenden Beispiele als Referenz.

public class Person {

  public static Person of(String name) { ... }

  public String getName() { ... }
}

Statische Methoden und Variablen können nur an der Klasse aufgerufen werden und sind somit klassenspezifisch.

Person person = Person.of("Andrew");

Nicht-statische Methoden und Variablen können nur an der Klasseninstanz aufgerufen werden und sind somit instanzspezifisch.

person.getName();

Merke: Nicht-statische Methoden können nicht innerhalb statischer Methoden aufgerufen werden.

final-Modifikator

Der final Modifikator makiert eine Variable als unveränderlich. Das bedeutet, die Variable kann nur einmal initialisiert werden.

final int age = 24;
age = 16; // Invalide Zuweisung

Merke: Variablen die nur einmal initialisiert werden, sollten immer mit final markiert werden.

Pakete und Imports

SYNTAX: Import eines Klassenobjekts

import java.util.List;
       ^         ^
       |         Klasse
       Paketpfad

Referenzen

Begriffserklärung

Kompilierung
...

Interpretation
...

Deklaration
Festlegung von Speichergröße, Bezeichner und Datentyp einer Variable

Definition
Definiert wie etwas implementiert wird (z.B.: Inhalt einer Methode)

Initialisierung
Erstmalige Zuweisung eines Wertes an eine Variable

Instanziierung
Erstellung und Zuweisung von Speicherplatz für ein Objekt einer bestimmten Klasse