2017-03-09 8 views
-2

Systemクラスがjava.whatで何を表しているのか分かりません。これはシステムの意味であり、コンソールのようなものか、どういうわけかコンソールへの接続ですか?Systemクラスはjavaで何を表していますか?

+0

私たちはあなたの問題を理解するために、ここのガイドラインに従ってください – Adonis

答えて

2

java.lang.Systemクラスは実際には何も表していません。 staticメソッドと3つのstaticフィールドからなるクラスです。基本的には、ホストシステムと対話するためのメソッドの「ユーティリティクラス」です。 javadocを閲覧する価値がありますSystem "grab bag"

静的フィールドには、アプリケーションの「標準入力」、「標準出力」および「標準エラー」ストリームへの参照が含まれています。これらのは、コンソールに接続されたであってもよく、文字データのために他のソース/シンクに接続されてもよい。たとえば、次のようなJavaアプリケーションを実行する場合:

java com.example.MyApp < input.txt 

その後、(System.inで)標準入力ストリームは、「INPUT.TXT」ファイルではなくコンソールから読み込みます。

OO設計の観点からは、IMOという誤解があります。しかし、クラスは非常に長い歴史を持っており、この設計ミスを修正することは不可能であるという一般的な使用法に組み込まれています。実際、Java 1.1でも修正を行うことは不可能だったでしょう...修正が大きな違いで後方互換性を損なってしまったからです。

+0

* * *は何かを表します*:JVM自体。 JVMにはシステムクロックがありますが、変更はできません。使用可能なメモリなどがあります。なぜ、「OOの観点からのエラー」(a)が単一のインスタンスを持つか(インスタンスはクラスオブジェクト)は、単一のJVMとその状態を表します。(b)最初に変更できないものについてsetterメソッドを公開しないでください。 –

+1

申し訳ありませんが、javadocはそれに同意しません。また、 'System' *がシステムを表現する場合、ほとんどのメソッドはインスタンスメソッドになり、シングルトンクラスになります。実際、シングルトンでないと便利な文脈があります。また、「最終」変数を変更することができる現在の奇妙なデザインではなく、イン/アウト/エラーストリームのための定期的なゲッターとセッターがあればよいでしょう。次に、有名な 'arraycopy'メソッドがあります。 –

+0

@StephenCランタイムがシングルトンであるのは興味深いですが、システムはユーティリティクラスです。 System.gc()はRuntime.getInstance()を呼び出します。gc()およびSystem.exit(n)はRuntime.getRuntime()を呼び出します。 –

関連する問題