Java13オブジェクト指向の詳細2
概要
パッケージ化してインポート
パッケージ
概要概要
パッケージの意味は、名前の競合によって引き起こされる不便を防ぐことです。
パッケージはフォルダに似ており、フォルダ内にはさまざまなファイルがあります。パッケージとパッケージの関係は、親フォルダのサブフォルダと同様に「。」で結ばれています。たとえば、java.lang.Stringは、javaフォルダのlangフォルダにあるStringファイルです。java.io.InputStreamは、javaフォルダーのioフォルダーにあるInputStreamファイルです。
同じ名前のファイルを同じフォルダーに存在させることはできません。また、同じ名前のファイルは異なる名前のフォルダーで許可されるため、異なるフォルダー(つまり、同じクラス名は異なるパッケージで許可されます)。
<font color = 'red'>大規模なソフトウェアシステムでの多数のクラスの管理を容易にし、クラスの名前の競合の問題を解決するために、Javaは、クラスに複数のクラス名前を提供するパッケージメカニズムを導入します。</ font>
フォーマット
一般的な名前は次のとおりです。<fontcolor = "blue">会社のドメイン名が逆になっています+関数名|モジュール名。</ font>
packageステートメントは、Javaソースファイルの最初のステートメントであり、ファイルで定義されているクラスが配置されているパッケージを示します。(このステートメントがデフォルトの場合、名前のないパッケージとして指定されます)。
package pkg1[.pkg2[.pkg3…]];
例:
package com.java01.test;
Javaコンパイラは、ファイルシステムのディレクトリに対応するパッケージを管理します。packageステートメントでは、「。」を使用してパッケージ(ディレクトリ)のレベルを示します。たとえば、次のステートメントを使用します。packagecom.java01とすると、ファイル内のすべてのクラスは。\ comにあります。 \ java01ディレクトリ
注意:
- jdkと同じパッケージと同じクラスを定義しないでください。定義しないと、説明できない多くの問題が発生します。
- プロジェクトを作成するときにパッケージを追加する必要があります。デフォルトのパッケージは使用しないでください。
- com.oopとcom.oop.testの場合、これら2つのパッケージには包含関係がなく、2つの完全に独立したパッケージです。後者は前者の一部であるように論理的に思われます。
インポート
クラスにパッケージ名が存在する場合、他のパッケージでクラスを使用するときは、コンパイラがクラスを見つけるために完全修飾名(フルネームまたは略してフルクラス名、com.java01.MyClass)を使用する必要があります。importを使用することもできます。ファイルの先頭で使用するクラスを紹介します。
import java.util.Scanner;
import java.io.*; //模糊匹配当前io包下所有类
public class ImportDemo {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in); //因为使用import关键字导包,可以使用
java.util.ArrayList list=new java.util.ArrayList(); //权限定名
//导入集合 注意:导入是不要导错包
//使用*,模糊匹配
File file=new File("D://test.txt");
InputStream isInputStream=new FileInputStream(file);
}
}
importを使用する必要のないクラスは次のとおりです。
-
言語パック(java.lang)のクラス(String、System ...)
- 同じパッケージ内のクラス
静的インポート:
importステートメントは、クラスをインポートできるだけでなく、静的メソッドをインポートする機能を向上させることもできます。
//导入静态属性
import static java.lang.Math.PI;
import static java.lang.System.out;
//导入静态方法
import static java.lang.Math.sin;
public class ImportDemo {
public static void main(String[] args) {
out.println(PI);
sin(1.1);
}
}
総括する
-
クラスをパッケージに入れたい場合は、クラスのソースファイルの最初の行にあるpackageを使用します
- このクラスのクラスファイルが正しいディレクトリにあることを確認する必要があります
- 他のクラスが訪問したい場合:
- フルネームを書く
- 導入する
- ファジーマッチング(パッケージで使用されるすべてのクラスが導入されます)は、コンパイル速度を低下させますが、実行速度には影響しません
- 特定のクラス名
- 静的インポート
- 同じパッケージ内のクラスをインポートする必要はありません
一般的に簡単に使用されるJDKパッケージ:
-
java.lang-言語パック:文字列、数学、システム、整数、スレッドなど、言語で一般的に使用される関数。
-
java.util-ツールキット:コンテナ(リスト、セット、マップ...)、日付クラスなど、いくつかの便利なツールクラスを提供します
-
java.io-入力および出力パッケージ:File、InputStream、OutputStreamなどのファイルの操作および読み取りに関連するクラスを提供します。
-
java.net-ネットワークパッケージ:InetSocketAddress、DatagramPacket、ServerSocketなどのリモートリソースを操作するためのクラス。
- java.sql-データベースパッケージ:JDBC、Connection、Statement、ResultSetを操作するためのクラス...
ゴミ収集メカニズム(gc)
概要概要
ガベージコレクションガベージコレクションメカニズム
すべてのプログラマーはメモリオーバーフローの状況に遭遇しました。プログラムの実行中はメモリスペースが制限されるため、メモリを解放するために使用されなくなったオブジェクトを時間内にクリアする方法は、GCが行う必要があることです。
ガベージコレクション(GC)と言えば、ほとんどの人はこのテクノロジーをJava言語のコンパニオン製品と見なしています。実際、GCにはJavaよりも長い歴史があります。1960年には、Lispはメモリの動的割り当てとガベージコレクションの手法を使用していました。
プログラマーは、jvmのメモリ構造が、プログラムカウンター、仮想マシンスタック、ローカルメソッドスタック、ヒープ領域、およびメソッド領域の5つの領域に分割されていることを知っています。このうち、仮想マシンスタック、ローカルメソッドスタック、プログラムカウンターは、スレッドによって生成および破棄される3つの領域です。したがって、メソッド呼び出しが終了またはスレッドが終了すると、メモリは当然メモリであるため、過剰なメモリガベージコレクションの問題を考慮する必要はありません。リサイクルに従ってください。
メソッド領域とヒープ領域に焦点を当てます。メモリのこの部分の割り当てと回復は動的であり、これはまさにガベージコレクターが注意を払う必要があることです。
GCは主に、オブジェクトのクリーンアップとメモリの配置を行います。
さまざまな言語でのオブジェクトスペースのリリース:
-
従来のC / C ++言語では、割り当てられたメモリのリサイクルをプログラマーが担当する必要があります。明示的なガベージコレクションのデメリット:
- プログラムは時間内にリサイクルすることを忘れ、メモリリークを引き起こし、システムパフォーマンスを低下させます。
- プログラムエラーにより、プログラムのコアクラスライブラリのメモリが再利用され、システムがクラッシュします。
-
Java言語では、プログラマーがメモリの回復を直接制御する必要はありません。JREは、バックグラウンドで使用されなくなったメモリを自動的に回復します。これはガベージと呼ばれます。
ガベージコレクション。
- プログラミング効率を向上させることができます。
- プログラムの整合性を保護します。
- そのオーバーヘッドはパフォーマンスに影響します。Java仮想マシンは、プログラム内の有用なオブジェクトを追跡し、どのオブジェクトが役に立たないかを判断する必要があります。
ガベージコレクションメカニズムの要点:
- ガベージコレクションメカニズムは、JVMヒープメモリ内のオブジェクトスペースのみを再利用します。
- データベース接続、入力ストリーム出力ストリーム、ソケット接続などの他の物理接続の方法はありません
- 現在のJVMには、パフォーマンスが異なるさまざまなガベージコレクション実装アルゴリズムがあります。
- ガベージコレクションの発生は予測不可能であり、プログラムはガベージコレクションメカニズムの実行を正確に制御できません。
- オブジェクトの参照変数をnullに設定できます。これは、ガベージコレクションメカニズムがオブジェクトを再利用できることを意味します。
- プログラマーは、System.gc()またはRuntime.getRuntime()。gc()を介してシステムにガベージコレクションを通知できます。これにはいくつかの効果がありますが、システムがガベージコレクションを実行するかどうかはまだ不明です。
- ガベージコレクションメカニズムがオブジェクトを再利用する前に、常にそのfinalizeメソッドを呼び出します(このメソッドがオーバーライドされ、新しい参照変数がオブジェクトを再参照すると、オブジェクトが再アクティブ化されます)。
- オブジェクトのfinalizeメソッドをアクティブに呼び出さないでください。ガベージコレクションメカニズムによって呼び出す必要があります。