Java-Compiler, Variablen und Methoden zum Oracle Certified Associate (OCA)

0 Comments
5
(2)

Was ist die Grundidee der OCA und OCP Zertifizierung von Oracle?

Was ist das Ziel der OCA Zertifizierung?

Datei mit der Endung .java mit Ihren Regeln zum Syntax, Semantik oder Pragramatik

Oracle bietet zwei Zertifizierungen an, um nachzuweisen ob der Syntax (Struktur einer Java-Anweisung), die Semantik (Bedeutung einer Java-Anweisung) und die Pragmatik (Verwendungszweck einer Java-Anweisung) verstanden wird ( Die Zertifizierungen lauten in Kurzform OCA und OCP).

Oracle Certified Associate (OCA); Quelle: Oracle

Die erste Programmierer -Zertifizierung zum Oracle Certified Associate (OCA) prüft, ob die Regeln zur Formulierung einer Java-Anweisung verstanden werden. Der Compiler übersetzt die Java-Anweisung (welcher sich in einer .java Datei befindet) in einen Bytecode (welcher sich sodann in einer .class Datei befindet).

Grundprinzip zur Übersetzung des Java Codes in Bytecode

Die Anweisungen sind als Bytecode auf dem ausführenden Gerät wie einem PC oder Mobiltelefon lauffähig. Die JVM (Java Virtual Machine) führt den Bytecode in einem virtuellen Raum auf einem Gerät aus. Die JVM gibt es für verschiedene Betriebssysteme. Das Java-Programm ändert sich jedoch nicht womit Java-Programme sehr leicht auf ander Geräte portiert werden können. Die virtuelle Maschine kann, wie üblich bei virtuellen Maschinen, eine Arbeitsspeicher zugewiesen werden, womit das Programm auf dem Gerät ausgeführt werden kann. Sollte im Rahmen der Programmausführung der Arbeitsspeicher für die Java-Anwendung nicht ausreichen, stürzt die Java-Anwendung entsprechen mit einem Fehler StackOverflowError oder OutOfMemoryError ab.

Wie übersetzt der Java-Compiler eine Java-Anweisung?

Java Anweisungen bestehen aus Identifizierern (meist Domänenbegriffen) wie bspw. kontonummer (eine vollständige Anweisung würde lauten: int kontonummer = 123456;). Identifizierer können Klassennamen, Variablennnamen (ob statische Variablen oder Objektvariablen) oder Objektreferenznamen wie zum Beispiel kontobesitzer (eine vollständige Anweisung einer Referenzvariable zu einem String Objekt „Ellmann“ könnte lauten: String kontobesitzer = „Ellmann“;) sein. Ein Identifizierer darf nicht wie folgende Schlüsselwörter lauten.

abstract, continue, for, new, switch, assert, default, if, package, synchronized, boolean, do, goto, private, this, break, double, implements, protected, throw, byte, else, import, public, throws, case, enum, instanceof, return, transient, catch, extends, int, short, try, char, final, interface, static, void, class, finally, long, strictfp, volatile, const, float, native, super, while

Wie wird ein Java-Programm vom CPU ausgeführt?

Der Java-Programmierer muss die Regeln zur Übersetzung des Programm-Codes mittels des Compilers verstehen. Die Regeln bestehen hierbei aus Zeichen und Symbolen, die in einer bestimmten Reihenfolge dem Compiler angeboten werden müssen, sodass der Compiler den Java Code in Bytecode übersetzen kann. In einem Terminal oder einer Console kann bei installierten Java 8 und bei korrekt gesetzten Umgebungsvariablen folgendermaßen eine Klasse MyClass übersetzt werden, die sich in der Datei MyClass.java befindet. Eine Klasse enthält Codebausteine eines Java-Programms welche mittels geschweiften Klammern {} unterschieden werden. Das kann eine Berechnung sein oder das Laden und darstellen von Daten aus einer Datenbank zum Beispiel für das Laden einer Oberfläche einer Bankanwendung wie die eines Bankautomaten.

Java Datei MyClass.java mit der Endung .java

Es muss hierbei der Präfix .java dem Compiler bei der Ausführung des Befehls mittels Terminal oder Konsole angeboten werden.

Übersetzung der Java Klasse MyClass.java
Übersetzung der Teile eine Java Programmes vom Compiler

Der Compiler durchsucht und übersetzt systematisch, beginnend bei den Feldern (Ring-1), Initialisierungsblöcken (Ring-2) und Konstruktoren (Ring-3) und Methoden den angebotenen Java-Code in der Datei. Es entsteht sodann ein Bytecode welcher sich in einer Klasse .class befindet.

Der Bytecode der Java Datei MyClass.class mit der Endung .class

Der Bytecode kann dem Compiler folgendermaßen zur Ausführung der CPU übergeben werden. Es ist hierbei zu beachten, dass der Präfix .class beim Konsolenbefehl nicht mit übergeben wird.

Ausführung der Klasse MyClass

Es werden Ihnen während der englischsprachigen Zertifizierung verschiedene Code-Beispiele gezeigt, in denen Oracle prüft, ob der Prüfling die Programmierregeln oder Compilerregeln beherrscht die zu einem lauffähigen Programm führen. Die von Oracle angebotenen Code-Beispiele beachten oder missachten hierbei die Regeln. Der Prüfling wird dazu angehalten, eine Beachtung oder Missachtung der Regeln zu identifizieren. Zudem werden dem Prüfling allgemeine Fragen zu Java gestellt, die der Prüfling im gesamten per Multiple-Choice beantworten muss. Es werden dem Prüfling die Anzahl der richtigen Antworten zu einer Frage mitgeteilt. Es sind keine Hilfsmittel erlaubt. Schreibmaterial stellt das Test-Center zur Verfügung.

Wie ist ein Java-Programm aufgebaut?

Wie werden Java-Dateien aufgebaut?

Eine Java-Datei kann verschiedene logische Bausteine enthalten. Manche logischen Bausteine zur Entwicklung eines Java-Programmes sind zwingend notwendig und manche sind optional (beispielsweise: package, import, Variablendeklaration ob für Klasse, für Objekt oder lokale Variablen innerhalb einer Methode). Die logischen Bausteine werden durch Code-Blöcke oder Gültigkeitsbereiche durch geschweiften Klammern {} und durch package und import Anweisungen unterschieden.

Eine Java-Datei welche den Mindestanforderungen an logischen Bausteinen erfüllt, damit die Java-Datei und der enthaltende Java-Code vom Java-Compiler übersetzt werden kann, benötigt einen Klassennamen (wie z.B. MyClass).

Mindestanforderungen einer Java-Datei für den javac-Compiler

Die Datei ist nun folgendermaßen aufgebaut:

  • public ist eines von mehreren möglichen Sichtbarkeitattributen und steuert die Verwendung der Klassen; weitere Sichtbarkeitsattribute sind private, protected usw.
    • Das Beispiel definiert eine public-Klasse welche von jeder anderen Klassen verwendet werden kann
    • Es können sich in der Datei weitere Klassen befinden, welche eine anderes Sichtbarkeitsattribut haben müssen
  • Es muss einen Klasse in der Datei geben, welche wie der Dateiname lautet; vorrangig die Klasse mit dem Sichtbarkeitsattribut public.
Java-Klasse mit der Benennung MyClass.java

Nach dem Sichtbarkeitsattribut wird das Schlüsselwort class zur Deklaration einer Klasse verwendet. Das teilt dem Compiler mit, das sich hierbei um eine Klasse handelt, die in einen Bytecode übersetzt werden soll.

Sodann folgt der gewählte Klassenname wie zum Beispiel MyClass. Der Klassenname wie auch alle anderen Klassen sollten mit einen Großbuchstaben beginnen wie zum Beispiel My. Das neue zusammengesetzte Wort sollte wieder mit einem Großbuchstaben beginnen wie zum Beispiel Class. Diese Coding Convention zur Bezeichnung der Klassen nennt sich CamelCase.

Sodann folgt der erste Code-Block oder Codebaustein welche mit einer öffnenden geschweiften Klammer wie { in Zeile 2 beginnt und mit einer schließenden geschweiften Klammer } in Zeile 6 endet.

Nun kann eine java-Datei übersetzt werden und dadurch ist ein ausführbares Java-Programm entstanden. Das Java-Programm kann aber nicht gestartet bzw. eine Prozedur (ein in folge abgehandelte logische Codebausteine) gestartet werden. Dafür benötigt es eine main-Methode (oder salopp gesagt einer main-Funktion) als Einstiegspunkt in das Programm Java.

Folgende Darstellung enthält die Klasse mit main-Methode:

Java Klasse mit main-Methode

Die main-Methode ist auch wieder nach bestimmten Regeln aufgebaut. Die main-Methode zum Start des Programms wird folgendermaßen definiert.

  • Sie beginnt mit einen Sichtbarkeitsattribut public und somit einen öffentliche Methode und von außerhalb der Datei aufgerufen werden
  • Sodann folgt das Schlüsselwort static das darauf hinweist, das es sich hierbei um eine Klassenmethode handelt und nicht zwingend von einem Objekt aufgerufen werden muss
  • Die Methode gibt keinen Wert zurück das, dass Schlüsselwort void symbolisiert
  • Sodann folgt der Bezeichner main. Beim Ausführen des Programmes sucht der Compiler nach einer Methode mit dem Bezeichner main und führt den Code in der Prozedur aus
  • Innerhalb der runden Klammern werden die Übergabeparameter oder lokalen Variablen für die Methode angegeben
    • Hierbei handelt es sich um einen Array welcher Zeichenketten enthält.
      • Eine Array ist eine Ansammlung von Variablen eines bestimmten Datentyps wie zum Beispiel String
      • Es können also beim Aufruf mehre Zeichenketten übergeben werden
      • args ist eine Referenzname zum Arrayobjekt im Speicher. Die Referenz zeigt zum Arrayobjekt im Heap oder Speicher in dem die Zeichenketten gespeichert sind.
      • Durch den Aufruf eines Indexes zum Beispiel args[0] wird die erste übertragene Zeichenkette aus dem Speicher gelesen
  • Der Methodenname wie zum Beispiel main und die Parameterliste werden auch Methodensignatur genannt.
Übergeben von Parametern in die Main-Methode

Im Codebeispiel wurden an die Main-Methode und der Prozedur zwei Texte übergeben. Ein Text oder Zeichenkette welche eine Lehrzeichen enthält muss mit Anführungszeichen übergeben werden wie hier zum Beispiel „Mein Text“. Text kann ohne Anführungszeichen übergeben werden.

Wie kann der Code in Java beschrieben werden?

Sie können die Teile Ihres Codes durch Kommentare beschreiben. Einzeilige Kommentare beginnen mit zwei Vorwärtsschrägstriche. Mehrzeilige Kommentare beginnen mit eine Vorwärtsstrich und einen Stern wie /* und enden mit einem Stern und Vorwärtstrich wie */. Ein Kommentar für die Java-Dokumentation beginnt mit einem Vorwärtsschrägstrich und zwei Sternen wie /** und endet mit einem Stern und einem Vorwärtsstrich wie */.

Einzeiliger, Mehrzeiliger und Dokumentationskommentar in Java

Standardmäßig werden die Klassen in einen Standardordner gespeichert. Sie sollten Ihre Klassen in einen domänenspezifischen Ordner lagern, wie zum Beispiel bank für Klassen die für einen Bankanwendung gedacht ist. Die Klasse, welche die Main-Methode enthält sollte das Schlüsselwort package in der ersten Zeile, bzw. der Zeile nach einen Kommentar enthalten. Nach dem Schlüsselwort package folgt dann der Paketname wie package bank. Der Paketname sollte Kleingeschrieben werden.

Definition eines Paketes in Java

Wie können weitere Klassen in ein Java-Programm oder Java-Prozedur eingebunden werden?

Das Schlüsselwort Import ermöglicht Ihnen die Einbindung einer oder mehrerer Klassen aus anderen Ordnern oder Packages als Ihr aktuelles in Ihr Programm. Sie können die Klasse die importiert werden soll direkt ansprechen, zum Beispiel Import temp.andererklassenordner.AndereKlasse.java. Wen Sie mehrere Klassen aus einem anderen Ordner oder Paket verwenden können Sie mit einer Wildcard nach dem Ordnernamen die Klassen miteinbinden wie zum Beispie temp.andereklassenordner.*.

Einbindung durch Import einer Java-Klasse: AndereKlasse.java aus einem Ordner oder Einbindung aller Klasse aus dem Paket andererklassenordner

Wie können Daten im Speicher des Computer innerhalb des Java Programms gesetzt oder gelesen werden?

Innerhalb eines Programms werden Daten in den Speicher gesetzt („set“) und vom Speicher gelesen („get“). Diese Daten können von verschiedenen Types wie primitive Datentypen oder Referenztypen sein. Mt primitiven Datentypen wie einer Ganzzahl können beispielsweise die Anzahl der Kunden welche die Anwendung gerade verwenden gezählt werden z.B. 1, 2, 3 oder 5 Kunden. Es kann nun sein, dass mehrere Millionen Kunden die Anwendung verwenden. Java bietet verschiedene Ganzzahldatentypen an, welche einen bestimmten Wertebereich haben, bspw. [-128 bis 127] für einen Byte Datentyp. Es werden die Ganzzahltypen wie byte, short, int und long von Java für die Speicherung von Ganzzahlen angeboten. Der Wertebereich beschränkt sich hierbei auf die Anzahl der zur Verfügung stehenden Bits. Für den Datentyp byte sind es 8 Bit, für den nächstgrößeren Datentyp wie short sind es 16 Bit, für int sind es 32 Bit und für long sind es 64 Bit. Bei der Wertezuweisung muss bei einem Long-Datentyp zusätzlich ein L vor die Ganzzahl gestellt werden wie bspw. long myLong = 1245L;. Desweiteren kann mit den Datentyp Boolean ein Wahrheitstyp gespeichert und eine Wahrheitsprüfung stattfinden (zum Beispiel hat der Kunde gekauft (true) oder hat der Kunde nicht gekauft (false)). Wahr (true) und Unwahr (false) stehen hierfür repräsentativ für die Zahlen 1 und 0. Der Boolean Datentyp hat somit 1 Bit als Wertbereich zur Verfügung (1 steht repräsentativ für true und 0 steht repräsentativ für 0).

Es können zudem Gleitkommazahlen wie 1.2 oder 4.5 (amerikanisches Komma; Java entspringt den USA) in Java verwendet und mittels den Compiler gespeichert werden. Hierbei spielt die Genauigkeit in Java eine Rolle. Bspw. können Zahlen welchen mit dem Gleitkommazahltyp double (64 Bit IEEE 754 Genauigkeit) genauer gespeichert werden, als mit dem Gleitkommazahlentyp float (32 Bit IEEE 754 Genauigkeit). Die Genauigkeit wird durch die Spezifikation IEEE 754 festgelegt.

Wie können Zustände oder Werte in Variablen in Java verändert werden?

Setzen (Set) und Lesen (Get) von Variablen

Methoden sind logische Codebausteine in Java welche es ermöglichen die Werte oder auch Zustände (wie 10101 im Speicher) von Objektvariablen, Klassenvariablen oder lokalen Variablen zu verändern oder neu zu setzen. Es wird hierbei unterschieden zwischen einer statischen Methode und einer Objektmethode. Ein Konstruktor ist eine Methode, welche bei der Erstellung eines Objektes aufgerufen wird und mit denen bspw. Objektvariablen wie der Anfangskontostand bei der Eröffnung eines Kontos gesetzt werden kann.

Der Aufbau einer Methode muss für den Compiler in einer entsprechenden Form erfolgen. Die Deklaration einer Methode erfolgt mit einem Sichtbarkeitattribut wie public oder privat. Sodann folgt eine Eingabe des Rückgabetyps wie void oder int für Ganzzahlen. Sofern es sich um eine Setter-Methode handelt, wird der Rückgabetyp void angegeben, da kein Wert einer Variablen (Objektvariablen oder Klassenvariablen) vom Speicher gelesen sondern gesetzt wird.

Setter-Methode zum Setzen einer Objektvariable oder Klassenvariable

Sofern die übergebene lokale Variable in der Methodensignatur oder in einem Codeblock, logischen Codebereich innerhalb der Methode, mit dem selben Namen deklariert ist wie die Objektvariable, so kann mit dem this Operator die Objektvariable angesprochen werden.

Setter-Methode zum Setzen einer Objektvariable bei gleichnamigen lokalen Variable.

Sofern es sich um eine Getter-Methode handelt, wird entsprechend der Datentyp angegeben, welchen die Variable hat, die aus dem Speicher gelesen wird. Der Wert der Variablen wird mit dem Schlüsswort return an die aufrufende Prozedur, Programmteil oder Code-Block zurückgegeben.

Getter-Methode zum Erhalten einer Objektvariable oder Objektreferenz aus dem Speicher

Zudem gibt es sogenannte Referenzvarialben wie String (das großgeschriebene S weißt auf eine Klasse hin). Eine Variable oder Feld des Typs String stellt eine Referenz zu einem Objekt im Heap oder Speicher dar. Bei der Deklarierung und Initialisierung von String name = „meinName“; referenziert die Variable name auf das Objekt „meinName“ im Speicher. Das Objekt ist vom String.

Unabhängig von Methoden ist es auch möglich, über sogenannte Intialisierungblöcke die Variablenzustände oder Werte zu verändern. Diese werden ohne Methodensignatur oder Sichtbarkeitsattribut im Programm platziert. Es werden zur Deklaration die geschweiften Klammern angeben { } . Innerhalb der geschweiften Klammern befinden sich Zuweisungen der Variablen. Eine Initialisierungsblock wird beispielsweise zur gleichen Initialisierung von Variablen in verschiedenen Konstruktoren einer Klasse verwendet. Man spricht in diesem Zusammenhang auch von Überladung d.h. es können den Konstruktoren oder Methoden verschiedene Übergabeparameter bei Aufruf derselben Methode (hier MyClass) übergeben werden.

Intialisierungsblock mit setzen von Anfangswerten einer Objektvariable
Intialisierungsblock zun Setzen von Anfangswerten einer Objektvariable für Konstruktoren mit verschiedenen Übergabeparametern (Überladung)

Der Compiler übersetzt nach einer bestimmten Reihenfolge die logischen Bausteine im Java-Programm. Es werden vorerst die Variablen jeglichen Typs (Objektvariable, statische Variable oder Klasenvariable) übersetzt, dann die Initialisierungsblöcke, Konstruktoren und Methoden.

Welchen Typ von Variablen gibt es in Java?

Objektvariablen werden außerhalb von Methoden deklariert. Sie können außerhalb von Methoden initialisiert, d.h. das Ihnen ein Wert oder Zustand im Speicher zugewiesen wird, werden. Die Objektvariablen wie kontonummer oder kontostand sind an ein Objekt gebunden wie zum Beispiel an konto der Klasse konto. Der Gültigkeitsbereich von Objektvariablen erstreckt sich über den Zeitraum der Lebenszeit des Objektes.

Klasse Konto mit Objektvariablen und Objekt konto

Ein Objekt wird vom GarbageCollector entfernt, wenn es nicht mehr erreicht werden kann z.B. am Ende einer Methode oder wenn die Referenzvariable auf ein anderes als das ursprüngliche Objekt im Speicher zeigt oder auf null zeigt. Ab Zeile 9 wäre im folgenden Beispiel das kontoMustermann zur Entfernung aus dem Speicher freigegeben. Ab Zeile 10 wäre das Objekt kontoMusterfrau zur Entfernung aus dem Speicher freigeben.

Garbage Collector in Java

Sofern die Objektvariable bei der Deklaration nicht initialisiert wurde, wird den Variablen ein Standardwert zugewiesen.

Objektvariable ohne Initialisierung: myObjectVariable

Für die Datentypen gelten folgende Standardwerte:

boolean: false; byte: 0; short: 0; int: 0; long: 0L; float: 0.0f; double: 0.0d; char: ‚\u0000‘; String: null; Andere Referenzobjekte (eingeschloßen String): null;

Klassenvariablen werden außerhalb von Methoden deklariert. Sie können außerhalb von Methoden initialisiert, d.h. das Ihnen ein Wert oder Zustand im Speicher zugewiesen wird. Der Compiler unterscheidet eine Objektvariable von einer Klassenvariablen indem der Zusatz static vor den Datentypen gestellt wird. Der Gültigkeitsbereich von Klassenvariablen erstreckt sich über den Zeitraum der Lebenszeit des Programms.

Deklaration und Initialisierung einer statischen Variable oder Klassenvariable: myStaticVariable

Lokale Variablen werden innerhalb von Methoden deklariert und initialisiert d.h. das Ihnen ein Wert oder Zustand im Speicher zugewiesen wird. Der Gültigkeitsbereich von lokalen Variablen erstreckt sich über den Codeblock (den geschweiften Klammern: {}) in dem Sie definiert wurden, als auch den darin enthaltenen Codeblöcken innerhalb der Methode.

Deklaration und Initialisierung einer lokalen Variable : myLocalVariable
Deklaration und Initialisierung von lokalen Variable In verschiedenen Codeblöcken innerhalb einer Methode: myLocalVariable, myInnerLocalVariable, myInneInnerLocalVariable

Um ein Objekt im Speicher zu verwenden, wird eine Referenz zum Objekt im Speicher oder genauer Heap (ein Teil des Speichers) benötigt. Eine Referenz zu einem Objekt kann bspw. folgendermaßen deklariert und initialisiert werden. String name = „meinName“; oder String name = new String();. Hierbei handelt es sich um eine Referenz zu einem Objekt des Typs String. Die Referenz wird als Variable mit einem Variablennamen im Programm gespeichert.

Deklaration und Initialisierung einer Objektvariable : myObjectVariable

Referenzen zu Objekten haben immer die gleiche Größe, dagegen Objekte auf die Sie die Referenzen referenzieren nicht. Die Speichergröße eines Objektes im Speicher hängt von den Ihm zugehörigen Datentypen der Objektvariablen ab. Eine Referenz zu einem Objekt ermöglicht es, auf die Methoden und die Variablen des Objektes zuzugreifen.

Weiterführende Literatur

  • OCA: Oracle Certified Associate Java SE 8 Programmer I Study Guide: Exam 1Z0-808 von Jeanne Boyarsky, Scott Selikoff, 2015
  • Java als erste Programmiersprache von Joachim Goll und Cornelia Heinisch, 2016
  • Grundkurs JAVA von Dietmar Abts, 2016
  • The Java™ Tutorials von Oracle

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 5 / 5. Anzahl Bewertungen: 2

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Weil du diesen Beitrag nützlich fandest...

Folge uns in sozialen Netzwerken!

Es tut uns leid, dass der Beitrag für dich nicht hilfreich war!

Lasse uns diesen Beitrag verbessern!

Wie können wir diesen Beitrag verbessern?

Categories: