[Java] Erzeugtem Objekt Wert zuweisen

Scowl

Pro-Rauchfrei e.V.
4 Mai 2006
578
61
Hallo zusammen,

ich versuche mich in Java einzuarbeiten... leider lässt der Erfolg noch auf sich warten...

Kann mir jemand sagen, warum ich hier den 'Max-Wert' nicht zuweisen kann?




Danke im Voraus!


Gruß Scowl
 
Keine Ahnung...

Ich habe hier ein Buch neben mir liegen... und habe es eigentlich nur auf meinen 'Bedarf' abgewandelt.
 
Du kannst keinen Code in dem Sinn mitten eine Klasse schreiben.
Zum anderen hast du die Klasse als static deklariert. Das willst du denk ich mal auch nicht.

Sowas da funktioniert:
PHP:
public class Foo
{
  public int bar;

  public static void main(String... args)
  {
    Foo foo = new Foo();
    foo.bar = 42;
  }
}
 
@ theHacker: Danke, das hat schon einmal funktioniert. Aber eigentlich wollte ich das nicht in die 'Main-Klasse' schreiben... die soll 'schlank' bleiben.

Ich möchte z.B. 3 Berufsbezeichnungen anlegen, die einen min und max wert annehmen.

Also Instanzen die fest sind und mit denen ich dann arbeiten/rechnen kann.


Geht das überhaupt? Wenn ja, kann ich dann schon folgendes 3 mal ausführen:
grupp.name = schreiner
grupp.name = tischler
grupp.name = maurer
?

Wahrscheinlich ist das nicht elegant, aber geht das überhaupt?


Gruß Scowl
 
Aber eigentlich wollte ich das nicht in die 'Main-Klasse' schreiben... die soll 'schlank' bleiben.
Wo du main() reinsteckst, is ja praktisch erstmal wurscht. Schlanker wird es deshalb auch ned, weil irgendwohin musst du es ja packen.
Ich möchte z.B. 3 Berufsbezeichnungen anlegen, die einen min und max wert annehmen.

Also Instanzen die fest sind und mit denen ich dann arbeiten/rechnen kann.
Instanzen von was ? Ich versteh erstmal dein Problem ned, also was du überhaupt machen willst.

Wenn du was fest haben willst, benutzt du das Schlüsselwort final.
z.B.
PHP:
public class Beruf
{
  public final String name;

  public static void main(String... args)
  {
    Beruf handwerker = new Beruf();
    handwerker.name = "Schreiner";
    handwerker.name = "Metzger"; // <-- RuntimeException

    Beruf fleischmann = new Beruf();
    fleischmann.name = "Metzger"; // <-- OK
  }
}
 
meinst du eventuell sowas:

PHP:
class  Gruppe{

  public String name;
  public int min, max;

  public static final Gruppe metzger = new Gruppe("metzger", 50, 100);
  public static final Gruppe handwerker = new Gruppe("handwerker", 60, 100);

  public Gruppe(String name, int min, int max){
    this.name = name;
    this.min = min;
    this.max = max;
  }
}

@theHacker: dein Code funzt net, da ein Attribut beim kompilieren der Klasse final wird, dementsprechend kannst du es schon beim ersten Mal nicht mit Daten füllen (Schreiner).
 
@theHacker: dein Code funzt net, da ein Attribut beim kompilieren der Klasse final wird, dementsprechend kannst du es schon beim ersten Mal nicht mit Daten füllen (Schreiner).
Ah ok, danke.
Ich hab grad keinen Java-Compiler installiert, sonst hätte ich meinen Code vorher getestet.
Mal ne Frage: Ich hab das so gelernt, dass man String[] schreibt. Macht das einen Unterschied, und wenn ja, wo liegt dieser?
Is gleichwertig ;)

edit:
Ich persönlich bevorzuge bei main() immer die ...-Schreibweise, um anzudeuten, dass hier wirklich beliebig viele Parameter von außen kommen können und ich keine Ahnung hab, wie viele ich letztendlich wirklich krieg.
 
nein es gibt keinen, bedeutet das gleiche, der Code mit String... benutzt nur Java5 Features, so genannte Varargs, du kannst soviele Strings übergeben wie du willst, dieses wird dann intern wieder in ein Array umgewandelt, dadurch lässt sich

PHP:
this.meineMethode("String1", "String2", "String3");

lösen, statt es wie früher umständlich mit

PHP:
String[] strs = {"String1", "String2", "String3"};
this.meineMethode(strs);

zu machen. Ich würde aber da lieber auf die altbewährte Methode zurückgreifen, weil wir sonst sinnlos eine Abwärtskompatibilität verspielen.

Edit: Varargs als neues Java5-Feature
 
PHP:
class  Gruppe{

  public String name;
  public int min, max;

  public static final Gruppe metzger = new Gruppe("metzger", 50, 100);
  public static final Gruppe handwerker = new Gruppe("handwerker", 60, 100);

  public Gruppe(String name, int min, int max){
    this.name = name;
    this.min = min;
    this.max = max;
  }
}


Hallo IceBreaker,

das sieht doch gar nicht schlecht aus und funktioniert bei mir auch. Kannst du bitte die 'Blöcke' ein wenig erläutern, damit ich das noch besser nachvollziehen kann?

Wäre super!

Gruß Scowl
 
PHP:
//Klasse Gruppe^^
class  Gruppe{

  //Anlegen der Attribute der Klasse
  public String name;
  public int min, max;

  //Anlegen von finalen statischen Objekten
  //diese werden bei der Kompilierung der Klasse angelegt und existieren deshalb zur Laufzeit
  //und können somit nicht mehr geändert werden
  public static final Gruppe metzger = new Gruppe("metzger", 50, 100);
  public static final Gruppe handwerker = new Gruppe("handwerker", 60, 100);

  //Konstruktor
  public Gruppe(String name, int min, int max){
    this.name = name;
    this.min = min;
    this.max = max;
  }
}

ausreichend?