Typanforderungen in Java
Das Literal nach einem Vorzeichenoperator »-« muß einen passenden Zahlentyp (einen numerischen Typ), wie ›int‹ oder ›double‹ haben (es muß numerisch sein), ein Literal mit dem Typ ›java.lang.String‹ ist dort nicht erlaubt.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( -"97" ); }}- javac -Fehlermeldung (frei übersetzt)
Main.java: Fehler: unerlaubter Operandentyp 'String' für den Operator '-'
-"97"
^
Wir sehen hier, wie Datentypen helfen, Fehler in Programmen automatisch zu erkennen!
Außerdem sieht man, daß Fachbegriffe, wie „Operandentyp“ oder „String“, in Fehlermeldungen verwendet werden. Dies ist eine Motivation zum Erlernen dieser Fachbegriffe.
Typanforderungen werden nicht schon durch die Syntaxdiagramme einer Sprache ausgedrückt, sondern gelten noch zusätzlich zu den Syntaxdiagrammen (Syntaxregeln).
Warum haben Ausdrücke einen Typ?
Der Typ eines Ausdrucks sagt der Java -Implementation in welcher Sprache (in welchem Code) der Wert des Ausdrucks intern durch Bits darzustellen ist.
Beispielsweise muß man zur Interpretation des Textes "malt" wissen, ob er auf englisch oder auf deutsch zu interpretieren ist. (Er bedeutet auf englisch Getreideprodukt „Malz“, aber auf deutsch die Aufforderung zu malen.)
Außerdem helfen Typen, Fehler in Programmen zu finden, indem sie unsinnige Kombinationen (wie »-"abc"«) durch Typregeln ausschließen.
Im Deutschen wäre beispielsweise „Ideen schlafen.“ ein Satz, der syntaktisch korrekt („wohlgeformt“), aber aufgrund von Verstößen gegen „Typanforderungen“ doch fehlerhaft wäre (das Verb „schlafen“ erwartet ein schlaffähiges Lebewesen als Subjekt).
Statische und Dynamische Typisierung ⃗
Bei dynamischer Typisierung würde der Typ eines Wertes erst bei der Ausführung einer Stelle eines Programms geprüft werden. Ein bestimmter Programmteil wird vielleicht nur unter bestimmten Umständen ausgeführt, wie beispielsweise bei einem seltenen Notfall. Wenn dann zum ersten Mal der Typ eines Wertes an jener Stelle geprüft wird, dann könnte ein Typfehler gefunden werden. Dies könnte einen Abbruch des Programms zur Folge haben, der aber gerade zu jenem Zeitpunkt unerwünscht sein könnte.
In Java werden die Typen von Ausdrücken hingegen statisch, also bei der Übersetzung, geprüft. Der Compiler prüft alle Teile des von ihm übersetzten Programms, auch solche, die normalerweise vielleicht gar nicht ausgeführt werden. Daher kann man nach einer Übersetzung sicher sein, daß bei der späteren Ausführung des Programms keine Ausdrücke mehr einen unerlaubten Typ haben. Diese Sicherheit wird auch als statische Typsicherheit bezeichnet.
Die statische Typsicherheit von Java ist eine wichtiger Grund dafür, daß Java bei verschiedenen Unternehmen so beliebt ist. Sie gehen davon aus, daß dank der statischen Typsicherheit viele Fehler schon beim Übersetzen entdeckt werden, und nicht erst bei der Ausführung des Programms zu einem dann ungünstigen Zeitpunkt.
Andererseits sind Programmiersprachen ohne statische Typisierung manchmal leichter zu erlernen oder zu verwenden. Außerdem erfolgt die Typprüfung in Java -Programmen nicht vollständig bei der Übersetzung, sondern manchmal doch auch erst bei der Ausführung, so daß die statische Typsicherheit von Java nicht perfekt ist.
Übungsfragen
? Übungsfrage
Welche der folgende Ausdrücke erfüllen die unten genannten Typanforderungen für einen Vorzeichenausdruck?
- Ausdrücke
- »-2« Anton
- »-2.0« Berta
- »-"2"« Cäsar
- Typanforderungen
- Das Literal nach einem Vorzeichenoperator »-« muß einen passenden Zahlentyp (einen numerischen Typ), wie ›int‹ oder ›double‹ haben (es muß numerisch sein), ein Literal mit dem Typ ›java.lang.String‹ ist dort nicht erlaubt.