クラスとオブジェクトの基本的な知識ポイント-java

Javaネーミングの基本原則には、変数名とメソッド名の最初の単語を小文字にし、残りの単語の最初の文字のみを大文字にする、インターフェース名とクラス名の最初の単語の最初の文字を大文字にする、定数名を大文字にする、が含まれます。完全に。パッケージの名前は小文字で構成する必要があります。

識別子

役割:識別子は、Javaプログラムで変数、クラス、メソッドなどに名前を付けるために使用される記号です。

1.識別子のルール:

識別子にも特定の命名規則があり、すべての名前を使用できるわけではありません。
規則1:識別子は、文字、数字、アンダースコア、ドル記号で構成できますが、%、@、スペースなどの他の特殊文字を含めることはできません。数字で始めることはできません。
ルール2:識別子をキーワードやJavaの予約語にすることはできません。ただし、キーワードや予約語を含めることができます。
ルール3:識別子は厳密に大文字と小文字を区別します。
ルール4:識別子の名前はその役割を最もよく反映する必要があります。

2.変数名のルール:

ここに画像の説明を挿入します
注:1、数字で始めることはできません
2、アンダースコアとドル記号以外の他の特殊文字で始める
ことはできません3、Javaキーワードを使用することはできません

Javaでのメモリ管理:リソースを最大限に活用するために、Javaにはメモリの使用を追跡するシステムレベルのスレッドがあります。システムがアイドル状態のときに未使用のメモリスペースを再利用できるため、プログラマはビジーメモリから管理できます。 。

Javaソース・プログラムでは、0個以上のインポート・ステートメントが存在する可能性があります。

クラスを宣言するために使用できるパーミッション修飾子は、publicdefaultのみです

Javaでは、すべてのクラスのルートクラスはjava.lang.Objectです。

Javaソースプログラムファイルには複数のクラスを含めることができますが、パブリック修飾子を使用できるのは1つのクラスのみであり、クラスの名前はソースプログラムファイルの名前と同じである必要があります。また、プログラムで複数のクラスを作成する場合は、main()メソッドを含むクラスを使用する必要があります。

public、protected、private、defaultはすべてJavaのアクセス制御です。

公衆 保護された デフォルト 民間
このカテゴリ
このクラスが含まれているパッケージ ××
他のパッケージのサブクラス ×× ××
他のパッケージの非サブクラス ×× ×× ××

新しいキーワードの役割:オブジェクトにメモリスペースを割り当て、クラスのコンストラクタを呼び出し、オブジェクトの参照を返します。
例:
Javaでは、メモリ割り当ての演算子はnewです。

staticキーワードの役割

staticキーワードを使用して、静的コードブロックを示すコードブロック、グローバル静的メンバー変数を示す変更されたメンバー変数、および静的メソッドを示す変更されたメソッドを変更できます(注:内部クラスを除いて、通常のクラスを変更することはできません。これはなぜですか?)
つまり、staticキーワードによって変更されたコンテンツは静的です。
静的は動的に相対的です。動的とは、JavaプログラムがJVMで実行されているときに、JVMがプログラムのニーズに応じてオブジェクトを動的に作成し、オブジェクトを格納(メモリを割り当てる)することを指します。オブジェクトのミッションが終了すると、オブジェクトはガベージコレクター、つまりメモリによって破棄されます。リサイクルはJVMによって一律に管理され、新しく作成された他のオブジェクトに割り当てられます。静的とは、Javaプログラムが実行されていないときに、JVMがロードされたクラスにスペースを割り当てることを意味します。静的キーワードの内容を格納します。静的メンバー変数など、JavaクラスはJVMにロードされます。では、JVMはクラスとクラスの静的メンバー変数をメソッド領域に格納します。メソッド領域は次のとおりです。スレッドによって共有され、GC(ガベージコレクション、ガベージコレクション、ガベージコレクション)領域はめったに発生しないため、staticキーワードAllで変更されたコンテンツはグローバルに共有され、ストレージスペースは1回だけ割り当てられます。したがって、クラスの一部のコンテンツがオブジェクトに属していないが、クラスに属するオブジェクトによって共有されている場合は、staticキーワードを使用してそれを変更するかどうかを検討できます

1.コードブロックを装飾します

クラスでは、静的で装飾されたコードブロックは静的コードブロックと呼ばれ、その逆はインスタンスコードブロックと呼ばれます。
インスタンスコードブロックは、オブジェクトの作成時に実行されます。つまり、各オブジェクトには独自のインスタンスコードブロックがあります。これは、インスタンスコードブロックの実行結果が現在のコンテンツに影響を与え、オブジェクト(メモリのリサイクル);静的コードブロックは、JavaクラスがJVMメモリにロードされるときに実行されるコードブロックです。クラスのロードはJVMの実行中に一度だけ行われるため、静的コードブロックは一度だけ実行されます。
ので、静的コードブロックの主な機能は、いくつかの複雑な初期化作業を実行することで、静的コードブロックがあるメソッド領域に格納されている静的コードブロックの実行結果の形でクラスとメソッド領域に格納され、初期化量はメソッド領域に格納され、スレッドによって共有されます。

2.メンバー変数を変更します

クラスのstaticキーワードによって変更されたメンバー変数は、静的メンバー変数と呼ばれます。これは、staticがローカル変数を変更できないため(なぜ?)、静的メンバー変数を静的変数と呼ぶこともできます。静的変数はコードブロックに似ています。クラスがJVMメモリにロードされると、JVMは静的変数をメソッド領域に配置し、メモリを割り当てます。このメモリもスレッドによって共有されます。アクセスフォームは、クラス名、静的メンバー名です。

public class StaticTest {
    
    
	public static void main(String[] args) {
    
    
		System.out.println(D.i);
		System.out.println(new D().i);
	}
}
class D {
    
    
	static {
    
    
		i = 2;
		System.out.println("D : 静态代码块1");
	}
	static int i;
}

静的変数はクラスの情報に格納され、スレッド間で共有できます。もちろん、クラスの各オブジェクトにも属しているため、オブジェクトを介して静的変数にアクセスできますが、コンパイラはこれをサポートしておらず、次のようになります。警告。

クラスの静的変数とクラスの静的コードブロックのロードシーケンス。クラスは最初に静的変数をロードし、次に静的コードブロックをロードしますが、複数の静的変数と複数のコードブロックがある場合は、書き込み順にロードされます。

class D {
    
    
	static {
    
    
		i = 2;
		System.out.println("D : 静态代码块1");
	}
	static {
    
    
		i = 6;
		System.out.println("D : 静态代码块2");
	}
	static int i;
}

手術の結果を考えることができます。
静的変数を明示的に初期化する必要はなく、JVMはデフォルトで対応するデフォルト値になります。たとえば、基本データ型のバイトは0、shortは0、charは\ u0000、intは0、longは0L、floatは0.0f、doubleは0.0d、booleanはfalse、参照型は一様にnullです。 。
静的変数はJVMメモリで共有され、変更できるため、静的変数にアクセスするとスレッドセーフの問題が発生します(スレッドAが同時に書き換え、スレッドBがその値を取得し、取得した値が変更前の値または変更後の値は何ですか?)したがって、静的変数を使用する場合は、マルチスレッドを検討してください。静的変数が不変であることを確認できる場合は、finalキーワードを一緒に使用してスレッドセーフの問題を回避できます。それ以外の場合は、同期を使用して、volatileキーワードとともに使用するなど、スレッドセーフの問題を回避する必要があります。
静的キーは、インスタンスメソッドや静的メソッドなどのローカル変数を変更できません。変更しないと、静的キーワード共有の本来の意図に反します。

3.修正方法

staticキーワードで変更されたメソッドは、静的メソッドと呼ばれます。それ以外の場合は、インスタンスメソッドと呼ばれます。クラス名で呼び出すメソッド名。ただし、静的メソッドはクラスの静的変数やその他の静的メソッドを直接呼び出すことができ、メンバー変数やインスタンスメソッドを直接呼び出すことはできません(オブジェクト呼び出しを除く)。

class D {
    
    
	static {
    
    
		i = 2;
		System.out.println("D : 静态代码块");
	}
	static final int i;
	int j;
	
	static void method() {
    
    
		System.out.println(i);
		System.out.println(new D().j);
		
		method1();
		new D().method2();
	}
	
	static void method1() {
    
    
		System.out.println(i);
	}
	void method2() {
    
    
		System.out.println(i);
	}
}

注:クラスのインスタンスメソッドはアクセスするオブジェクトによって呼び出される必要があり、静的メソッドはクラス名を介して直接アクセスできるため、サーバーの展開を考慮せずにクラスを実行するにはどうすればよいですか?最大の可能性は「クラス名。静的メソッド」からJavaを起動することです。私は非常に多くの静的メソッドを定義していますが、JVMはどのようにしてメインエントランスを認識しますか?
おそらく、あなたは主な方法を考えました。
注:staticキーワードは通常のクラスを変更できませんが、staticキーワードを使用して内部クラスを変更し、静的内部クラスにすることができますstaticキーワード自体の意味は共有されており、JVMメモリにロードされたJavaクラスのメソッド領域もスレッドによって共有されているため、staticキーワードで通常のクラスを変更する必要はありません。

4.静的インポート

importを使用してパッケージまたはクラスをインポートする場合、staticを使用してパッケージ名またはクラスを変更し、静的インポートを示すことができます。静的インポートを動的インポートと比較して、理解を深めることができます。
動的インポートとは、プログラムの実行中にこのパッケージに含まれていないクラスのオブジェクトを新規作成する必要がある場合です。クラスはフルパスクラス名に従って読み込まれます。静的インポートとは、静的にインポートされたクラスをクラスがロードされるため、事前にインポートされます(クラス名、メソッド、または属性を使用せずに直接使用できます)。

スーパーキーワード

1.在子类中,通过super关键字可以在子类中使用父类的功能
2.super关键字相当于是父类的一个引用该对象
3.如果在构造方法中使用,必须出现在调用位置的第一行

このキーワード

各オブジェクトには、主に次の4つの側面で、現在のオブジェクト自体を指すthisという名前の参照があります。
(1)これは、クラスのメンバー変数であるこのクラスの属性を呼び出します。memberメソッドにmember変数と同じ名前のパラメーターがない場合は省略できます。(メンバーメソッドのデフォルトは、メンバー変数ではなく、メソッドのパラメーターを参照することです)
(2)これは、このクラスの他のメソッドを呼び出します。その中で、これはメンバーメソッド名の前に省略できます。
(3)これは、このクラスの他の構築メソッドを呼び出します。構築メソッドでは、このクラスの異なるパラメータテーブルを持つ構築メソッドをこれを介して呼び出すことができます。
(4)オブジェクト値を返します。たとえば、コードでは、return thisを使用して、特定のクラスへの参照を返すことができます。このとき、thisキーワードはクラスの名前を表します。

おすすめ

転載: blog.csdn.net/zhanlong11/article/details/114272782