System.console () vs. System.out

1. Pengenalan

Dalam tutorial ini, kita akan meneroka perbezaan antara System.console () dan System.out .

2. Sistem.konsol ()

Mari buat dahulu program untuk mengambil objek Console :

void printConsoleObject() { Console console = System.console(); console.writer().print(console); }

Menjalankan program ini dari terminal interaktif akan menghasilkan sesuatu seperti [dilindungi e-mel]

Walau bagaimanapun, menjalankannya dari medium lain akan membuang NullPointerException kerana objek konsol akan menjadi kosong .

Atau, jika kita menjalankan program seperti di bawah:

$ java ConsoleAndOut > test.txt

maka program ini juga akan membuang NullPointerException kerana kami mengalihkan aliran.

The Console kelas juga menyediakan kaedah untuk kata laluan yang membaca tanpa mengulangi watak.

Mari kita lihat dalam tindakan:

void readPasswordFromConsole() { Console console = System.console(); char[] password = console.readPassword("Enter password: "); console.printf(String.valueOf(password)); }

Ini akan meminta kata laluan, dan tidak akan menggemakan watak semasa kami menaipnya.

3. Sistem.out

Sekarang mari kita mencetak objek System.out :

System.out.println(System.out);

Ini akan mengembalikan sesuatu seperti java.io.PrintStream.

Keluarannya akan sama dari mana sahaja.

System.out digunakan untuk mencetak data ke aliran output dan tidak ada kaedah untuk membaca data. Aliran keluaran dapat diarahkan ke tujuan apa pun seperti fail dan output akan tetap sama.

Kami boleh menjalankan program seperti:

$ java ConsoleAndOut > test.txt

Ini akan mencetak output ke fail test.txt .

4. Perbezaan

Berdasarkan contoh, kita dapat mengenal pasti beberapa perbezaan:

  • System.console () mengembalikan contoh java.io.Console ketika dijalankan dari terminal interaktif - sebaliknya System.out akan mengembalikan objek java.io.PrintStream tanpa mengira medium pemanggilan
  • Tingkah laku System.out dan System.console () serupa jika kita tidak mengalihkan aliran; jika tidak, System.console () mengembalikan nol
  • Apabila banyak utas meminta input, maka Konsol mengantarkan permintaan itu dengan baik - sedangkan untuk Sistem. Semua arahan muncul serentak

5. Kesimpulan

Kami belajar dalam artikel ini mengenai perbezaan antara System.console () dan System.out . Kami menjelaskan bahawa Konsol berguna apabila aplikasi seharusnya berjalan dari konsol interaktif, tetapi mempunyai beberapa kebiasaan yang harus diperhatikan dan dijaga.

Seperti biasa, kod lengkap untuk artikel ini terdapat di GitHub.