Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Also, ich musste in der Schule ein Projekt programmieren(Tic Tac Toe) und hierbei verwendete ich fast nur statische Variablen. Statische Variablen aus dem Grund, damit ich in einer anderen Klasse auf die bestimmte Variable zugreifen kann und somit gleich den aktuellen Wert darin habe. Gestern sah sich mein Lehrer das Projekt mal an..Ich muss das statisch da rausmachen ..wenn ich aber keine static-Variablen verwende funktioniert das nicht. Wie kann ich das sonst machen ? - Bei Methoden aufruf übergeben mach ich da wo es geht..er meinte mit get-set methoden + nen Konstruktor aber wie geht das ??
Beispiel:
Code:
public class BeispielKlasse {
public static double a;
public static void main(String[] args) {
for(int i=0; i<9; i++) {
a+=5;
}
}
}
public class Test {
private static BeispielKlasse bspKl = new BeispielKlasse();
public void print() {
System.out.println("Aktueller Wert" + bspKI.a);
}
}
wie könnte ich hier in der Klasse Test den aktuellen Wert von 'a' bekommen ? ..und jetzt pls nicht mit Methoden-aufruf kommen..das weiß ich schon, aber das muss ja anders auch gehen
um ohne static arbeiten zu können braucht man eine Instanz der jeweiligen Klasse. mit bspKI hast du dies schon, d.h. du kannst im Prinzip einfach das static bei der Variable 'a' entfernen und es funktioniert.
der code aber so wie er da steht macht nix, da die main methode nur a erhöht ?!
public class BeispielKlasse {
public static double a;
public static Test test = new Test();
public static void main(String[] args) {
BeispielKlasse bspKl = new BeispielKlasse();
bspKl.foo();
}
public void foo() {
for(int i=0; i<9; i++) {
a+=5;
test.print();
}
}
}
public class Test {
private static BeispielKlasse bspKl = new BeispielKlasse();
public void print() {
System.out.println("Aktueller Wert" + bspKl.a);
}
}
Hier kann man das static nicht wegmachen..selben Fehler bekomm ich wenn ich bei meinem Projekt das 'static' weg mache ebenfalls..
public class BeispielKlasse {
private double a;
private Test test;
public static void main(String[] args) {
BeispielKlasse bspKl = new BeispielKlasse();
bspKl.foo();
}
public void foo() {
for(int i=0; i<9; i++) {
a+=5;
}
test = new Test(this);
}
public double getValue() {
return a;
}
}
Code:
public class Test {
private BeispielKlasse b;
public Test(BeispielKlasse b) {
this.b = b;
print();
}
public void print() {
System.out.println("Wert von a: " + b.getValue());
}
}
Man lässt keinen direkten Zugriff (public) auf die Datenelemente eines Objekts von außen zu.
Falls du das vor hattest, solltest du dich besser gleich von dieser Vorstellung verabschieden.
Die beiden Beispiele sind durchaus üblich und richtig.
k ..sieht ja gar nicht so schwer aus :> ..eine frage noch..
" Test test = new Test(this); " ..was bedeutet hier das 'this' ? - haben wir zwar schon ziemlich oft gehabt aber eigentlich hab ich das noch nie verstanden.. und ist das egal wo ich diesen Code hinschreibe oder muss das dort bei dem Wert sein ? Sprich..ich habe 5 Variablen in untersch. Methoden aber in einer Klasse, die in ner anderen Klasse gebraucht werden..reicht es da wenn ich das einmal schreibe oder gehört dann.. "Test test = new Test(this);" , "Test test1 = new Test(this)" usw..und das bei der Variable die gebraucht wird !?
this zeigt immer auf ein Objekt der Klasse, in der du dich gerade befindest.
Das heißt, this zeigt in diesem Fall auf ein Objekt der Klasse BeispielKlasse.
In dem du nun die Referenz an ein Objekt der Klasse Test übergibst, erhält Test Zugriff auf alle öffentlichen Methoden von BeispielKlasse.
Es genügt die Referenz einmal zu übergeben, von da an kannst du in Test jederzeit auf die Methoden von BeispielKlasse zugreifen. Sowas macht sich am besten im Konstruktor.