1. コンストラクターとデフォルトのコンストラクター
コンストラクターは特別なメソッドです。主にオブジェクト作成時のオブジェクトの初期化、つまりオブジェクトのメンバ変数に初期値を代入するために使用され、オブジェクト作成文では常に new 演算子とともに使用されます。
/**
* 矩形
*/
class Rectangle {
/**
* 构造函数
*/
public Rectangle(int length, int width) {
this.length = length;
this.width = width;
}
public static void main (String []args){
//使用构造函数创建对象
Rectangle rectangle = new Rectangle(10,5);
}
}
特殊なクラスには複数のコンストラクターを含めることができ、コンストラクターのオーバーロードはパラメーターの数またはパラメーターの種類に応じて区別できます。
コンストラクターは通常のインスタンス メソッドに似ています。
他の方法との違い:
- コンストラクターには戻り値の型がありません
- 継承されず、スコープ修飾子を持つことができます
コンストラクターの関数名は、それが属するクラスの名前と同じである必要があります。これは、オブジェクトのデータ メンバーを初期化するタスクを引き受けます。
インスタンス化可能なクラスを記述するときに特にコンストラクターを記述しない場合、ほとんどのプログラミング言語はデフォルトのコンストラクター (デフォルト コンストラクター) を自動的に生成します。
インスタンス化可能なクラスを作成するときにコンストラクターが特に記述されていない場合、デフォルトでは、デフォルトの引数なしのコンストラクターが Java クラスで自動的に生成されます。デフォルトのコンストラクターは通常、メンバー変数の値を int -> 0、Integer -> null などのデフォルト値に初期化します。
ただし、クラス内でパラメーター化されたコンストラクターを手動で定義した場合、デフォルトのパラメーターなしコンストラクターは自動的に追加されません。手動で作成します!
/**
* 矩形
*/
class Rectangle {
/**
* 构造函数
*/
public Rectangle(int length, int width) {
this.length = length;
this.width = width;
}
/**
* 无参构造函数
*/
public Rectangle() {
}
}
2. クラス変数、メンバー変数、ローカル変数
Java には、クラス変数、メンバー変数、ローカル変数の 3 種類の変数があります。これらはそれぞれ、JVM のメソッド領域、ヒープ メモリ、スタック メモリに格納されます。
public class Variables {
/**
* 类变量
*/
private static int a;
/**
* 成员变量
*/
private int b;
/**
* 局部变量
* @param c
*/
public void test(int c){
int d;
}
}
a はクラス変数として JVM のメソッド領域に保存されます; b はメンバー変数としてオブジェクトとともにヒープ メモリに保存されます (スタック上の割り当てに関係なく); c と d はスタックに保存されますメモリをメソッドのローカル変数として使用します。
これら 3 つの変数タイプが導入されたのは、多くの人がこれら 3 つのタイプの違いが分からず、変数がどこに保存されているかが分からず、どの変数が同時実行性の問題を考慮する必要があるかが分からないためです。
同時実行性の問題については、次のような簡単な説明があります。
同時実行性の問題が発生するのは共有変数だけであるため、変数 a と b は共有変数であり、変数 c と d は非共有変数です。したがって、マルチスレッドのシナリオが発生した場合は、変数 a と b の操作についてはスレッド セーフを考慮する必要がありますが、スレッド c と d の操作についてはスレッド セーフを考慮する必要はありません。
3. メンバ変数とメソッドのスコープ
カプセル化とは、メンバ変数やメソッドなどをクラス内にパッケージ化したものですが、クラス内にカプセル化されたメンバ変数やメソッドに外部からアクセスできるのでしょうか?誰がアクセスできますか?
アクセスできるかどうか、および誰がアクセスできるかというこの機能は、アクセス制御修飾子を介して Java に実装されます。
Java では、アクセス制御文字を使用して、クラス、変数、メソッド、コンストラクターへのアクセスを保護できます。Java は 4 つの異なるアクセス権をサポートしています。
メンバー変数とメソッドのスコープについて、public、protected、private、および not write の違いは次のとおりです。
public:
メンバー変数またはメソッドがすべてのクラスまたはオブジェクトに表示され、すべてのクラスまたはオブジェクトに直接アクセスできることを示します。private:
メンバー変数またはメソッドがプライベートであり、現在のクラスのみがアクセスできることを示します。他のクラスまたはオブジェクトはアクセスできず、サブクラスもアクセスできません。protected:
メンバー変数またはメソッドがクラス自体と同じパッケージ内の他のクラスに表示され、他のパッケージの下にあるクラスには、そのサブクラスでない限りアクセスできないことを示します。default:
メンバー変数またはメソッドがそれ自体および同じパッケージ内でのみ表示され、他のパッケージ内のクラス (そのサブクラスであっても) からはアクセスできないことを示します。