Einführung in die Erzeugung von Exemplaren von Klassen in Java im Rahmen der Lehre des Programmierens mit der Programmiersprache Java. (Java: new, Exemplarerzeugung, neues Objekt erstellen, neue Objekte erzeugen, herstellen, anlegen, Autoboxing Wie werden Objekte erzeugt), Lektion, Seite 721516
https://www.purl.org/stefan_ram/pub/java_exemplarerzeugung_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Erzeugungsausdrücke in Java

Das Objekt "java.lang.System.out" existiert bereits beim Start der Methode "main" einer Java -Applikation.

Es ist aber auch möglich, zur Laufzeit weitere Objekte einer Klasse zu erzeugen. Wir haben dies auch schon getan, etwa in manchen Fällen der Verwendung des Plusoperators »+« mit Operanden vom Typ »java.lang.String«.

Solche zur Laufzeit erzeugte Objekte werden manchmal auch als dynamische Objekte  im Gegensatz zu den während eines Programm ständig bestehenden statischen Entitäten genannt.

Daher werden auch die Operationen einer Klasse also statische Operationen  bezeichnet. Klassen werden ja in Java  nicht zur Laufzeit erzeugt, und sie damit sozusagen statisch. Die Operationen von Objekten kann man also auch als nicht-statische Operationen  einer Klasse bezeichnen.

Die Erzeugung eines Objekts einer Klasse kann auch mit Hilfe eines Erzeugungsausdrucks  erfolgen – dies ist das Thema dieser Lektion. Wir gehen hier eine vereinfachte Produktionsregel für solche Erzeugungsausdrücke an. Die angegebene Klasse wird der Typ des erzeugten Objekts. Das erzeugte Objekt ist dann der Wert des Erzeugungsausdrucks.

Erzeugungsausdruck
ClassInstanceCreationExpression 〉 ::=
"new" 〈Class 〉 "(" [〈ArgumentList 〉] ")".

Beispielsweise ist der Wert des Erzeugungsausdrucks »new java.lang.Object()« ein neues Objekt der Klasse »java.lang.Object«, der Typ des Ausdrucks »new java.lang.Object()« ist dabei ebenfalls »java.lang.Object«, der Wert des Erzeugungsausdrucks »new java.lang.String()« ist ein neues Objekt der Klasse »java.lang.String«, der Typ des Erzeugungsausdrucks »new java.lang.String()« ist dabei ebenfalls »java.lang.String«, und so weiter.

Bei der Auswertung solch eines Erzeugungsausdrucks wird ein neues Objekt der Klasse Class  erzeugt. Der Wert des Ausdrucks ist das erzeugte Objekt. Die Bindungskraft (Priorität) dieses Operators ist dieselbe, wie die eines Vorzeichens, er bindet also stärker als eine Multiplikation.

»new« ist ein Schlüsselwort.

Hinter »new« sind als Referenztyp nur Klassen, aber keine Schnittstellen oder andere Arten von Referenztypen möglich.

Referenztypname

|
.----------------------'----------------------.
| |

Klassenname Schnittstellenname

nach "new" moeglich NICHT nach "new" moeglich

Ausdrucktyp Der Typ eines Ausdrucks  kann ein Referenztyp (also eine Klasse oder eine Schnittstelle ) sein.

Objekttyp Der Typ eines Objekts  ist immer eine Klasse.

In dem folgenden Programm wird ein Objekt der Klasse "java.lang.Object" erzeugt, allerdings hat die Ausführung dieses Programms keine von außen erkennbare Wirkung.

Main.java
public final class Main 
{ public static void main( final java.lang.String[] args ) 
{ new java.lang.Object(); }}

System.out

Erzeugungsregel Ein Erzeugungsausdruck  hat den hinter »new« angegebenen Typ. Sein Wert  ist ein Objekt, welches die hinter »new« angegebene Klasse hat.

Lesehinweis Der Nutzen  von Exemplarerzeugungsausdrücken wird erst gegen Ende dieser Lektion erkennbar werden – insbesondere bei den Übungsaufgaben. Daher bitte etwas Geduld, wenn es zunächst nicht gleich erkennbar wird, wofür Exemplarerzeugungsausdrücke gut sind!

Erzeugungsargumente

Etwaige Ausdrücke in den runden Klammern werden (wie bei einem Aufruf) Argumente  genannt. Die Regeln für die Argumentliste in den runden Klammern sind wie bei einem Methodenaufruf.

Erzeugungsanweisungen

Ein Erzeugungsausdruck darf vor ein Semikolon »;« geschrieben werden, um mit ihm zusammen eine Anweisung  zu bilden (wie oben schon zu sehen war).

Unterschiede zwischen Objekten und Klassen (erweitert)

Objekte und Verzeichnisklassen sind beides Sammlungen von Methoden und Feldern, aber nur Objekte lassen sich im Quelltext durch Ausdrücke angeben, Klassen werden im Quelltext durch Namen angegeben, die keine Ausdrücke sind.

Es ist möglich, während des Programmablaufs neue Objekte zu erzeugen, es ist aber nicht möglich, während des Programmablaufs neue Klassen zu erzeugen.

Ein Erzeugungsausdruck mit dem Schlüsselwort "new" ist wie eine Maschine, die ein neues Objekt einer Klasse herstellt.

Erzeugung und Benennung eines Objektes

Hier werden zwei java.lang.String-Objekte erzeugt. Bei der hier gezeigten Art der Erzeugung ist ihre Länge gleich »0«.

Main.java
public class Main
{ public static void main( final java.lang.String[] args )
{ final java.lang.String s = new java.lang.String();
final java.lang.String t = new java.lang.String();
java.lang.System.out.println( s.length() );
java.lang.System.out.println( t.length() ); }}
transcript
0
0

Argumente von Erzeugungsausdrücken

In einem Erzeugungsausdruck können bei einigen Klassen auch Ausdrücke innerhalb der runden Klammern verwendet werden.

Beispielsweise kann zu einer Zeichenfolge »s« mit »new java.lang.String( s )« eine neue Zeichenfolge erzeugt werden. Obwohl die neue Zeichenfolge den gleichen Text enthält, handelt es sich dann doch um eine andere Folge.

Main.java
public class Main
{ public static void main( final java.lang.String[] args )
{ final java.lang.String a = "Hallo!";
final java.lang.String s = new java.lang.String( "Hallo!" );
final java.lang.String t = new java.lang.String( "Hallo!" );
final java.lang.String u = new java.lang.String( "Delta!" );
java.lang.System.out.println( a );
java.lang.System.out.println( s );
java.lang.System.out.println( t );
java.lang.System.out.println( u ); }}
transcript
Hallo!
Hallo!
Hallo!
Delta!

Solche Ausdrücke in den Klammern eines Erzeugungsausdrucks nennen wir auch Argumente  des Erzeugungsausdrucks (in Analogie zu Argumenten eines Aufrufs).

Man beachte daß in der Deklaration "final java.lang.String s = new java.lang.String( "Hallo!" );" der Typ "java.lang.String" zwiefach auftritt: Zuerst als Typ der Konstanten "s" und dann also Typ eines neu anzulegenden Objekts.

Ein beliebter Flüchtigkeitsfehler ist es bei manchen Programmierern, das Schlüsselwort "new" zu vergessen, da die scheinbare Deklaration "final java.lang.String s = java.lang.String( "Hallo!" );" auch plausibel aussieht und in einigen anderen Programmiersprachen so möglich ist.

Bei Verwendung eines java.lang.String-Literals ist die ausdrücklich Erzeugung mit einem Erzeugungsausdruck natürlich meist unnötig kompliziert, da anstelle des Ausdrucks "new java.lang.String( "Hallo!" )" meist einfach der Ausdruck ""Hallo!"" verwendet werden kann. In anderen Fällen, die wir später sehen werden, kann der Gebrauch von »new« aber nötig sein.

Dokumentation von Argumenten von Erzeugungsausdrücken

Die Dokumentation der möglichen Argumente eines Erzeugungsausdrucks findet sich unter “Constructor Summary ” in der verwendeten Klasse.

Konstruktoren

Der Wert des Erzeugungsausdrucks »new java.lang.String( "" )« ist ein Objekt vom Typ »java.lang.String« mit dem Wert »""«. Der Ausdruck »""« ist ein Argument  dieses Erzeugungsausdrucks. Woher weiß man aber, welche Argumente hier zulässig sind? Das kann der Dokumentation der Klasse »java.lang.String« unter der Überschrift “Constructor Summary ” („Konstruktoren“) entnommen werden.

java.lang.String-Erzeugungsparameter (Synopse)

java.lang

Class java.lang.String

Constructor Summary

String()

Constructs a newly allocated String object that
represents an empty character sequence.

String( String s )

Constructs a newly allocated String object that
represents the same sequence of characters as the
argument.

Die Angaben in den runden Klammern der Proklamationen der Konstruktoren bezeichnen wird als Parameterbeschreibungen. Entsprechend können Konstruktoren also auch Parameter  haben (in Analogie zu Methoden). Man kann das über die Dokumentation von Parametern bei Methoden Gesagte auf die Parameter von Konstruktoren übertragen.

Die Dokumentation der Klasse gibt hier an, daß eine Erzeugungsmöglichkeit, einen sogenannten Konstruktor, ohne Parameter und eine Erzeugungsmöglichkeit mit einem Parameter vom Typ »java.lang.String« in der Klasse enthalten ist wird.

Der folgende Quellcode zeigt die Verwendung beider Konstruktoren.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final java.lang.String s = new java.lang.String();
final java.lang.String t = new java.lang.String( "" );
java.lang.System.out.println( s );
java.lang.System.out.println( t );
java.lang.System.out.println( s.getClass() == t.getClass() ); }}
transcript


true

Ein Konstruktor  in der Dokumentation einer Klasse beschreibt eine Möglichkeit zum Schreiben eines Erzeugungsausdrucks, indem er den hinter »new« zu schreibenden Typ angibt (beispielsweise »java.lang.String«) und durch eine Liste von Parameterdeklarationen wie bei der Dokumentation einer Methode angibt, welche Argumente in solch einem Erzeugungsaudruck verwendet werden können. (Ähnlich wie bei der Dokumentation von Methoden.)

Überladene Konstruktoren

Für die Argumentliste ArgumentList  eines Erzeugungsausdruck zu einer bestimmten Klasse gibt es oft verschiedene zulässige Möglichkeiten der Anzahl und der Typen der Argumente. Durch verschiedene Typen von Argumentlisten können Objekte in verschiedener Weise erzeugt werden.

So kann ein Objekt der Klasse "java.lang.String" beispielsweise mit einer leeren Argumentliste  erzeugt werden, um dem leeren Text zu repräsentieren, oder mit einem anderen String, um dessen Text zu repräsentieren.

Main.java
public final class Main 
{ public static void main( final java.lang.String[] args ) 
{ java.lang.System.out.println( new java.lang.String() ); 
java.lang.System.out.println( new java.lang.String( "Hallo!" ) ); }}

System.out
 
Hallo!

Hinweis für den Dozenten  ► N: Hilfe bei Argumenten von Erzeugungsausdrücken

Priorität

Ein Erzeugungsausdruck gilt als ein Primärausdruck und hat damit eine „sehr hohe Priorität“, so daß er in der Regel nicht eingeklammert werden muß, wenn er als Operand verwendet werden soll, wie das folgende Beispiel zeigt.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( new java.lang.String( "Hallo!" ).length() ); }}
transcript
6

Benennung eines neuen Objektes

Wenn ein neues Objekt einer Klasse erzeugt und benannt werden soll, dann muß der Klassenname meistens doppelt notiert werden. In der Deklaration "final java.lang.String s = new java.lang.String();" gibt das erste "java.lang.String" den Type der Konstante an und das zweite "java.lang.String" den Typ des zu erstellenden Objekts.

Objektbenennung
final java.lang.String s = new java.lang.String();

Wegen einer vermeintlichen Redundanz dieser Deklaration oder aufgrund von Übertragungen aus anderen Programmiersprachen wird zur Erzeugung einer Konstanten für ein neues java.lang.String-Objekt manchmal versehentlich fälschlicherweise nur "final java.lang.String s;" geschrieben. Dadurch wird aber kein neues Objekt erzeugt, sondern nur eine nicht-initialisierte Konstante. Zur Erzeugung einer Konstanten, deren Wert ein neues Objekt einer Klasse ist, darf also der Erzeugungsausdruck nicht vergessen werden.

Allerdings muß der Typ eines Namens nicht mit dem Typ des Objektes, welches der Wert des Namens ist, übereinstimmen, in einer Deklaration mit Erzeugung können auch zwei verschiedene Typen  auftreten. Der Typ des Namens muß ein Obertyp des Typs des Initialisierungsausdrucks  sein.

Objektbenennung 1
final java.lang.Object o = new java.lang.String();

?    Übungsfrage
Welcher Fehler findet sich in dem folgenden Programm?
Main.java
public final class Main 
{ public static void main( final java.lang.String[] args ) 
{ final java.lang.Object o; 
java.lang.System.out.println( o ); }}

Syntax

Das folgende Syntaxdiagramm für Ausdrücke wurde um die Syntax für Erzeugungsausdrücke erweitert.

Neue, erweiterte Syntax (vereinfacht)

Ausdruck
.----------.
---.----------->| Literal |---------------------------.---->
| '----------' |
| .----------. |
'----------->| Name |---------------------------'
| '----------' |
| .-. .----------. |
'--->( - )-->| Ausdruck |---------------------------'
| '-' '----------' |
| .-. .----------. |
'--->( + )-->| Ausdruck |---------------------------'
| '-' '----------' |
| .-. .----------. .-. |
'--->( ( )-->| Ausdruck |-->( ) )-------------------'
| '-' '----------' '-' |
| .----------. .-. .----------. |
'----------->| Ausdruck |-->( / )-->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'----------->| Ausdruck |-->( + )-->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'----------->| Ausdruck |-->( - )-->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'----------->| Ausdruck |-->( * )-->| Ausdruck |----'
| '----------' '-' '----------' |
| .---------------------. |
'----------->| statischer Aufruf |----------------'
| '---------------------' |
| .---------------------------. |
'----------->| nicht-statischer Aufruf |----------'
| '---------------------------' |
| .----------------------. |
'----------->| Erzeugungsausdruck |---------------'
'----------------------'
Name
.-----------------------.
| .------. .-. v .------------------------.
---'--->| Name |-->( . )---'--->| Bezeichnerzeichenfolge |--->
'------' '-' '------------------------'

statischer Aufruf
.-------. .-. .---------------. .-.
--->| Name |--->( ( )--->| Ausdruckliste |--->( ) )--->
'-------' '-' '---------------' '-'

nicht-statischer Aufruf
.-----------. .-. .------------. .-. .---------------. .-.
--->| Ausdruck |--->( . )--->| Bezeichner |--->( ( )--->| Ausdruckliste |--->( ) )--->
'-----------' '-' '------------' '-' '---------------' '-'

Ausdruckliste
.---------------------------.
| .----------. v
---'---.--->| Ausdruck |---.---'--->
^ '----------' |
| .-. |
'-------( , )<------'
'-'

Erzeugungsausdruck
.---. .-------. .-. .---------------. .-.
--->( new )--->| Name |--->( ( )--->| Ausdruckliste |--->( ) )--->
'---' '-------' '-' '---------------' '-'

»new« ist ein Schlüsselwort. (Wie schon weiter oben gesagt.)

Hinter »new« muß in der Regel Leeraum  eingefügt werden, um jenes Schlüsselwort von dem folgenden Namen einer Klasse abzutrennen.

Anforderungen

Zu einem Erzeugungsausdruck muß es in der Klasse, deren Name hinter »new« folgt, einen Konstruktor geben, dessen Parameterliste zu der Ausdruckliste des Exemplarerzeugungsausdrucks paßt (so wie bei einer Methode die Parameterliste zur Argumentliste des Aufrufs passen muß).

Typregeln

Der Typ des Ausdrucks »new T (…)« ist »T «, also der hinter »new« angegebene Typ.

Der Typ des Objekts, welches der Wert des Ausdrucks »new T (…)« ist, ist ebenfalls »T «, also der hinter »new« angegebene Typ.

Semantik

Bei der Auswertung eines Erzeugungsausdrucks wird der am besten zur verwendeten Argumentliste passende Konstruktor verwendet, um eine neues Objekt der angegebenen Klasse zu initialisieren (also einzurichten). Der Wert des Erzeugungsausdrucks ist dann jenes neue Objekt nach jener Initialisierung.

Verschachtelte Erzeugungsausdrücke

Häufig kommen auch verschachtelte Erzeugungsausdrücke wie »new java.lang.Integer( new java.lang.String( "4" ))« vor. Dabei wird mit dem inneren Ausdruck ein Objekt erzeugt, das dann als Argument des äußeren Ausdruckes dient. An dieser Stelle des Kurses können wir aber noch kein sinnvolles Beispiel für solch eine Verschachtelung zeigen.

Die Zweifelsregel

Zweifelsregel Im Zweifelsfall wähle man als Variablentyp den Typ des erzeugten Objektes.

Beispiele zur Zweifelsregel

final java.lang.String s = new java.lang.String();

final var s = new java.lang.String();

Echte Obertypen für Variablentypen

Stilistisch etwas besser ist es manchmal, wenn der Typ der Variablen gerade so weit oben ist, wie dies angesichts der folgenden Verwendung noch möglich ist.

Im folgenden Programm wird beispielsweise nach der Deklaration von »sequence« nur die Methode »length()« benötigt. Dafür reicht bereits die Schnittstelle »java.lang.CharSequence« aus. Der Typ »java.lang.String« ist nicht unbedingt nötig.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final java.lang.CharSequence sequence = "abc";
java.lang.System.out.println( sequence.length() ); }}
Protokoll
3

Ein Vorteil dieser Vorgehensweise besteht darin, daß es dann später einfacher ist, bei Bedarf (wenn dies das Programm beispielsweise schneller macht) für die Variable ein Objekt einer anderen Klasse einzusetzen, ohne daß der Typ der Variablen nochmals angepaßt werden muß.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final java.lang.CharSequence sequence = new java.lang.StringBuilder( "abc" );
java.lang.System.out.println( sequence.length() ); }}
Protokoll
3

Auch wenn man heute »var« verwenden könnte, dokumentiert ein möglichst hochstehender Obertyp besser, welche Methoden im Rest des Codes wirklich benötigt werden.

Übungsfragen

?   Übungsfrage

Der Typ einer Variablen muß ein __________ des Typ des in der Variablen enthaltenen Objektes sein.

Welches Wort muß an Stelle der Lücke stehen? („Obertyp“ oder „Untertyp“?)

?   Übungsfrage 1

Der Typ eines Argumentes muß ein __________ des Typs des zu ihm gehörenden Parameters sein.

Welches Wort muß an Stelle der Lücke stehen? („Obertyp“ oder „Untertyp“?)

?   Übungsfrage 2

Der Typ einer Variablen, die in einer Zuweisung links vom Gleichheitszeichen steht, muß ein __________ des Typs des Ausdrucks auf der rechten Seite des Gleichheitszeichens sein.

Welches Wort muß an Stelle der Lücke stehen? („Obertyp“ oder „Untertyp“?)

?   Übungsfrage 3

Welchen Typ hat ein Aufruf der nicht-statischen Methode »intValue()« aus der Klasse »java.lang.Integer«?

Können Sie der Dokumentation entnehmen, welchen Nutzen diese Methoden haben soll?

?   Übungsfrage 4 ⃖

Welcher der beiden unten beschriebenen Konstruktoren wird für die Auswertung des Erzeugungsausdrucks »new java.lang.String()« herangezogen (also verwendet)?

Welcher der beiden unten beschriebenen Konstruktoren wird für die Auswertung des Erzeugungsausdrucks »new java.lang.String( "abc" )« herangezogen?

java.lang.String-Konstruktoren (Auszug)

java.lang

Class java.lang.String

Constructor Summary

String()

Constructs a newly allocated String object that
represents an empty character sequence.

String( String s )

Constructs a newly allocated String object that
represents the same sequence of characters as the
argument.

Übungsaufgaben

/   Übungsaufgabe

java.lang.Integer-Erzeugungsparameter (Synopse)

java.lang
Class java.lang.Integer

Constructor Summary

Integer( int i )

Erzeugt eine neues Objekt der Klasse »java.lang.Integer« mit dem angegebenen int-Wert.

Erzeugen Sie ein neues Objekt der Klasse »java.lang.Integer«, indem Sie einen Erzeugungsausdruck mit einem int-Argument verwenden, und geben Sie das neue Objekt mit Hilfe von »java.lang.System.out.println« aus.

Zusatzanforderung Geben Sie dann auch noch das Ergebnis des Aufrufs der Methode »intValue()« jenes Objektes aus.

Unter einem int-Argument  verstehen wir hier ein Argument, dessen Typ der Typ »int« ist.
Ein Erzeugungsausdruck endet mit einer eingeklammerten Ausdruckliste. Ein Argument  eines Erzeugungsausdrucks ist einer der Ausdrücke jener Ausdruckliste.

/   Einführung von Namen (Beispielaufgabe)

Das folgende Beispiel zeigt wie ein Name für den Wert eines Ausdrucks eingeführt wird. Dabei wird der Ausdruck durch einen noch verfügbaren Namen ersetzt, der Name wird dann davor so definiert, daß sein Wert der Wert des ersetzten Ausdrucks ist.  (Diese Umstellung ist nicht immer ein Refaktor, aber sie ist es in den folgenden Aufgaben.)

Vor der Einführung eines Namens (Aufgabe)
java.lang.System.out.println( 2 );
Nach der Einführung eines Namens (Lösung)
final int i = 2;
java.lang.System.out.println( i );

Beachten Sie, wie der Programmierer oben den richtigen Typ – nämlich »int« – für den neuen Namen festgelegt hat. Auch bei den folgenden Aufgaben ist es wichtig, jeweils den richtigen Typ festzulegen. Im allgemeinen sollte dies der Typ des Initialisierungsausdrucks  der Namensdeklaration sein.

/   Objekterzeugung ⃗

Erzeugen Sie ein neues Objekt der Klasse »java.lang.Double«, indem Sie einen Erzeugungsausdruck verwenden, und geben Sie das neue Objekt mit Hilfe von »java.lang.System.out.println« aus.

Zusatzanforderung Geben Sie dann auch noch das Ergebnis des Aufrufs der Methode »doubleValue()« jenes Objektes aus.

/   Einführung von Namen

Führen Sie einen Namen für den Ausdruck in den Klammern hinter »println« ein!

Vor der Einführung eines Namens (Aufgabe)
java.lang.System.out.println( new java.lang.Object() );

/   Einführung von Namen (1)

Führen Sie einen Namen für den Ausdruck in den Klammern hinter »println« ein!

Vor der Einführung eines Namens (Aufgabe)
java.lang.System.out.println
( new java.awt.geom.Point2D.Double( 8, 1 ) );

An diesem Beispiel kann man nun auch den Nutzen  von Erzeugungsausdrücken besser erkennen: Ohne »new« könnte man gar keine Objekte der Klasse »java.awt.geom.Point2D.Double« anlegen!

»java.awt.geom.Point2D.Double« ist der Name einer Klasse.

Ein Typ kann auch in einem anderen Typ enthalten sein. Die Klasse »java.awt.geom.Point2D.Double« ist in dem Typ »java.awt.geom.Point2D« enthalten. Daher ergibt sich der Name »Point2D.Double«.

/   Übungsaufgabe

Erzeugen Sie ein neues Objekt der Klasse »java.lang.String«, indem Sie einen Erzeugungsausdruck verwenden, und geben Sie das neue Objekt mit Hilfe von »java.lang.System.out.println« aus.

Erzeugen Sie alsdann ein neues Objekt der Klasse »java.lang.StringBuilder«, indem Sie einen Erzeugungsausdruck mit dem zuvor erzeugten java.lang.String-Objekt als Argument verwenden, und geben Sie auch dieses neue Objekt mit Hilfe von »java.lang.System.out.println« aus.

Zusatzanforderung Geben Sie dann auch noch die Ergebnisse des Aufrufs der Methoden »getClass()« jener beiden Objekte aus.

/   Aufruf von Methoden eines Objektes

Rufen Sie die Methode »deleteCharAt(int)« des Objekts »new java.lang.StringBuilder( "Pluto" )« mit dem Argumentwert »2« auf, aber geben Sie dabei noch nichts aus. Erst dahinter soll dann noch eine Ausgabeanweisung folgen, mit der jenes Objekt dann ausgegeben wird. (Hierfür wird eine Variable für das Objekt benötigt!)

(zusätzliche Hilfestellung: Es soll also insgesamt nur einmal  »new« verwendet werden und »deleteCharAt( 2 )« soll nicht  in den Klammern hinter »println« stehen.)

/   Übungsaufgabe 1

Erzeugen Sie zwei neue Objekt der Klasse »java.lang.String« mit derselben Zeichenfolge, indem Sie jeweils einen Erzeugungsausdruck mit einem Zeichenfolgenliteral als Argument verwenden, und geben Sie den Wert des Aufrufs der Methode »equals« des einen Objektes mit dem anderen Objekt als Argumentwert aus. Geben Sie dann noch den Wert eines Vergleichs der beiden Objekte mit »==« aus.

/   Übungsaufgabe 2

Erzeugen Sie ein neues Objekt der Klasse »java.lang.NoSuchMethodException«, indem Sie einen Erzeugungsausdruck ohne Argumente verwenden, und geben Sie das neue Objekt mit Hilfe von »java.lang.System.out.println« aus.

Erzeugen Sie danach ein weiteres neues Objekt der Klasse »java.lang.RuntimeException«, indem Sie einen Erzeugungsausdruck verwenden, in welchem das Objekt als Argument verwendet wird, welches gemäß der Angaben im vorigen Absatz erzeugt wurde, und geben Sie das zweite neue Objekt nun ebenfalls mit Hilfe von »java.lang.System.out.println« aus.

Das zweite Objekt enthält eine Methode »getCause()«, die ein Objekt zurückgibt. Rufen Sie jene Methode auf und geben Sie den Wert des Aufrufs aus. Um welches Objekt handelt es sich bei diesem Wert vermutlich?

/   Einführung von Namen (2) ⃗

Führen Sie in dem folgenden Programm einen Namen für den Wert des Ausdrucks »"4"« ein und ersetzen Sie die Vorkommen des Ausdrucks »"4"« in Erzeugungsausdrücken dann durch jenen Namen.

Führen Sie dann einen Namen für das neu erzeugte java.lang.String-Objekt ein und ersetzen Sie dann das Argument des java.lang.Integer-Erzeugungsausdrucks durch jenen Namen.

Führen Sie dann einen Namen für das neu erzeugte java.lang.Integer-Objekt ein und ersetzen Sie dann das Argument von »println« durch jenen Namen.

Das Programm soll nach all diesen Ersetzungen immer noch »4« ausgeben.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( new java.lang.Integer
( new java.lang.String( "4" ))); }}
Protokoll
4

/   Einführung von Namen (3) ⃗

Vor dem Kapitel zu JavaFX  werden einige JavaFX -Programme schon als Übungsmaterial verwendet. Es ist aber nicht nötig, bei den folgenden Übungen bereits die Bedeutung der einzelne JavaFX -Klassen zu kennen. Diese werden etwas später im Kurs noch erklärt werden.

Weisen Sie das Objekt »new javafx.scene.control.TextField( "jkl" )« einem Namen zu. Rufen Sie dann die Methode »getText()« jenes Objektes auf und geben Sie den Wert des Aufrufs dann mit Hilfe von »java.lang.System.out.println« aus.

Die Lösung (Blockeinträge) sollte dafür in den folgenden Rahmen an die Stelle der Ellipse »« geschrieben werden. (Dieser Rahmen wird später im Kurs erklärt werden.)

Main.java

public final class Main extends
javafx.application.Application
{ public void start
( final javafx.stage.Stage stage )
{

javafx.application.Platform.exit(); }}

(Dieses Programm kann im 202. Jahrzehnt möglicherweise nicht mit einigen älteren Entwicklungsumgebungen gestartet werden.)

/   Einführung von Namen (4) ⃗

Überarbeiten Sie das folgende Programm, indem Sie für das vom zweiten  Erzeugungsausdruck erzeugte Objekt den Namen »textField« am Anfang des Blocks deklarieren. Jener Name soll dann bei der Erzeugung des javafx.scene.Scene-Objekts als Argument verwendet werden. Das Programm sollte sich nach der Änderung wieder so wie zuvor verhalten.

(Der Aufbau dieses Programmes wird später ausführlicher erklärt werden.)

(Solche Programme mit JavaFX  können durch Schließen ihres Fensters beendet werden.)

Main.java
public final class Main extends 
javafx.application.Application
{ public void start( final javafx.stage.Stage stage )
{ final javafx.scene.Scene s = new javafx.scene.Scene
( new javafx.scene.control.TextField
( "äöüÄÖÜ߀" ));
stage.setScene( s );
stage.show(); }}

/   Übungsaufgabe 3

Ersetzen Sie den Typ »java.util.ArrayList< java.lang.Integer >« der Variablen »list« in der Deklaration der Variablen durch einen in der Typhierarchie möglichst weit obenstehenden Typ, so daß der Rest des Programms weiterhin unverändert ablaufen kann.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )
{ final

java.util.ArrayList< java.lang.Integer >

list = new java.util.ArrayList< java.lang.Integer >();
list.add( 3 );
java.lang.System.out.println( list.get( 0 )); }}

Protokoll
3

Bei der Erledigung dieser Aufgabe sollen die ersten drei und die letzten drei Zeilen des Programms nicht  verändert werden.

/   Übungsaufgabe 4

Ersetzen sie im Ergebnis der vorigen Übungsaufgabe nun den Typ des erzeugten Objekts (»java.util.ArrayList< java.lang.Integer >«) durch einen anderen Untertyp  des Variablentyps, so daß der Rest des Programms weiterhin unverändert ablaufen kann.

main-Methode für ältere Entwicklungsumgebungen *

Bei einigen älteren Entwicklungsumgebungen ist bei Verwendungen der Methode »start(javafx.stage.Stage)« noch die folgende statische main-Methode hinzuzufügen.

main-Methode
public static void main( final java.lang.String[] args )
{ javafx.application.Application.launch( args ); }
Aussprachehinweis

launch ” /lɔnʧ/ (n)

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram721516 stefan_ram:721516 Java: new, Exemplarerzeugung, neues Objekt erstellen, neue Objekte erzeugen, herstellen, anlegen, Autoboxing Wie werden Objekte erzeugt objekte in java erzeugen; Wie werden Objekte erzeugt? java new source, source code,sourcecode, Programmier sprache java, Java Programm Java Programmiersprache Java Sprache Java Programmierung Programmieren in Java, Die Programmiersprache Java Javapgrammierung, Java-Programmierung, Java2, Java1.2, Java1.3, Java1.4, Java1.5, Java 2, Java 1.2, Java 1.3, Java 1.4, Java 1.5, Java 1.6, Java 1.7, Java 1.8, Java 8, Java 1.9, Java 9, Java 1.10, Java 10, Tiger, Dolphin, objektorientierte Programmierung, Java sun, , Softwareentwicklung, Software-Entwicklung, Software Entwicklung, Softwareprogrammierung, Software-Programmierung, Software Programmierung, Softwareherstellung, Software-Herstellung, Software Herstellung, Softwareerstellung, Software-Erstellung, Software Erstellung, Softwareengineering, Software-Engineering, Software Engineering, Softwareenginering, Software-Enginering, Software Enginering, Softwaremethodik, Software-Methodik, Software Methodik, Programmiermethodik, Programmier-Methodik, Programmier Methodik, Softwaredidaktik, Software-Didaktik, Software Didaktik, Methodik des Programmierens, Didaktik des Programmierens, Fachdidaktik des Programmierens, Fach-Didaktik des Programmierens, Programmieren, Programmierung, Computer Science, Informatik, Informatik, Informationspädagogik, Informationspaedagogik, Programmierer, programmieren, Quellcode, Quelltext, Quelle, Quellen, Informatiker, Fachinformatiker, Entwickler, mit Stil, mit Stiel, mit Still, , Einführung, Einfuehrung, Einführungen, Einfuehrungen, eLearning-Modul, e-Learning-Modul, eLearning-Module, e-Learning-Module, Kurs Berlin, Kurse Berlin, Kursus, Vortrag, Vorträge, Vortraege, Lehrgang, Lehrgänge, Lehrgaenge, kostenloses Lehrmaterial, kostenlose Lehrmaterialien, Vorlesung, Vorlesungen, Unterrichtseinheit, Unterrichtseinheiten, kostenloses Unterrichtsmaterial im Internet, kostenlose Unterrichtsmaterialien im Internet, Ausbildung, Ausbildungen, für die Ausbildung, Fortbildung, Fortbildungen, Weiterbildung, Weiterbildungen, Schulung Berlin, Schulungen Berlin, Internetschulung, Webschulung, Kursunterlage, Kursunterlagen, trainer Berlin, Didaktik, Informatikunterricht, Primer, Skript FH, Skripte FH, Skriptum FH, Skripts FH, Script FH, Scripte FH, Scriptum FH, Scripts FH, howto, how-to, how to, Lehrbuch, Buch, Bücher, Buecher, Bericht, Crash Kurs Berlin, Crash-Kurs Berlin, Crashkurs Berlin, Report, Sachtext, Sachtexte, Übung, Übungen, Uebung, Uebungen, course, PbclevtugFgrsnaEnz, lecture note, lecture notes, Tutorial, Tutor, Tutorium, Teacher, Lehrer Berlin, Trainer Berlin, Beratung Berlin, Anleitung zum, Anleitungen zum, Einführung, Einfuehrung, Einführungen, Einfuehrungen, Handbuch für, Handbücher, Handbuecher, Support, Diplomarbeit, Facharbeit, Hausarbeit, Hausarbeiten, Werk, Werke, Text, Übungsblatt, Uebungsblatt, Lösung, Loesung, Lösungen, Loesungen, Auflösung, Aufloesung, Auflösungen, Aufloesungen, Facharbeit, Facharbeiten, Forum, Training, manual, Folie, Folien, Lehrmittel, beratung, Definition von, Allgemeine Erklärung, Allgemeine Erklaerung, Allgemeine Erklärungen, Allgemeine Erklaerung, Allgemeine Erklaerungen, Einfache Erklärung einfach, Einfache Erklaerung einfach, Einfache Erklärungen, Einfache Erklaerung, Einfache Erklaerungen, zum Thema, FAQ, FAQs, Konzept, Lernkurs, Lern-Kurs, Lernkurse, Lern-Kurse, eine kurze Erklärung, Begriff, Begriffe, Erklärung zu Begriffen, begriffbestimmung, begriffbestimmung, Begriffsbestimmung, Begriffserklärung, Begriffserklaerung, Wort, Worterklärung, Worterklaerung, Definition, Beispiel, Beispiele, Bedeutung, Bedeutungen, was bedeutet, Begriffsdefinition, für Anfänger, fuer Anfaenger, für Einsteiger, für Beginner, zum selber Lernen, handout, hand out, web based training, WBT, Net Based Training, NBT, computer based training, CBT, virtual learning environment, virtual university, für die Schule, Seminar, Seminare, Vorgehensweise, Pädagogik, Paedagogik, Akademie, Onlineacademie, Onlineakademie, Wissen, Unterrichtsvorbereitung für das Fach, Unterricht, für Lehrer, für Lehrerinnen, Referat, Referate, Hausaufgabe, Hausaufgaben, Tip, Tipp. Tipps und Tricks, Tips und Tricks, Methode, Methoden, Methodik, Funktion, Funktionsweise, Aufbau, Prinzip, Grundlage, Grundlagen, Internetschulung, Unterlage, Unterlagen, Struktur, Frage, Fragen, Antwort, Antworten, Schulunterricht, zum erlernen, was ist das?, wie?, lerne, Onlineausbildung, Onlinelehrgang, Onlinekurs, Onlinebuch, Webbuch, Academy, Fachhochschule, FH, TFH, Hochschule, Universität, Universitaet, Uni, Schule, Berufsschule, Gymnasium, Erste Schritte mit, Dozent, Dozenten, Zusammenfassung, Übersicht, Term, Fachwort, Fachbegriff, Fachbegriffe, Grundbegriff, Grundbegriffe, Lektion, Lektionen, Bedienungsanleitung, Bedienungsanleitungen, Spezialist, Spezialisten, Coaching, Coach, Fachbuch, technologie, Unterschied zwischen, Unterschiede zwischen, lehren, unterrichten, für das Studium, für Studenten, für Studentinnen, für Studierende, für Schüler, für Schülerinnen, Wie kann ich, Wie kann man, Hilfe, selber, erstellen, Erstellung, Beginner, Online-Seminar, Online-Kurs, Online-Schulung, ich, gebrauchsanweisung, gebrauchsanleitung, Bedienungsanweisung, Einweisung, Kurzinfo, Internet-Kurs, Internet-Kurse, Online-Training, Intensiv, Intensivkurs, Vortragsreihe, Präsentation, Grundzüge, Mitschrift, Mitschriften, Verständnis, verstehen, anwenden, Hintergrundwissen, Hintergrund, Hintergründe, content, Funktionsprinzip, Schritt für Schritt; E-Learning; elearning; online learning; Fernlehre, Fernlehrgang, Fernlehrgänge, Referent, Referenten, Fernkurs, Fernkurse, Fernstudium, Fernschule, Fernuniversität, Fernlehrer, Denken, Qualifizierungsmaßnahme, Qualifizierung, Qualifizierungen, Volkshochschulkurs, Volkshochschulkurse, Internet-Learning-Plattform, Online-Learning-Plattform, E-Learning-Plattform, Internetlearning-Plattform, Onlinelearning-Plattform, Elearning-Plattform, jetzt, Kochbuch, einfach erklärt, Kenntnis, Kenntniss, Kenntnisse, deutsche Hilfe, lernen und verstehen; blended learning; courseware, Profi, Profis, professionell, professionelle, professionelles, profesionell, profesionelle, profesionelles, professionel, gekonnt, für Könner, Grundkurs, Leistungskurs, Aufbaukurs, Lehrtext, Lehrtexte, Fachtext, Fachtexte, Ausarbeitung, distance learning, Online Seminar, distance education, Online Tutorium, Online Tutorien, technology-based learning, Computer based learning, CBL, Internet Based learning, IBL, Web based learning, WBL, online-learning, OL, online-training, OT, CAI, Computer Assisted Instruction, CUU, Computerunterstützter Unterricht, Computer-unterstützter Unterricht, Know how, Grundkenntnis, Grundkenntnisse, Kompetenz, Schulungsunterlagen, Insiderwissen, Rat, Lehrerinnen und Lehrer, ABC, Überblick, Arbeitsblatt, Sekundarstufe, Oberstufe, Material, Materialien, Unterrichtsentwurf, Unterrichtsentwürfe, Lerntip, Lerntips, Lerntipp, Lerntipps, ebook, schnell lernen, Lerner, Lernender, Lernende Erwachsenenbildung, Frage und Antwort, Selbststudium, Selbstudium, Umschulung, , kostenlos, kostenlose, kostenloses, kosten los, kosten lose, kosten loses, gratis, free, frei, freie, freies, privat, private, privates, homepage, home-page, home page, website, web site, webpage, web-page, web page, webpages, web-pages, web pages, webseite, Web-Seite, Webseite, Webseiten, Web-Artikel, Web Artikel, online, on-line, on line, download downloaden, down load, or, deutsch, deutsche, deutsches, deutscher, Deutschland, deutschsprachig, deutschsprachige, deutschsprachiges, german, germany, and, uebersicht, Uerbersicht, uebersichten, Uebersichten, Übersicht, übersicht, Übersichten, übersichten, Uebersicht, uebersicht, Uebersichten, uebersichten, Info, Infos zu, Information über, ueber, Informationen über, Auskunft, Auskünfte, Auskuenfte, Dienst, PbclevtugFgrsnaEnz, Angebot, Angebote, Anbieter, server, für, fuer, in, an, keyword, keywords, key word, keywords, internet, internets, net, network, net work, networks, net works, web, www, world wide web, Theorie, Praxis, Anwendung, DV, IT, glossar, fachwörterbuch it-glossar, computer lexikon, Computerlexikon, Computer-Lexikon, Lexikon, computer lexicon, Computerlexicon, Computer-Lexicon, Lexicon, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 was ist ein, was ist das, was sind, definiere, definition, define, Inhalt, html, xhtml, free im netz, PDF Text, digital, digitale, binär, binäre, elektronisch, elektronische, fachbegriff, fachbegriffe, konzept, Begriff, allgemein, allgemeine, allgemeines, Technik, Datentechnik, Digitaltechnik, Binätechnik, online lesen; , Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd721516, slrprddef721516, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/java_exemplarerzeugung_de