2010-01-23 7 views
5

Chaque fois que nous écrivons une déclaration à imprimer à la console dans le programme Java:problème dans l'instruction System.out.println

System.out.print ou System.out.println

Dans les deux ci-dessus les déclarations que nous appelons à la variable de référence d'objet PrintStream sans importer explicitement le paquetage java.io, alors comment accéder à ces méthodes d'objet sans que cela entraîne une erreur de compilation?

Répondre

6

L'objet System contient des références à java.io.PrintStream objets incorporés dans ce dernier. Vous n'avez donc pas besoin de explicitement les importer - le runtime peut déduire cette information sans ambiguïté puisqu'il a été incorporé à la compilation.

Comme vous l'avez identifié, si vous utilisiez un objet PrintStream directement, vous devez l'importer. La phase de compilation ne sait pas où le trouver (pourrait recherche, mais cela pourrait facilement donner des résultats ambigus).

Notez également (en cas de confusion), java.lang est implicitement importé, par conséquent vous n'avez pas besoin d'une instruction d'importation pour System.

+0

+1 pour être plus rapide que moi ;-) –

4

Il vous suffit d'importer les noms de classe pour ceux que vous souhaitez déclarer. Ainsi, par exemple:

PrintStream out = System.out; 

ne compilerait pas à moins que vous avez importé java.io.PrintStream, mais vous pouvez utiliser les méthodes hors de System.out, car il est importé à ce moment-là « implicitement », puisque le compilateur sait exactement quel type System.out est. Dans certaines langues, par exemple, Scala, vous n'avez pas non plus besoin de déclarer le type de la variable, car il peut être élaboré via type inference.

3

Les importations sont du sucre syntaxique qui vous permet d'éviter de taper par ex. java.io.File file = new java.io.File("foo.txt") à chaque fois, mais vous permettent de taper File file = new File("foo.txt").

Rien d'autre. Donc, sauf si vous devez créer un nouvel objet ou affecter un objet à une variable, et que vous voulez éviter d'écrire le nom de la classe dans son intégralité, vous n'avez pas besoin de faire des importations.

(dans ce qui précède, considérer les interfaces comme étant une classe à l'abri)

Questions connexes