これら2人の兄弟を区別するために、まず第一に、私たちは彼らが何であるかを知る必要があります。まず、メンバー変数を使用します。
メンバー変数
勉強しましょう:
属性:外部特性。人間の身長や体重など
行動:何ができますか。たとえば、人々は話す、バスケットボールをするなどの行動を持っています。
Java言語では、最も基本的なユニットはクラスであり、クラスは物事を反映するために使用されます。
クラスのクラスで物事を説明することにも同じことが言えます。
属性:対応するクラスのメンバー変数
動作:対応するクラスのメンバー関数
クラスの定義は、実際にはクラスのメンバー(メンバー変数とメンバー関数)です
拡張:クラスは抽象的な概念であり、オブジェクトはクラスの具体的な存在と具体化です。たとえば、人生の車はクラスと見なすことができ、これを車のクラスと呼びます。各車には色とタイヤ番号があり(属性、つまりメンバー変数として定義できます)、各車(つまり、クラスの総メンバー関数に対応する車の動作)を実行できます。車をインスタンス化すると、メルセデスベンツやBMW(BMW)などのオブジェクトを作成します。
DEMO1:
パブリッククラスカー{プライベートストリングカラー; //自動車の色を定義します。 //車のタイヤ番号、グローバル変数の公共車(String Color、int Numluntai){super(); this.color = color; this.numluntai = numluntai; } public void run(){system.out.println(this.numluntai + "wheels" + this.color + "車が道路を運転している"); }} Public Class Classtest {public static void main(string [] args){car bmw = new car( "black"、4); // bmw bmw.run()という名前でセダンオブジェクトを作成します。 }}実行結果:
4つのホイールを備えた黒いセダンが道路を運転しています
その中でも、色とnulluntaiは車のクラスのメンバー変数と呼ばれています。このプロパティは、クラスのプロパティを説明するために使用できます。それ以外の場合は、ローカル変数として定義する必要があります。
たとえば、私はforループにローカル変数です。
for(int i = 0; i <args.length; i ++){
......
}
たとえば、変数はメンバーメソッドでローカル変数として記述されます。
PublicClass Car {プライベート文字列色; //自動車の色を定義します。 //車のタイヤ番号、グローバル変数の公共車(String Color、int Numluntai){super(); this.color = color; this.numluntai = numluntai; } public void run(){string carname = "bmw"; //これはローカル変数System.out.println(this.numluntai + "wheels" + this.color + carname + "車が道路を運転している"); }} publicClass classtest {public static void main(string [] args){car bmw = new car( "black"、4); // bmw bmw.run()という名前でセダンオブジェクトを作成します。 }}結果:
4つのホイールを備えた黒いBMWセダンが道路を運転しています
メンバー変数とローカル変数の違い
メンバー変数:
classメンバー変数はクラスで定義されており、クラス全体でアクセスできます。
②メンバー変数は、オブジェクトの確立とともに確立され、オブジェクトの消失とともに消え、オブジェクトが配置されているヒープメモリに存在します。
commentメンバー変数には、デフォルトの初期化値があります。
ローカル変数:
docalローカル変数は、次のようなローカルスコープでのみ定義されます。関数内、ステートメント内など、それらが属する領域でのみ有効です。
stackメモリにローカル変数が存在します。関数の範囲が終了すると、可変空間が自動的にリリースされます。
localローカル変数には、デフォルトの初期化値がありません
変数を使用するときに従う必要がある原則は次のとおりです。
まず、ローカルスコープで検索し、1つがある場合は使用します。次に、メンバーの位置で検索します。
これを見ると少し混乱するかもしれません。以下の例を並べ替えましょう。慎重に考えると、実際には非常に簡単です。
最初に簡単なコードを見てみましょう。
最初に、人のクラスを定義しました。
パブリッククラスの人{private int age = 1000; //メンバー変数を定義する、年齢は1000人の公共ボイド板(int age){age = age; System.out.println( "メソッド内の年齢"+age); } public void sayshello(){system.out.println( "私の年齢は"+age+"。"); }}次に、メイン関数にオブジェクトを作成し、出力します。
person p = new person(); p.setage(20); p.sayhello();
出力の結果は何ですか?私の年齢が20歳であると想像したのではなく、次のことです。
//メソッド内の年齢は20 //私の年齢は1000です。
あなたがそれについて考えるならば、それは実際に理解するのが簡単です。
一言で言えば、異なる名前がある場合、メソッドの変数名はメンバー変数を表します。同じ名前がある場合、メソッドの変数名はローカル変数のみを表し、メンバー変数とは関係ありません。
したがって、最初に、Person Object Pを作成するとき、オブジェクトを作成するときにメンバー変数が初期化されました。メンバー変数年齢の初期値は1000です。
P.Setage(20)の場合、20は実際にはセット設定方法でのみ動作するため、メソッドの20歳は出力です。この文を実行した後、20は破壊されます。
次に、Sayhelloを実行すると、その中の年齢はメンバー変数の値を表しているため、まだ1000です。
ここでまだ理解できない場合は、自分でコードを書いて出力の結果を確認して体験できます。
したがって、同じ名前が使用されている場合、この変数名をメンバー変数を表す必要があります。方法はありますか?
次に、このキーワードについて話さなければなりません。人のクラスをこれに変更しました。
パブリッククラスの人{private int age = 1000; public void Setage(int age){this.age = age; System.out.println( "メソッド内の年齢"+age); } public void sayshello(){system.out.println( "私の年齢は"+age+"。"); }}コードをもう一度実行して、コードの実行結果が次のものになることがわかります。
//メソッド内の年齢は20です//私の年齢は20です。
これは現在のオブジェクトを表します。
これは、ここでのageは、Pオブジェクトの年齢の値(つまり、Pオブジェクトのメンバー変数年齢)が20であることを具体的に示しています。
2つの本質は可変ですが、使用すると非常に違いがあり、注意しないとtrapに陥る可能性があります。最初に覚えておいてください。クラスでは、変数を使用してクラスのプロパティを説明できる場合、メンバー変数として定義されます。そうしないと、ローカル変数として定義する必要があります。理解できない場合は、より多くのコードを書くと理解できます。