Java学習日記10-Javaの変数とその伝達

13372 ワード

Java学習日記10——変数とその伝達、引用タイプと基本タイプ変数の伝達の違い
 変数の定義は前に説明しました:ここをクリックして原文を見ることができます.ここの分類は少し前に通らない.ここでの変数は主にフィールド変数とローカル変数に分けられる.
 1.ストレージの観点から、 フィールド変数はオブジェクトの一部であり、スタックに格納され、ローカル変数はスタックの真ん中に格納されます. 2.ライフサイクルの観点から、 フィールド変数のライフサイクルはクラスの存在に伴って存在するが、ローカル変数はメソッド呼び出し時にのみ存在する.また、メソッドのローカル変数は、フィールド変数のように自動的に割り当てられるのではなく、定義を初期化する必要があります. 3.構文の観点から見ると、 フィールド変数はクラスに属し、pubicやprivate、static、finalなどで修飾することができ、局所変数はアクセス制御子やstaticで修飾することができず、finalで修飾することができる.
メソッド呼び出し時——変数の伝達 Javaでは変数の種類が異なるため,各メソッド間のパラメータ伝達効果が一致しない.基本パラメータタイプの値は直接変数に存在し、複製伝達であり、つまり同じ変数名が異なるメモリ領域に存在し、呼び出しの結果が異なるため、このメソッドの値を別のメソッドにコピーして変更する場合、現在のメソッドの値は変更されません(同じ名前の複数の変数に相当し、独自のメソッドボディでのみ有効です).参照タイプのデータは、メモリ領域に格納され、参照されるエンティティオブジェクトです.(newメソッドで作成された)も一定の空間を占め、他のメソッドで値を修正すると最終値の変化を招く. 具体的には、int整数タイプが基本データタイプであり、配列int[]は参照タイプの変数である.プログラムは煩わしくなく、簡単で分かりやすく、怖がらないでください.
public class variable {

	static void modify(int a) {
		a++;
		System.out.println(" modify    a    :"+a);
	}
	static void modify(int []b) {
		b[0]++;
		System.out.println(" modify    b[0]    :"+b[0]);
	}
	public static void main(String []args) {
		int a = 0;
		System.out.println("    a :"+a);
		modify(a);
		System.out.println("            a :"+a);

		int []b = new int[1];
		System.out.println("    b[0] :"+a);
		modify(b);
		System.out.println("            b[0] :"+b[0]);
	}
}

プログラムの実行結果は次のとおりです.
    a :0
 modify    a    :1
            a :0
    b[0]0
 modify    b[0]1
            b[0]1

 注意:aを直接クラスに定義すると、つまりaをvariableクラスの一部として、クラスが参照タイプデータであるため、クラスの一部として、一定のメモリ領域を占有することになります.クラスのエンティティオブジェクト生成(new)に伴って対応する生成も生成されます.これは参照タイプと理解でき、メソッドボディの変更に伴って変更されます.
参照タイプデータの転送に関する注意事項
クラスのエンティティなどの参照タイプビルド(new)1つのクラスのエンティティdは、その後、別のエンティティオブジェクトddに付与記号を用いて付与され、単に付与記号を用いて伝達されるだけであれば、最終的な効果は、dとddが実際に動作するのは同じオブジェクトメモリ空間である.すなわち、newの付与を経ずに、dの参照をddに伝達するだけで、新しいエンティティオブジェクトは生成されない.例を挙げると、
package learning4;

public class dataconvert {
	private int year;
	private int mouth;
	private int day;
	void yearadd() {
		year ++;
	}
	void setdata(int year,int mouth,int day){
		this.day = day;
		this.mouth = mouth;
		this.year = year;
	}
	void dispaly() {
		System.out.println(year+" "+mouth+" "+day+" ");
	}
	
	public static void main(String [] args) {
		dataconvert d = new dataconvert();
		dataconvert dd = d;// dd    d,                
		//dd d            
		d.setdata(2020, 8,1);// d    
		dd.setdata(2019, 11, 11);// dd    ,             ,        2019.11.11       
		d.dispaly();
		d.yearadd();
		d.dispaly();
		dd.dispaly();
	}
}

プログラムの実行結果は次のとおりです.
2019 11 11 
2020 11 11 
2020 11 11 

実行結果を見ると,newで割り当てられた空間でなければ,新しいオブジェクトを作成するのではなく,このように直接等号で,いくらオブジェクトを設定しても同じオブジェクト空間を操作していることがわかる.
Javaに興味があれば、前の号の基礎知識を知ることができます!次のリンクを添付します.
Javaプログラミング基礎認知:Java学習日記1——基礎認知Javaオブジェクト向けプログラミング認識:Java学習日記2——オブジェクト向けプログラミング認知Javaプログラムの基本構造認識:Java学習日記3——プログラムタイプと認知Javaを構成する入出力方法まとめ:Java学習日記4——Java入出力方法Javaのデータタイプ、変数、定数、演算子:Java学習日記5-データ型、変数、定数、演算子、配列Java学習日記6-クラス、フィールド、メソッド、thisの使用:Java学習日記6-クラス、フィールド、メソッド、thisの使用Java学習日記7-クラスの継承、super使用ルール:Java学習日記7-クラスの継承、super使用ルールJava学習日記8-public、static、private、final、abstract、protected修飾子:Java学習日記8-public、static、private、final、abstract、protected修飾子Java学習日記9-インタフェース(長文アラート):Java学習日記9-インタフェース(長文アラート)