前述のインタビューの質問は非常にひねくれたもの (つまり人為的) であり、それを解決するには純粋な Java の外に出る必要があります。これは確かに、通常の状況で行うことを検討するものではありません。
他の答えはあなたにいくつかの半解決策を与えました...本当に、本当にこれをしなければならないなら。(アプリケーションの stdout / stderr ストリームがコンソール以外の場所にリダイレクトされた場合をほとんど扱っていないため、半解決策と言います。そして、それがこの問題の唯一の「本当の」側面です...)
(JDK 6 で) System クラスを使用できる場合...コンソールに出力するクリーンな方法 (たとえば、System.out
リダイレクトされた場合) は、System.console()
メソッドをConsole
使用してオブジェクトを取得し、それを使用してWriter
.
ただし、JVM にコンソールが関連付けられていない場合、console()
は を返すことに注意してくださいnull
。
質問は実際には -- なぜ Java は私たちに PrintStream オブジェクト System.out を与えたのですか?? から始まりました。そして、なぜそれは最終的なのですか?? コンソールに何かを印刷する他の方法はありませんか??
答えは次のとおりです。
- 便宜上。
- そのため、ランダムなコードが誤ってそれを壊してしまうことはありません。(または、JVM で実行されている信頼できないコードについて心配する必要がある場合は、意図的に。) しかし、信頼できるコードは、実際にはを呼び出すことで変更できます。これは、変数の状態を安全に変更するために、舞台裏でいくつかの魔法を行います。(JIT コンパイラーはこれを認識しており、これら 3 つの変数を異なる方法で処理していると思います。)
System.out
System.setOut(...)
final
final
- はい。上記と(うーん!)他の回答を参照してください。