2010-01-23 22 views
5

Siempre que escribimos cualquier declaración a imprimir en la consola en el programa Java:problema en la declaración System.out.println

System.out.print o System.out.println

En encima de ambas declaraciones que estamos llamando a la variable de referencia del objeto sin PrintStream importar explícitamente el paquete java.io, entonces, ¿cómo estamos accediendo a los métodos de ese objeto sin generar ningún error de tiempo de compilación?

Respuesta

6

El objeto Sistema tiene referencias a objetos java.io.PrintStream incrustados en él. Por lo tanto, no es necesario que explícitamente importar estos - el tiempo de ejecución puede derivar esta información de forma inequívoca ya que se incrustó en tiempo de compilación.

Como has identificado, si usaste un objeto PrintStream directamente, tendrías que importar eso. La etapa de compilación no sabe dónde encontrarla (es podría buscar, pero eso fácilmente podría dar resultados ambiguos).

Tenga en cuenta también (en caso de que haya alguna confusión), java.lang se importa implícitamente, por lo tanto, no necesita un estado de importación para System.

+0

+1 por ser más rápido que yo ;-) –

4

Solo necesita importar nombres de clase para aquellos que desea declarar. Así, por ejemplo:

PrintStream out = System.out; 

no habría compilado a menos que haya importado java.io.PrintStream, pero se pueden utilizar los métodos fuera de la System.out, ya que es "implícitamente" importado en ese punto, ya que el compilador sabe exactamente qué tipo System.out es. En algunos idiomas, por ejemplo, Scala, tampoco necesitaría declarar el tipo de la variable, ya que puede resolverse a través del type inference.

3

Las importaciones son azúcar sintáctico que le permite evitar escribir, p. java.io.File file = new java.io.File("foo.txt") todo el tiempo, pero le permiten escribir File file = new File("foo.txt").

Nada más.

De modo que, a menos que tenga que crear un nuevo objeto o asignar un objeto a una variable, y quiera evitar escribir el nombre completo de la clase, no necesita hacer ninguna importación.

(en el punto anterior, considere interfaces para ser una clase cubierta)

Cuestiones relacionadas