[Ava]基本APIクラス③
14278 ワード
[システムクラス]
Javaプログラムはオペレーティングシステム上で直接実行されるのではなく、JVM上で実行されるため、Javaコードでオペレーティングシステムのすべての機能に直接アクセスすることは難しい.ただし、
java.lang
packageのSystem
クラスを使用すると、オペレーティングシステムのいくつかの機能を使用できます.Ex)プログラムの終了、キーボードからの入力、ディスプレイへの出力、メモリのクリーンアップ、現在時刻の読み出し、システムプロファイルの読み出し、環境変数の読み出しなど
System
クラス内のすべてのフィールドおよびメソッドは、静的(static
)フィールドおよび静的メソッドから構成される.1.プログラムを終了する(exit()
exit()
メソッドは、現在実行中のプロセスを強制的に終了させることができる.exit()
メソッドでは、終了状態値と呼ばれるint
パラメータ値を指定する必要があります.一般に、正常終了時は
0
、非正常終了時は0 이외의 다른 값
が与えられる.System.exit(0);
2.ゴミ収集器の運転(gc()
Javaは、開発者が直接コードでメモリを管理するのではなく、JVMによって自動的に管理されます.JVMはメモリ不足とCPUアイドル時にゴミ収集器
Garbage Collector
を実行し、未使用のオブジェクトを自動的にクリアする.new
演算子Car
を使用してオブジェクトを作成し、変数myCar
にオブジェクト番号を代入するとします.Car myCar = new Car();
変数
myCar
にnull
が代入された場合、myCar
はオブジェクトの番号を失います.オブジェクトの番号が分からないため、Car
オブジェクトは使用できなくなり、ゴミになります.myCar = null;
変数
myCar
が別のCar
オブジェクトを参照すると、前のオブジェクトの番号が失われるため、前のオブジェクトもゴミになります.Car myCar = new Car(); //이전 참조 객체
myCar = new Car(); //현재 참조 객체
ごみ収集器は開発者が直接コードで実行することができなくて、
System.gc()
方法を通じてJVMにできるだけ早く実行するように要求することができますSystem.gc()
メソッドを呼び出すと、ゴミ収集器はすぐには実行されず、JVMは最短時間で実行しようと努力します.System.gc();
ごみが発生するたびに、ごみ収集器が起動すると、実行するプログラムの速度が低下するため、性能面ではあまりよくありません.また、メモリが十分であれば、ゴミ収集器を実行する必要はありません.したがって,gc()
メソッドはメモリが悪くない環境ではほとんど使用する必要がない.ゴミ収集器は、オブジェクトを削除する前に、最後にオブジェクトの消滅者を実行します.
3.現在の読み込み(CurrentTimeMillis()、nanoTime()
System
クラスのcurrentTimeMillis()
メソッドとnanoTime()
メソッド.現在時刻
밀리세컨드(1/1000초) 단위
および나노세컨드(1/10^9)초 단위
のlong
値をコンピュータ上のクロックから読み出す.long time = System.currentTimeMillis();
long time = System.nanoTime();
戻り値は、主にプログラムの実行に要する時間を測定するために使用されます.4.システムプロファイルの読み込み(getProperty()
システム構成(
System Property
)とは、JVM起動時に自動的に設定されるシステム属性値のことです.Ex)オペレーティングシステムのタイプや、Javaプログラムを実行するユーザID、JVMのバージョン、オペレーティングシステムで使用するファイルパス区切り記号など.
システムプロファイルは、鍵(
key
)と値(value
)から構成されます.代表的なキーと値の説明は次のとおりです.System.getProperty()
メソッドを使用して、システムプロファイルを取得します.このメソッドは、システムプロファイルの鍵名をパラメータとして受け入れ、鍵の値を文字列に返します.String value = System.getProperty(String key);
+)System.getProperties()
メソッドは、(키, 값)
ペアをすべて格納したProperties
オブジェクトを返します.このオブジェクトを呼び出す
keySet()
メソッドは、キーのみからなるSet
オブジェクトを得ることができる.[クラス]
Javaはクラスとインタフェースのメタデータを
java.lang
パケットが属するClass
クラスとして管理する.✅メタデータ:クラス名、作成者情報、フィールド情報、メソッド情報
1.クラスオブジェクトの取得(getClass()、forName()
プログラムから
Class
オブジェクトを取得するには、Object
クラスが持つgetClass()
メソッドを使用します.Class clazz = obj.getClass();
getClass()
メソッドは、クラスを使用してオブジェクトを作成する場合にのみ使用できます.また、オブジェクトを作成する前にClass
オブジェクトを直接取得することもできます.Class
はジェネレータを非表示にするため、new
演算子を使用してオブジェクトを作成することはできません.静的メソッドforName()
を使用する必要があります.forName()
メソッドは、클래스 전체 이름(패키지가 포함된 이름)
をメディア値として受け入れ、Class
オブジェクトを返します.try {
Class clazz = Class.forName(String className);
} catch (ClassNotFoundExcetion e) {
}
Class.forName()
メソッドは、各値として指定されたクラスが見つからない場合、ClassNotFoundException
異常を引き起こすため、異常処理が必要となる.2.返信(getDeclaredConstructor)、getDeclaredFields()、getDeclaredMethods()
返信(
Reflection
)とは、Class
オブジェクトを用いてクラスを理解する情報(ジェネレータ、フィールド、メソッド)を指す.Class
対象は、返信提供getDeclaredConstructors()
、getDeclaredFields()
、getDeclaredMethods()
.Constructor[] constructors = clazz.getDeclaredConstructors();
Field [] fields = clazz.getDeclaredFields();
Method[] methods = clazz.getDeclaredMethods();
メソッド名から分かるように、3つのメソッドは、Contstructor
配列、Field
配列、およびMethod
配列をそれぞれ返す.Contstructor
、Field
、Method
クラスはいずれもjava.lang.reflect
パッケージに属する.getDeclaredFields()
、getDeclaredMethods()
クラスに宣言されたメンバーのみがインポートされ、継承されたメンバーはインポートされません.getFields()
、getMethods()
を使用する必要があります.getFields()
、getMethods()
はpublic
メンバーのみをインポートします.3.動的オブジェクトの作成(newInstance()
Class
オブジェクトを使用すると、new
演算子を使用せずにオブジェクトを動的に作成できます.この方法は、コードの作成時にクラス名を特定できず、実行時にクラス名を決定できない場合に便利です.Class.forName()
メソッドClass
オブジェクトを次のコードで取得し、newInstance()
メソッドを呼び出すと、Object
タイプのオブジェクトが取得されます.try {
Class clazz = Class.forName("런타임 시 결정되는 클래스 이름");
Object obj = clazz.newInstance();
} catch (ClassNotFoundException e) {
} catch (InstantiationException e) {
} catch (IllegalAccessException e) {
}
newInstance()
メソッドは、デフォルトジェネレータを呼び出してオブジェクトを作成するため、クラスにデフォルトジェネレータが存在する必要があります.パラメータ付きジェネレータを呼び出すには、replicationでConstructor
オブジェクトを取得し、newInstance()
メソッドを呼び出すだけです.newInstance()
メソッドでは2つの例外が発生する可能性があるため、例外処理コードを使用する必要があります.InstantiationException
例外:クラスが抽象クラスまたはインタフェースである場合に励起IllegalAccessException
例外:クラスまたは作成者がアクセス制限によってアクセスできない場合newInstance()
メソッドの戻りタイプはObject
であり、このメソッドを使用するにはクラスタイプに変換する必要があります.このため、強制タイプ変換を行う必要がありますが、クラスタイプが分からないため、変換はできません.この問題を解決するには、インタフェースを使用する必要があります.例
例えば、
Action
インタフェースおよび実装クラスSendAction
、ReceiveAction
があると仮定する.|メソッドの各値として"SendAction"または"ReceiveAction"を使用して、
Class.forName()
オブジェクトを作成し、Class
オブジェクトのClass
メソッドを使用してnewInstance()
オブジェクトを取得します.取得されたすべてのオブジェクトはObject
interfaceを実装するため、Actioon
interfaceタイプに変換できます.次に、Action
インタフェースのAction
メソッドが呼び出され、単一クラスのエンティティメソッドexecute()
メソッドが実行される.Class clazz = Class.forName("SendAction" 또는 "ReceiveAction");
Action action = (Action) clazz.newInstance();
action.execute(); //SendAction 또는 ReceiveAction의 execute()가 실행됨
execute()
「SendAction」文字列がメソッドのパラメータとして与えられた場合、Class.forName()
クラスのSendAction
メソッドが呼び出され、「ReceiveAction」文字列がパラメータとして与えられた場合、execute()
クラスのReceiveAction
メソッドが呼び出される.[参考資料]
これはジャワの本です.
Reference
この問題について([Ava]基本APIクラス③), 我々は、より多くの情報をここで見つけました https://velog.io/@mmy789/Java-기본-API-클래스-3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol