Instanzen, wann muss ich Instanzen erzeugen & wo?)

Diskutiere Instanzen, wann muss ich Instanzen erzeugen & wo?) im Java Basics - Anfänger-Themen Bereich.
C

Codix

Ist diese Aussage korrekt? (nur das fettgedruckte)

Wenn man eine nichtstatische Methode hat (die man in der z.B. public class erstellt), dann muss man eine Instanz der Methode erzeugen (in der main class).


Um eine Instanz zu erzeugen, legen wir eine Variable mit dem Typ der Klasse an.

Das Erzeugen der Instanz erfolgt mit dem Operator "new", dem Namen der Klasse und den () Klammern.

Der Zugriff auf die Methoden erfolgt durch den Bezeichner der Variablen für die Instanz, einen trennenden Punkt und den Namen der Methoden.
Einen direkten Zugriff von aussen auf die Instanzvariablen sollten Sie nach Möglichkeit vermeiden.
=
Klassenmethoden gehören nicht zu einer Instanz, sondern zur Klasse an sich. Klassenmethoden lassen sich deshalb auch ohne Instanz aufrufen.
In Klassenmethoden können Sie nur auf Klassenvariablen bzw. lokale Variablen zugreifen.
 
M

M.L.

Die Aussage ist streng gesehen falsch:
- man muss die Methode nicht benutzen (dann stellt sich natürlich die Frage nach dem Sinn der Deklaration)
- es sollte wohl eher "Instanz der Klasse" heissen
- ob es die main class sein muss, hängt auch von den Modifizierern der Methode ab

S.a. https://www.javatutorial.de/w/Objekte_und_Klassen
 
C

Codix

Man kann Instanzen von Klassen erzeugen, nicht von Methoden. Also: Nein, ist nicht korrekt.
Nur von Klassen oder auch von Variablen?

D.h. man muss Instanzen von Klassen (nicht main Klassen, sondern public class) erzeugen, um mit in der Klasse angelegten Methoden, in der main Klasse arbeiten zu können, um sie dort aufrufen zu können über die Instanz der Klasse?
 
W

White_Fox

Nicht ganz korrekt. Eine Methode wird nicht instanziert. Aber Objekte werden instantiert, das ist richtig.

Beispiel: Du kannst keine Methode gehUndBringMirKaffee() erzeugen, das ist Unsinn.
Du kannst aber ein Objekt der Klasse Butler instantieren, und auf diesem die Methode anwenden, und das Butlerobjekt geht und bringt dir Kaffee.
 
C

Codix

Nicht ganz korrekt. Eine Methode wird nicht instanziert. Aber Objekte werden instantiert, das ist richtig.

Beispiel: Du kannst keine Methode gehUndBringMirKaffee() erzeugen, das ist Unsinn.
Du kannst aber ein Objekt der Klasse Butler instantieren, und auf diesem die Methode anwenden, und das Butlerobjekt geht und bringt dir Kaffee.
und was hat der code:

Code:
int getRandomNumber(){
    return 4;    //choosen by dice roll
}                //guaranteed to be random
damit zu tun?
 
C

Codix

Instantierst du eine Variable denn mit new?

Edit:

Signatur. Alternativ: Allgemeingültiger Lösungsvorschlag für alle Probleme.
ja.
Um eine Instanz zu erzeugen, legen wir eine Variable mit dem Typ der Klasse an.

Das Erzeugen der Instanz erfolgt mit dem Operator "new", dem Namen der Klasse und den () Klammern.
 
W

White_Fox

ja.
Um eine Instanz zu erzeugen, legen wir eine Variable mit dem Typ der Klasse an.
Sind das nur Variablen? Was ist mit primitiven Datentypen? Das sind auch Variablen.

Ok:
Eine Variable ist einfach nur ein Stück Speicher, auf dem du schreiben und lesen kannst. Mehr nicht. Speicher wird nicht instantiert (allenfalls wird Speicher alloziiert, d.h. beim Betriebssystem angefragt und von diesem evt. freigegeben, aber damit hast du in Java normalerweise nichts zu tun).

In Java ist es so: Du selber kommst an ein Objekt eigentlich gar nicht heran. Das, was in der Objektvariable steht, ist lediglich eine Referenz auf das Objekt, aber nicht das Objekt selber.


Edit:
Klassen werden instantiiert und da kommen dann Objekte raus.
Ähm...stimmt. Mea culpa.
 
W

White_Fox

Vielleicht wird es damit etwas deutlicher:

Java:
public class ClassWithInt{
    private int i;
   
    public ClassWithInt(int i){
        this.i = i;
    }
   
    public int getI(){return i;}
}

public static void main(String args[]){
    ClassWithInt someObject;
    ClassWithInt seccondReference;
   
    //Instanciate some objects
    someObject = new ClassWithInt(7);
   
    //Copy the object reference to another object variable
    seccondReference = someObject;
   
    //What does the new object variable do?
    System.out.println(seccondReference.getI());    //Another object variable, but same object
}
Edit:
Ansonsten ist dieses Thema auch sehr gut in "Java von Kopf bis Fuß" aufgearbeitet. Ich kann dir nur raten, es mal zu lesen.
 
C

Codix

danke für alle Antworten, ihr seid mir um Einiges voraus.
Vielleicht wird es damit etwas deutlicher:

Java:
public class ClassWithInt{
    private int i;
  
    public ClassWithInt(int i){
        this.i = i;
    }
  
    public int getI(){return i;}
}

public static void main(String args[]){
    ClassWithInt someObject;
    ClassWithInt seccondReference;
  
    //Instanciate some objects
    someObject = new ClassWithInt(7);
  
    //Copy the object reference to another object variable
    seccondReference = someObject;
  
    //What does the new object variable do?
    System.out.println(seccondReference.getI());    //Another object variable, but same object
}
Edit:
Ansonsten ist dieses Thema auch sehr gut in "Java von Kopf bis Fuß" aufgearbeitet. Ich kann dir nur raten, es mal zu lesen.
Hast du das Buch "Java von Kopf bis Fuß" als PDF? Ich würde es gern kaufen.
 
C

Codix

Es hängt vor allem davon ab, wo man die Instanz der Klasse benötigt. Generell kann man überall Instanzen von Klassen erzeugen.
Die Instanzen der Klassen ermöglichen uns nur den Zugriff auf die Methoden, oder?
Wann genau sollten wir Instanzen von Klassen erzeugen? Nur wenn wir auf die Methoden zugreifen wollen?
 
C

Codix

Eine Methode wird nicht instanziert. Aber Objekte werden instantiert, das ist richtig.

Beispiel: Du kannst keine Methode gehUndBringMirKaffee() erzeugen, das ist Unsinn.
Du kannst aber ein Objekt der Klasse Butler instantieren, und auf diesem die Methode anwenden, und das Butlerobjekt geht und bringt dir Kaffee.
 
W

White_Fox

Nein. Wenn du eine Klasse instantierst, belegst du z.B. auch Speicher für Membervariablen.

Wenn du nur die Methode einer Klasse brauchst solltest du die Methode als static deklarieren, dann mußt du keine Klasse instanzieren.
 
Thema: 

Instanzen, wann muss ich Instanzen erzeugen & wo?)

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben