2017-02-21 14 views
0

オブジェクトやあみんな、私はJavaのprogramming.Iに新しいですが、Javaクラスを試してみましたし、私がやったことは、私はインスタンス変数xを作成し、コピーし、そのxの値がyのしていることです。 次に、引数として値またはxを取るコンストラクタを定義します。私はyの値を印刷しようとすると、 は、今ではしながら、0として値を与えるか、問題が起きているのはなぜそれが5 を与えるxは?我々は唯一のすべてのインスタンスフィールドが作成され、新しいキーワードやコンストラクタを使用する場合 はので、私はそう私は感じて、我々は唯一のすべてのインスタンスフィールドが作成され、新しいキーワードやコンストラクタを使用する場合、我々はJavaクラスは、動的なメモリ割り当て

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package test; 
/** 
* 
* @author Mridul 
*/ 
public class Test { 
int x; 
int y=x; 
Test(int a) 
{ 
    x=a; 

} 
void print() 
{ 
    System.out.println(x); 
} 
    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     Test ob=new Test(5); 
     ob.print(); 
     System.out.println(ob.y); 


     // TODO code application logic here 
    } 

} 

Output 
5 
0 

を使用した後のように感じます使用後のように

Test ob=new Test(5); 

クラス内のすべてのコード(x、y = x)のみを実行する必要があり、問題を作成してはいけません。 あなたがTestの新しいインスタンスを作成すると、これは(順番に)何が起こっている

+0

'' x = a'は* copy *の一種です。 'a'の変更は' = 'の後に' x'に反映されません( 'int x;'は 'int x = 0') –

+0

ですが、出力ではx = 5、y = 0となります –

+0

...インスタンスフィールドの初期化は_before_コンストラクタ文を実行するためです。 – Seelenvirtuose

答えて

0

助けてください:

int x; // x = 0 
int y=x; // y = 0 
Test(int a) 
{ 
    x=a; // x = your a value 
} 

=>コミュニティのwikiを、気軽に....ここ

0

この:

int y=x; 

はよ前一度起こりますurコンストラクタが実行されます。

したがってCTORは、xの値を変化させます。 yは以前の値にとどまります。 (xは最初はデフォルト値の0を取り、それはyに入り、次にctorが実行され、xがaの値に変更されます)。

そして、注意してください。これは、「動的割り当て」とは何の関係もありません。 newは三つのことが発生します。

  • メモリは新しいオブジェクトの
  • フィールドが
  • init'edされている指定されたコンストラクタが

(詳細はhereを参照)を呼び出され、割り当てられています。 yにxと同じ値を設定したい場合は、ただ

パブリッククラスTest 最終int型のx、yの操作を行います。

Test(int incoming) { 
    x = incoming; 
    y = incoming; 
} 
0

newを使用してコンストラクタをコールすると、Javaは新しく割り当てられたオブジェクトの構築を開始します。インスタンスフィールド(フィールドxとフィールドyの場合)の値は、一連のルールによって決まります。

  • まず、インスタンスフィールドが初期化されます。 xのデフォルト値は(0)です。 yは、xの値を取得します。これは0です。
  • 次に、コンストラクタでxaの値に設定されます。

yそれはx前にはaの値に設定され、その値を取得しているため、まだ0です。

0

new operatorは、オブジェクトに必要なメモリを割り当てるために自動メモリ割り当て用です。new operatorを使用する必要があります。

関連する問題