System.console () vs. System.out

1. Perkenalan

Dalam tutorial ini, kita akan menjelajahi perbedaan antara System.console () dan System.out .

2. System.console ()

Pertama-tama mari buat 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 [email protected]

Namun, menjalankannya dari media lain akan menampilkan NullPointerException karena objek konsol akan menjadi null .

Atau, jika kita menjalankan program seperti di bawah ini:

$ java ConsoleAndOut > test.txt

maka program juga akan menampilkan NullPointerException saat kita mengarahkan aliran.

Kelas Console juga menyediakan metode untuk membaca sandi tanpa menggunakan karakter yang sama.

Mari kita lihat itu beraksi:

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

Ini akan meminta kata sandi, dan itu tidak akan menggemakan karakter saat kita mengetiknya.

3. System.out

Sekarang mari mencetak objek System.out :

System.out.println(System.out);

Ini akan mengembalikan sesuatu seperti java.io.PrintStream.

Outputnya akan sama dari mana saja.

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

Kami dapat menjalankan program sebagai:

$ java ConsoleAndOut > test.txt

Ini akan mencetak output ke file test.txt .

4. Perbedaan

Berdasarkan contoh tersebut, kami dapat mengidentifikasi beberapa perbedaan:

  • System.console () mengembalikan instance java.io.Console ketika dijalankan dari terminal interaktif - di sisi lain System.out akan mengembalikan objek java.io.PrintStream terlepas dari media pemanggilan
  • Perilaku System.out dan System.console () serupa jika kita belum mengarahkan aliran apa pun; jika tidak, System.console () mengembalikan null
  • Ketika beberapa utas meminta input, maka Konsol mengantrekan prompt itu dengan baik - sedangkan dalam kasus System.out semua prompt muncul secara bersamaan

5. Kesimpulan

Kami belajar di artikel ini tentang perbedaan antara System.console () dan System.out . Kami menjelaskan bahwa Console berguna ketika aplikasi seharusnya dijalankan dari konsol interaktif, tetapi ia memiliki beberapa kebiasaan yang harus diperhatikan dan ditangani.

Seperti biasa, kode lengkap untuk artikel ini tersedia di GitHub.