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.
Wie kann ich auf eine Varibale aus einer anderen selbstgeschriebenen Klasse zugreifen?
Bei mir handelt es sich um einen int-Wert auf den ich zugreifen möchte.
Mein Vorschlag ist:
Java:
int i = 0;
Klasse objekt = new Klasse;
i = objekt.varible;
Wenn die Variable in der Klasse Klasse für die Klasse sichtbar ist, ist das doch klasse.
Ne also, "variable" muss nach außen sichtbar sein, sprich public oder protected wenn beide Klassen im gleichen Package liegen. Dann geht es.
Dein Fehler ist eher dass du das Objekt falsch erzeugst, bzw. gar nicht:
Java:
Klasse objekt = new Klasse;
Das ist ein Konstruktor-Aufruf, das ist wie eine Methode und braucht eine (wenn auch leere) Parameterliste, also Klammern:
@Unregistiert hier werden keine Methoden verwendet, er will direkt auf die Variable zugreifen und das ist ja so auch syntaktisch korrekt. Dass er sich mal über Getter/Setter und ihren Sinn informieren sollte, ist natürlich auch immer ein guter Rat.
Also das mit den Klammern hinter der Klasse, hab ich bei mir, nur vergessen zu posten
Was getter und setter ist, dass weiss ich jetzt. Nur die Anwendung verstehe ich noch nicht ganz.
Ich habe eine Klasse die heisst jetzt einach mal Klasse1, in der int y = 10 ist.
Und in einer anderen Klasse möchte ich auf diese Zahl zugreifen. Nur warum muss ich in der Klasse1 ne extra Methode anlegen um y zu übergeben?
Java:
int i = 0;
Klasse objekt = new Klasse();
i = objekt.GetVarible; // das V dann groß schreiben?
Musst du nicht, es sei denn die Variable ist nicht für andere Klassen sichtbar, also private geschalten. Jetzt kann man sich fragen wofür sollte man sie private machen. Das hat Hintergrund dass du innerhalb einer Methode die Zuweisung kontrollieren kannst.
Sagen wir du hast ne Klasse Auto, und die hat die Variable ps.
Jetzt könnte ich ja machen:
Java:
Auto a = new Auto();
a.ps = -100;
Aber es ist nicht gut dass ein Auto -100 PS haben kann. Deshalb schaltest du die Variable auf private, und stellst für die Veränderung einen öffentlichen Setter bereit, der sowas verhindert:
Java:
class Auto{
private int ps; // obiger Code würde jetzt nicht mehr funktionieren, weil er "sieht" diese Variable in anderen Klassen nicht mehr
public void setPs(int newPs){
if(newPs > 0){
ps = newPs;
}
else{
System.out.println("Ungültiger Wert für PS!");
}
}
Das ganze hat also einen Sicherheits- und Kontrollaspekt.
PS: Ja, Getter und Setter richtigen sich nach der Konvention setSomething und getSomething, also sollte der Anfangsbuchstabe groß geschrieben sein (Stichwort "CamelCase", bitte nicht verwechseln mit "CamelToe", das hat mal einer in unserem Uni-Praktikum gemacht, als er ein Referat darüber gehalten hat. Das ist einigermaßen peinlich )
Thx, erstmal für deine Hilfe!
Wenn ich i den Wert von der Variablen aus der anderen Klasse zuweisen möchte, dann ist das so doch richtig, oder nicht? Nur das funktioniert nicht. Und es ist auch alle public.
Java:
int i = 0;
Klasse objekt = new Klasse();
i = objekt.variable;
Ja das ist so richtig. Wenn es nicht funktioniert stimmt entweder an einer anderen Stelle im Programm etwas nicht, oder du hast die "Klasse" nicht importiert. Zeig mal den kompletten Quell-Code. Du solltest auch lernen zu unterscheiden zwischen "funktioniert nicht" und "kompiliert nicht". Ich nehme mal an bei dir ist letzteres der Fall. Und wenn du eine IDE hast (zB Eclipse oder Netbeans) dann malt der dir im Quellcode mit roten Kringeln alles voll Und das bedeutet man kann's nicht kompilieren, und da ist ein Fehler in der Syntax.
Nun ich habe dazu noch ein Problem und zwar befindet sich die Variable jetzt aus der Klasse in einem try-catch. Und wenn die Variable innerhalt der try-catch-Anweisung ist, dann funktionierts nicht. Ausserhalb des try-catch funktioniert der Zugriff.
Wie kann ich das beheben und was macht das für einen Sinn?
das fragst du mich? Wie bist du denn darauf gekommen einfach mal nen try-catch Block mitten in die Klasse reinzuklatschen? Also ich weiss auch nicht was das für einen Sinn machen sollte, die Leute von Sun wissen es scheinbar auch nicht weil man das nicht kompilieren kann
Was wolltest du denn damit erreichen?
edit: Ich bin mir grad nicht mehr sicher ob ich dich richtig verstehe. Ist der try-catch-Block in der Methode? Poste bitte nochmal den Code, aber pfusch nicht drin rum, sondern poste ihn exakt so wie er ist.
DIe Methode kann weggelassen werden. Das try-catch ist wegen dem Dateiöffnen. Deshalb muss das auch bleiben und ich auf die Variable aus dem try-catch zugreifen.
Java:
public class Klasse1
{
VARIANTE 1 int y = 10;
{
try {
VARIANTE 2 int y = 10;
hier wird eine Datei geöffnet
} catch (FileNotFoundException ex) {
Logger.getLogger(Auslesen.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Ach das steht im static-Block.. Dann müssen aber beide Varianten funktionieren. Hast du die nötige Klassen importiert? In diesem Falle also FileNotFoundException und das ganze Logger-Zeugs.
Sag mir mal bitte was für einen Editor du zum Programmieren benutzt. Du musst erstmal lernen Fehler zu interpretieren, oder zumindest die Fehlermeldungen zu posten.
Ich würde dir übrigens vorschlagen jetzt erstmal keine konkreten Dinge zu coden, sondern erstmal mehr über die Basics von Java zu lesen. Denn es fehlt dir an den grundlegendsten Kenntnissen, und so wirst du alle 5 Sekunden einen Fehler bekommen.
Aber die zweite Variante funktioniert nicht, sondern nur die erste.
Also die Grundlagen habe ich eigentlich schon gelesen bzw. kenne ich aus C++. Jedoch kenne ich mich try-catch z.b. nicht so aus. Das ist mir noch nicht so ganz vertraut.
Zum Editieren benutze ich Netbeans und die Fehler dort konnte ich bisher eigentlich gut interpretieren und korrigieren.
Nur wie gesagt, dass mit dem try-catch klappt nicht so recht.
Das widerspricht sich ja schon ein bisschen Wenn es nicht geht, muss es eine Meldung geben. Wenn du sie nicht verstehst, dann musst du sie hier posten. Ansonsten kann ich dir nicht mehr weiterhelfen, weil der Code den du gepostet hast funktioniert. Was heisst er klappt nicht "so recht"?
Nimm mal diesen Code und füge ihn in eine Datei "StaticTest.java" ein. Dann starte die Klasse:
Java:
public class StaticTest {
{
try {
int y = 10;
System.out.println(y);
} catch (Exception e) {
}
}
public static void main(String[] args) {
new StaticTest();
}
}
Und falls eine Fehlermeldung auftritt: Copy & Paste
Die int-Variable der VARIANTE 2 ist doch nur innerhalb des try-catch-Blocks sichtbar, deshalb kann auch nicht von ausserhalb darauf zugegriffen werden. Dazu muss die Variable schon eine (public) Klassenvariable sein.
Aber solange wir hier nicht den kompletten Code sehen, können wir noch weiter rumrätseln ;-)