Unterschied zwischen new und import

efaq

Mitglied
Hi Leute, ich hab eine Frage: Wo genau liegt der Unterschied zwischen dem Erzeugen einer neuen Instanz (new..) und dem Import von einer Klasse, um davon dann ein Objekt in einer anderen Klasse erzeugen zu können?

Folgendes: Ich habe ein Java-Projekt, dass mehrere Packages hat. In einem Package namens "utils" liegt eine Klasse namens "GenerList". In einem anderen Package liegen 2 "Dinge": Einmal eine Klasse namens "StockManger" und einmal ein Interface namens "StockItem".

Hier mal der Code aus der Klasse StockManager:

package bookstore.stock;

import bookstore.utils.GenericList;

/*
* Diese Klasse ist (beispielhaft) für die Überwachung
* der Lagerbestände und deren Gesamtgewicht zuständig.
* (damit das Regalbrett nicht bricht o.ä.)
*/
public class StockManager {

/*
* Damit eine Datenstruktur benutzt werden kann, die unsere
* Objekte verwaltet, wurde die StringList aus einer vergangenen
* Sitzung zu umprogrammiert, dass jetzt beliebige Datentypen
* damit verwendet werden können. Das geschieht mit Generics
* (die Typ-Angaben in den spitzen Klammern). Wir sehen uns
* Generics später noch genauer an, deshalb können sie hier
* vorerst ignoriert werden.
*/
private GenericList<StockItem> stock;

public StockManager() {
//neue Instanz der Liste erzeugen
this.stock = new GenericList<StockItem>();
}

/*
* Fügt der Liste ein StockItem hinzu
*/
public void addStockItem(StockItem item){
stock.add(item);
}

/*
* Gibt das Gesamtgewicht aller StockItems im Lager zurück
*/
public double getTotalItemWeight() {
double weight = 0;
for (int i = 0; i < stock.size(); i++) {
weight += stock.get(i).getWeight();// Woher kommt das "i"?
}
return weight;
}

}




Frage: Wieso kann hier die GenericList via import erzeugt werden? Ich dachte man müsste immer eine "Sache" via new Operator instanziieren. Zudem kann ich auf StockItem zugreifen. Warum? Es liegt zwar im selben Package aber müsste ein Objekt hierfür nicht auch erst via new erzeugt werden?

Stattdessen steht da "private GenericList<StockItem> stock; " und es scheint zu klappen. Wo genau liegt hier der Unterschied? Wann muss man also new verwenden und wann geht so was wie da oben? Hat es was mit Generics im Allgemeinen zu tun?

Ich danke euch schon mal im Voraus für eure Antwort!
 

httpdigest

Top Contributor
Wo genau liegt der Unterschied zwischen dem Erzeugen einer neuen Instanz (new..) und dem Import von einer Klasse, um davon dann ein Objekt in einer anderen Klasse erzeugen zu können?
Irgendwie steckt die Antwort doch schon in deiner Frage: Mit `new` erzeugst du eine neue Instanz einer Klasse. Und das `import` Schlüsselwort dient nur für das Auflösen von Typen bei Verwendung von nicht vollqualifizierten Namen, wenn die Typen nicht imselben Package sind. Zum Beispiel kannst du komplett auf `import` Statements verzichten, wenn du immer vollqualifizierte Namen ausschreibst, wie z.B. `bookstore.utils.GenericList` statt `import bookstore.utils.GenericList` und `GenericList`.
Die Liste der `import`-Statements am Anfang der Compilation Unit sagt dem Java Compiler nur, wo er mal versuchen soll zu gucken, wenn er auf einen nicht vollqualifizierten Namen eines Typs trifft, den er nicht auflösen kann.
 

efaq

Mitglied
Irgendwie steckt die Antwort doch schon in deiner Frage: Mit `new` erzeugst du eine neue Instanz einer Klasse. Und das `import` Schlüsselwort dient nur für das Auflösen von Typen bei Verwendung von nicht vollqualifizierten Namen, wenn die Typen nicht imselben Package sind. Zum Beispiel kannst du komplett auf `import` Statements verzichten, wenn du immer vollqualifizierte Namen ausschreibst, wie z.B. `bookstore.utils.GenericList` statt `import bookstore.utils.GenericList` und `GenericList`.
Die Liste der `import`-Statements am Anfang der Compilation Unit sagt dem Java Compiler nur, wo er mal versuchen soll zu gucken, wenn er auf einen nicht vollqualifizierten Namen eines Typs trifft, den er nicht auflösen kann.


Danke erstmal für deine Antwort, aber leider verstehe ich das nicht so ganz..

1) was genau ist gemeint mit "Verwendung von nicht vollqualifizierten Namen "?
2) Und du meinst es reicht aus, wenn man nur `bookstore.utils.GenericList` statt `import bookstore.utils.GenericList` schreibt? Also quasi das "import" einfach weglassen oder wie?
 

httpdigest

Top Contributor
Beispiel deiner Klasse ohne import:
Java:
package bookstore.stock;
public class StockManager {
  private bookstore.utils.GenericList<StockItem> stock; // <- bookstore.utils.GenericList ist ein vollqualifizierter Name
  public StockManager() {
    this.stock = new bookstore.utils.GenericList<StockItem>();
  }
  public void addStockItem(StockItem item){
    stock.add(item);
  }
  public double getTotalItemWeight() {
    double weight = 0;
    for (int i = 0; i < stock.size(); i++) {
      weight += stock.get(i).getWeight();
    }
    return weight;
  }
}
 

temi

Top Contributor
Wieso kann hier die GenericList via import erzeugt werden?

Mit "import" erzeugt man gar nichts.

In deinem Beispiel wird eine private Variable vom Typ "GenericList" deklariert.

Im Konstruktor wird dann eine Instanz erzeugt und zugewiesen:
Java:
public StockManager() {
//neue Instanz der Liste erzeugen
this.stock = new GenericList<StockItem>();
}
 

mihe7

Top Contributor
Danke erstmal für deine Antwort, aber leider verstehe ich das nicht so ganz..
Ich versuche es mal mit einer Analogie. Wieso hast Du im Dateisystem Ordner? Klar, um Ordnung zu halten. Aber Ordner sind vor allem Namensräume. D. h. durch den Ornder ist es möglich, im Dateisystem zig mal den gleichen Dateinamen zu verwenden. Ich habe z. B. bestimmt 100 Dateien, die alle Test.java heißen. Das funktioniert, weil sie sich in unterschiedlichen Ordnern befinden.

Der Dateiname alleine reicht also nicht, um eine dieser 100 Dateien zu identifizieren. Vielmehr brauche ich einen vollqualifizierten Dateinamen. Das wäre auf meinem System der Pfad zur Datei. Zum Beispiel /home/mihe7/java/junk/area/Test.java

Wenn ich in dieses Verzeichnis wechsle, dann muss ich aber nicht den kompletten Pfad angeben, sondern es reicht Test.java anzugeben.

Genauso funktioniert das mit Java und seinen Klassen. Klassen befinden sich in Paketen. Der vollqualifizierte Name besteht also aus dem Pfad zur Klasse, z. B. java.lang.String ist eine Klasse, die sich im Paket (= Verzeichnis der Analogie) java.lang befindet.

Da der Entwickler seine Klassen in seinen Paketen erstellt, müsste er nun bei jeder Gelegenheit die vollqualifizierten Klassennamen angeben, z. B. java.util.List list = new java.util.ArrayList<>(); Das ist notwendig, damit der Compiler weiß, welche List und welche ArrayList verwendet werden soll (es kann ja mehrere geben)

Das wäre auf Dauer ziemlich nervig. Daher hat man die Möglichkeit mit einem import-Statement zu sagen, welche Klasse man meint, wenn im Code selbst das Paket weggelassen wird nicht angegeben wird.
Java:
import java.util.List; // verwende diese Klasse, wenn ich im Code nur von List spreche
...
private List list; // wegen des import-Statements kann der Compiler dies zu java.util.List auflösen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Unterschied zwischen Denkweisen Java Basics - Anfänger-Themen 13
Ras Unterschied zwischen parser xml and api xml Java Basics - Anfänger-Themen 7
X Was ist der Unterschied zwischen materialisierten und nichtmaterialisierten Attributen einer Klasse? Java Basics - Anfänger-Themen 1
jhCDtGVjcZGcfzug Was ist der Unterschied zwischen diesen Quellcodes? Java Basics - Anfänger-Themen 3
Y Unterschied zwischen WindowBuilder und herkömmlichen erstellen des GUI´s? Java Basics - Anfänger-Themen 9
U Worin besteht der Unterschied zwischen call by reference und call by value? Java Basics - Anfänger-Themen 14
B Unterschied zwischen (List<T> a) und (T[] a) Java Basics - Anfänger-Themen 7
Aprendiendo Unterschied zwischen Referenzvariable und Instanzvariable. Java Basics - Anfänger-Themen 2
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12
schoenosrockos Unterschied zwischen Objekten und vererbungen Java Basics - Anfänger-Themen 1
J Variablen Unterschied zwischen lokalen-, Instanz-, Klassenvariablen Java Basics - Anfänger-Themen 6
L Unterschied zwischen Klassen - und Instanzvarbiablen Java Basics - Anfänger-Themen 1
M Unterschied zwischen Classpath eines Eclipse Projektes und dem CLASSPATH? Java Basics - Anfänger-Themen 3
D Unterschied zwischen double und Double Java Basics - Anfänger-Themen 4
Q Unterschied zwischen static und keinem Modifier Java Basics - Anfänger-Themen 15
K Unterschied zwischen Jar, war und ear Dateien Java Basics - Anfänger-Themen 3
T Unterschied zwischen Integrationstest und JUnit test? Java Basics - Anfänger-Themen 12
K Unterschied zwischen break und continue in einer Schleife Java Basics - Anfänger-Themen 14
A Exakte Unterschied zwischen Java EE und Java SE? Java Basics - Anfänger-Themen 4
J Unterschied zwischen statische und nicht statische Methoden? Java Basics - Anfänger-Themen 14
O Java unterschied zwischen Interface und Interface_Referenzen!!?? Java Basics - Anfänger-Themen 7
J unterschied zwischen awt und swing Java Basics - Anfänger-Themen 6
B Unterschied zwischen String & char Array? Java Basics - Anfänger-Themen 5
B Was ist der unterschied zwischen Singleton und Strategy? Java Basics - Anfänger-Themen 6
B Variablen: unterschied zwischen Klassen und Instanzvariable Java Basics - Anfänger-Themen 2
H Unterschied zwischen 2 Date in Sekunden am einfachsten? Java Basics - Anfänger-Themen 5
tanja Der Unterschied Zwischen Arrays in Java und ADA Java Basics - Anfänger-Themen 11
ModellbahnerTT Unterschied zwischen zwei Frame close Varianten Java Basics - Anfänger-Themen 3
V Unterschied zwischen J2EE und JEE ?? Java Basics - Anfänger-Themen 1
N Was ist der Unterschied zwischen ArrayList und Vector? Java Basics - Anfänger-Themen 3
A Unterschied zwischen Checked und unchecked Exception Java Basics - Anfänger-Themen 3
C Unterschied zwischen Polymorphie und Typcasting Java Basics - Anfänger-Themen 10
G Unterschied zwischen den Datenstrukturen Java Basics - Anfänger-Themen 2
M Unterschied zwischen . Compiler und JIT-Compiler,Hotspot-VM Java Basics - Anfänger-Themen 2
C Unterschied zwischen ArrayList und Vector Java Basics - Anfänger-Themen 2
I_Oscuridad Unterschied zwischen Objektorientiert und prozedural ? Java Basics - Anfänger-Themen 8
G Was ist der unterschied zwischen return und ? Java Basics - Anfänger-Themen 3
G Unterschied zwischen Java 2 bis 6 Java Basics - Anfänger-Themen 12
G Unterschied zwischen SwingWorker und "normalem" Th Java Basics - Anfänger-Themen 3
J Unterschied zwischen 2 Grafik Methoden Java Basics - Anfänger-Themen 2
G unterschied zwischen in.read() und in.read(byte [] b, int. Java Basics - Anfänger-Themen 3
G Unterschied zwischen SQL Timestamp und Java Java Basics - Anfänger-Themen 2
A Unterschied zwischen HashMap und Hashtable Java Basics - Anfänger-Themen 20
G Unterschied zwischen Assoziation, Aggregation u. Komposition Java Basics - Anfänger-Themen 7
G Unterschied zwischen & und && Java Basics - Anfänger-Themen 1
G Unterschied zwischen Ant und Maven Java Basics - Anfänger-Themen 9
K Unterschied zwischen Color.white und Color.WHITE? Java Basics - Anfänger-Themen 4
A Unterschied zwischen String & Stringbuffer! Java Basics - Anfänger-Themen 14
O Unterschied zwischen static und public Java Basics - Anfänger-Themen 2
G Was ist der Unterschied zwischen length und length()? Java Basics - Anfänger-Themen 7
N Unterschied zwischen Beans finden Java Basics - Anfänger-Themen 2
L Unterschied zwischen Objekten, Arrays und Strings Java Basics - Anfänger-Themen 2
G Unterschied zwischen Integer und int in java Java Basics - Anfänger-Themen 8
C Unterschied zwischen, Applet, Java und JavaScript Java Basics - Anfänger-Themen 3
K gibt es einen unterschied zwischen .JAVA und .java ? Java Basics - Anfänger-Themen 4
ven000m Unterschied zwischen: ADT & generischer Programmierung Java Basics - Anfänger-Themen 2
H Unterschied zwischen Stack und Array Java Basics - Anfänger-Themen 3
M Unterschied zwischen J2SE 5.0 Update x und J2SE 1.4.x Java Basics - Anfänger-Themen 4
C Unterschied zwischen equals und == ? Java Basics - Anfänger-Themen 6
D Unterschied zwischen Referenz auf Objekt/Instanz von Objekt Java Basics - Anfänger-Themen 9
G verstehe den unterschied zwischen equals und == nicht Java Basics - Anfänger-Themen 3
P Unterschied zwischen Interface und Vererbung und Sinn? Java Basics - Anfänger-Themen 5
M Unterschied zwischen J2SE, JSEE und JDK Java Basics - Anfänger-Themen 8
R Unterschied zwischen a++ und ++a Java Basics - Anfänger-Themen 9
G Unterschied zwischen homogenen und heterogenen Liste Java Basics - Anfänger-Themen 9
D Unterschied zwischen Ziffer und Zahl Java Basics - Anfänger-Themen 9
R Unterschied zwischen Integer und int Java Basics - Anfänger-Themen 6
B Was ist der Unterschied zwischen .java- und .class Dateien Java Basics - Anfänger-Themen 3
MoxMorris Integer.MAX_VALUE und Double.MAX_VALUE Unterschied Java Basics - Anfänger-Themen 3
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
P Unterschied Installation von zipped JDK vs Installer-JDK (auf Windows)? Java Basics - Anfänger-Themen 2
M Unterschied Integer.toString(x) und x.toString() Java Basics - Anfänger-Themen 22
H Arrays: Größten Zahlen Unterschied herausfinden Java Basics - Anfänger-Themen 20
K Unterschied Information Hiding und Kapselung? Java Basics - Anfänger-Themen 2
G Methoden wo ist der Unterschied?? Java Basics - Anfänger-Themen 11
D Unterschied charAt() substr() Java Basics - Anfänger-Themen 3
D Unterschied == und equals in Arrays Java Basics - Anfänger-Themen 2
H Unterschied Konstruktor und Klassenname x = new Klassenname; Java Basics - Anfänger-Themen 3
H .jar unterschied .class Java Basics - Anfänger-Themen 3
O Unterschied Arrays, Listen, Mengen Java Basics - Anfänger-Themen 24
K Unterschied for-Schleife Java Basics - Anfänger-Themen 14
M Schlüsselworte Unterschied: String.matches und Pattern.compile Java Basics - Anfänger-Themen 2
G Unterschied Instanz- Klassenvariable Java Basics - Anfänger-Themen 11
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
H Unterschied BufferedReader und BufferedInputStream Java Basics - Anfänger-Themen 4
N Unterschied von Post- und Preinkrement Java Basics - Anfänger-Themen 3
T Unterschied dynamischer und statischer Laufzeittyp Java Basics - Anfänger-Themen 1
D Unterschied Date - Calendar Java Basics - Anfänger-Themen 1
J Warum ist das ein Unterschied (Integer / int) Java Basics - Anfänger-Themen 2
S Erste Schritte Unterschied "if" und "else if" Java Basics - Anfänger-Themen 27
F Erste Schritte Unterschied: Array "leer" / "null" Java Basics - Anfänger-Themen 3
V Unterschied x++ und x=x++ Java Basics - Anfänger-Themen 6
O Unterschied Baum <-> Automat Java Basics - Anfänger-Themen 2
A Klassen Unterschied Warteschlange, Stapel und Liste Java Basics - Anfänger-Themen 3
M Wo liegt der Unterschied? Deklaration Klasse oder Konstruktur Java Basics - Anfänger-Themen 3
S Unterschied print() und println() Java Basics - Anfänger-Themen 3
S Unterschied .jar Datei ausführen und junit Testfall... Java Basics - Anfänger-Themen 3
S Datentypen Unterschied elementare und zusammengesetzte/strukturierte Datentypen Java Basics - Anfänger-Themen 5
S Unterschied Ausführung in IDE <-> Befehlszeile Java Basics - Anfänger-Themen 0

Ähnliche Java Themen

Neue Themen


Oben