Hey Leute, ich bin neu in Java Programmierung. Ich habe versucht, mit Java-Klassen zu experimentieren und was ich getan habe ist, dass ich eine Instanzvariable x und dann y erstellt habe, die die Werte von x kopiert. Dann definiere ich einen Konstruktor, der den Wert oder x als Argument nimmt. Jetzt, wenn ich versuche, den Wert von y zu drucken, gibt es den Wert als 0, während oder x es gibt 5. Warum ist das Problem passiert? Wenn wir neues Schlüsselwort und den Konstruktor verwenden dann nur alle Instanzfelder so erstellt werden, ich fühle mich wie nach einemJava Klassenobjekt Dynamische Speicherzuweisung
/*
* 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
verwenden Wenn wir neues Schlüsselwort und den Konstruktor verwenden dann nur alle Instanzfelder so erstellt werden, ich fühle mich wie, nachdem wir verwenden sollten
Test ob=new Test(5);
Dann nur alle Codes in der Klasse (x, y = x) laufen und es sollte nicht das Problem geschaffen haben. Bitte Hilfe
für 'int'' x = a' ist eine Art von * copy *, jede Änderung von 'a' wird nicht in' x' nach dem '=' reflektiert (und 'int x;' ist äquivalent zu 'int x = 0') –
aber in der Ausgabe gibt es x = 5 und y = 0 –
... weil die Instanzfeldinitialisierung _before_ Konstruktoranweisungen ausführt. – Seelenvirtuose