web-dev-qa-db-fra.com

Java out.println () comment est-ce possible?

J'ai vu du code tel que:

out.println("print something");

J'ai essayé import Java.lang.System;

mais ça ne marche pas. Comment utilisez-vous out.println()?

44
user69514

les importations statiques font le tour:

import static Java.lang.System.out;

ou bien importez chaque méthode statique et champ en utilisant

import static Java.lang.System.*;

Addendum de @Steve C: notez que @sfussenegger a dit cela dans un commentaire sur ma réponse.

"L'utilisation d'une telle importation statique de System.out ne convient pas à autre chose qu'un simple code à exécution unique."

Alors s'il vous plaît, n'imaginez pas qu'il (ou moi) pense que cette solution est une bonne pratique.

83
sfussenegger
PrintStream out = System.out;
out.println( "hello" );
26
tangens

La réponse de @ sfussenegger explique comment faire fonctionner ce travail. Mais je dirais ne le fais pas !

Les programmeurs Java expérimentés utilisent et s’attendent à voir 

        System.out.println(...);

et pas 

        out.println(...);

Une importation statique de System.out ou System.err est un mauvais style (IMO) car:

  • ça casse l'idiome accepté, et
  • il est donc plus difficile de localiser les empreintes de trace indésirables qui ont été ajoutées lors des tests et non supprimées.

Si vous trouvez beaucoup de résultats dans System.out ou System.err, je pense qu'il est préférable de faire la synthèse des flux en attributs, en variables locales ou en méthodes. Cela rendra votre application plus réutilisable.

14
Stephen C

Eh bien, vous utiliseriez généralement

System.out.println("print something");

qui ne nécessite aucune importation. Cependant, comme out est un champ statique à l'intérieur de System, vous pouvez écrire à l'aide d'une importation statique comme ceci:

import static Java.lang.System.*;

class Test {
    public static void main(String[] args) {
        out.println("print something");
    }
}

Jetez un oeil à ce link . En général, vous ne feriez cela que si vous utilisez beaucoup de méthodes statiques d'une classe particulière, comme je l'utilise tout le temps pour les assertions junit et easymock.

5
Casey

out est un type PrintStream de variable statique (objet) de la classe System et println() est fonction de la classe PrintStream.

class PrintStream
{
    public void println(){}    //member function
    ...
}

class System
{
    public static final PrintStream out;   //data member
    ...
}

C'est pourquoi la variable statique (objet) out est accessible avec le nom de classe System qui appelle ensuite la méthode println() de son type PrintStream (qui est une classe).

3
Dushyant Thakur

importer simplement:

import static Java.lang.System.*;
1
user2844259

vous pouvez le voir aussi dans les sockets ...

PrintWriter out = new PrintWriter(socket.getOutputStream());

out.println("hello");
1
Exorcismus

Vous devrez créer un objet out first. Plus à ce sujet ici:

    // write to stdout
    out = System.out;
    out.println("Test 1");
    out.close();
1
Oskar Kjellin

Ou simplement:

System.out.println("Some text");
0
Chris Knight