kurz eine Frage. In einem Beispielprogramm wurde "System.in.read()" verwendet und in einem anderen Beispielprogramm die Methode "next()".
Im ersten Beispielprogramm wurde nichts importiert und im zweiten wurde "java.util.Scanner" importiert.
Warum hieß es im ersten Programm nicht:
import java.util.System
import java.io.InputStream
Gibt es eine Regel, die bestimmt, wann man man am Anfang des Quelltextes den Import angeben muss?
1. System gehört ins java.lang package und das wird automatisch importiert
2. Du musst die Klasse nur importieren, wenn du sie wirklich als Klasse brauchst (statische Methoden, Variablen, Instanzierung von Objekten). Wenn du das Objekt schon hast, musst du die Klasse nicht importieren.
Du Regel lautet: Den import gibt man an, wenn er benötigt wird. ;-)
Klassen aus java.lang.* (z.B System, String...) müssen nicht explizit importiert werden, da das Package automatisch importiert wird.
Klassen aus anderen Packages müssen per import eingebunden oder im Programm per vollständigem Namen angesprochen werden.
import ist nur eine unwichtige Syntax-Sache. Schlussendlich ist es für den Programmablauf vollkomen egal, was du alles importiert hast. Wenn du eine IDE wie bspw. Eclipse verwendest, brauchst du dich um die importe überhaupt nicht mehr zu kümmern. Einfach Strg+Shift+O und Eclipse generiert die Importe von sich aus (bei Doppeldeutigkeiten, wie z.B. java.util.List und java.awt.List, fragt Eclipse dann nochmal nach).
Danke soweit. Genau das verstehe ich noch nicht. Warum erfordert dies keinen expliziten import, schließlich gehört das nicht zu java.lang.*?
// Datei: Zeichen.javapublicclassZeichen{// beachten Sie die Deklaration der Methode main() nichtpublicstaticvoid main (String[] args)throwsException{int c =0;int anzahl =0;do{// System.in.read() gibt einen int-Wert im Bereich 0 bis// 255 zurück. -1 wird zurückgegeben, wenn kein Zeichen// mehr im Dateipuffer steht.
c =System.in.read();if(c !=-1){// mit (char) c wird die int-Variable c// in ein Zeichen gewandeltSystem.out.println ("ASCII-Code: "+ c
+" Zeichen: "+(char) c);
anzahl = anzahl +1;}}while(c !=-1);System.out.println ("\nAnzahl: "+ anzahl);}}
"read()" gehört zu "java.io.InputStream" und wird ja im Gegensatz zu "java.lang.*" nicht implizit importiert. Warum kommt dieses Programm hier trotzdem ohne import aus?
Java weiß, von welchem Typ die Variable dort ist, das steht dort im Import,
nur wenn du selber Variablen anlegst/castest oder Klassen (statisch/ als Typ) ansteuerst musst du eigene Angaben machen
'import' ist eher übertrieben, eigentlich ist es nur eine genaue Bezeichnung bzw. das Anlegen einer Abkürzung zur Verwendung im Quellcode
"read()" gehört zu "java.io.InputStream" und wird ja im Gegensatz zu "java.lang.*" nicht implizit importiert. Warum kommt dieses Programm hier trotzdem ohne import aus?
bei der import-Geschichte geht es nur um die Typen (also bspw.
Code:
InputStream
,
Code:
Scanner
,
Code:
List
usw....). Immer wenn du diese im Sourcecode schreibst, muss der Compiler wissen aus welchen package sie kommen (entweder über nen import oder indem du davor die package-Hierarchie schreibst...). Für methodenaufrufe usw.. brauchst du das nicht, der Compiler weiß ja von welchen typ die variable ist auf die read() verwendet ist...
"read()" gehört zu "java.io.InputStream" und wird ja im Gegensatz zu "java.lang.*" nicht implizit importiert. Warum kommt dieses Programm hier trotzdem ohne import aus?
verwendest. Der Compiler fängt bei "System" an zu suchen und da es in "java.lang" drin ist,
braucht es nicht importiert werden. Ein ähnliches Beispiel wurde ja schon gennant:
Java:
java.io.InputStream in =...
Da "InputStream" wie du schon richtig erkannt hast nicht in "java.lang" drin ist schreibt man
hier "java.io" davor damit der Compiler weiss wo er suche muss.
Wenn man das nicht mitten im Code stehen haben will und auch nicht immer wiederholen will,
kann man das auch importieren. Damit ist dann "InputStream" für den Compiler bekannt.
Einiges wurde hier schon erklärt, aber ich dachte ich fass das mal zusammen.
also ich weiss immernoch nicht wann wo welches paket importiert werden soll, obwohl ich schon das ein oder andere kleinere spiel programmiert habe. Im grunde ist es aber ganz einfach, aber trozdem ist das wissen meiner meinung nach kein grund sich hinzusetzten und irgentwas auswendig zu lernen
ich empfehle dir einfach die ide netbeans zu benutzten da man da mit dem hotkey strg+shift+i alle nötigen imports von netbeans machen lässt. (gibt es sicherlich auch in eclipse usw.)
Aber der TO weiß nicht wozu die importe gut sind, wann man sie verwendet und wann nicht.
Das ist nicht nur für die importe essentiell sondern auch bei Reflection oder wenn man in der IDE zuschnell war importiert man die falsche List. (awt != lang...).
Daher ist es imho wichtig sich damit zu beschäftigen, statt direkt die Arbeit von der IDE machen lassen.