Das Package ist als Teil das Names zu sehen. Ohne eine Namespace/Package Präfix könnte es zB nur eine einzige Klasse mit dem Namen 'List' geben, es gibt aber zB eine java.util.List und eine java.awt.List. Die Klasse heißt also nicht List, sondern package.name.List
Die Klassen werden in Packages zusammen gefasst. Das muss nicht sein, ist aber besser so.
Es fördert erstens die Übersicht: Wenn du z.B. 100 Klassen (oder auch nur 20 Klassen) hast, ist es sinnvoller, diese in Packages zusammen zu packen. Jedes Package ist ja auch ein eigenes Verzeichnis.
Zweitens kann man auch so den Zugriff auf Klassen oder Funktionen package-gesteuert definieren. So kann man zum Beispiel sagen, dass eine bestimmte Klasse nur von anderen Klassen benutzt werden können, die innerhalb des selben Packages liegen.
@reny:danke renny für deine schöne erläuterung ,aber ich hab 0% den sinn deines Programm verstanden ..aber es ist mein fehler ,ich hätte vorher sagen soll ,dass ich ein gerade beim erlernen der java-grundlagen bin ...naja
Also package zusammenfassung von klassen richtig?
wenn ich ein programm habe wie z.bsp :
Code:
package cool.fool;
classe doenergut { ..
..
}
class donerschlecht {..
..}
heißt dass dieses Programm die 2 klassen jetzt zu cool.fool zusammen fasst ?
(an java-profis ,ich will nur den Prinzip verstehen )
für dich mal bildlich: package == verzeichnisbaum, klassenname == datei
hast du also
Code:
package mein.package.testprogramm;
public class Main {
...
dann ist das quasi eine datei "Main" im verzeichnis "mein\package\testprogramm"
sinn ist dass der code logisch aufgeteilt ist. es gibt z.B. die klasse "List" sowohl im package "java.awt" als auch in "java.util". erstes ist eine grafische Listenkomponente, das andere eine Collection-Interface.
heißt dass dieses Programm die 2 klassen jetzt zu cool.fool zusammen fasst icon_smile.gif?
Klasse 1 heißt vollständig java.util.List. Weil das aber zuviel Schreibaufwand ist, kürzt man das ab, indem man in der ersten Zeile den qualifizierenden (sozusagen vervollständigenden) Namensbestandteil angibt und in der eigentlichen class-Definition nur den kurzen Namen (sprich den Trivialnamen).
Dadurch können die beiden oben gezeigten Klassen parallel existieren, obwohl ihre Trivialnamen gleich sind. Der Compiler unterscheidet die beiden Klassen anhand ihrs qualifizierten Namens. Um als Verwender einer solchen Klasse wiederum nur den Trivialnamen benutzen zu müssen, gibt es die Anweisung "import", mit deren Hilfe man den Compiler anweisen kann aus den gegebenen qualifizierenden Namensbestandteilen und dem im Quelltext stehenden, nicht identifizierten Trivialnamen solange qualifizierte Klassennamen zusammenzubauen, bis er eine Klasse gefunden hat.
Diese Beschreibung ist zwar nicht wissenschaftlich korrekt, aber für den Anfang wohl ausreichend.
so ich hab ein klein programmen geschrieben und hab diese Datei compiliert C:\Java\Programme\moi\secret.java
Code:
package moi.hard;
public class Secret{
public static void main (String[]arg){
int a;
int b;
}
}
jetzt würde ich gern wissen was das programm gemacht hat , ich hab auch ein verzeichnis
C:\Java\Programme\moi\hard angelegt ; warum wird das package angegeben ?
..?
ich könnte dieses programm auch ohne package laufen lassen ,wo ist der sinn von package ?
ist der sinn von package dass ich datein importieren kann?
Wie soll sich denn die JRE die Klassen zusammenkratzen? Ohne Pakete geht's nur schlecht für den Programmierer, da man so weltweit(!) sicherstellen müsste, dass nur eine einzige Klasse "Test" heißt usw., damit es nicht zu Konflikten kommt. Auf der anderen Seite kann es aber nicht sein, dass die JRE alle Festplatten auf den Kopf stellen muss, um die passende Klasse zu finden. Wo soll sie denn suchen? Für jede Klasse einzeln der JRE mitteilen, in welchem Verzeichnis genau sich jetzt eine Klasse befindet, ist zu aufwendig (die Klassen können nämlich weit verstreut in verschiedensten Verzeichnissen liegen).
Also macht man einen Kompromiss: Man teilt der JRE nur mit, wo sie mit Suchen anfangen soll (diese Orte stehen in CLASSPATH), aber wie genau es dann weitergeht, wird durch package mitgeteilt.
Packages haben eigentlich nur einen einzigen Zweck: den Quellcode übersichtlich zu organisieren.
Sie haben null und garkeinen Einfluss die Funktionsweise des Programmes.
Ein Vergleich: wenn ein Objekt ein Haus ist, und eine Klasse der Bauplan, dann ist das Package der Ordner in dem der Architekt seine Papiere aufbewahrt.
Wieso man packages anschreiben muss? Da gibt es verschiedene Erklärungen:
1. Der Name einer Klasse ist "package.name.Klasse", wenn man nur eine Datei besitzt (z.B. aus dem Internet runterlädt) sollte man so wenigstens den echten Klassennamen rausfinden.
2. Es macht klar welches Verzeichnis das Projektverzeichnis ist. Wenn der Packagename "x.y" lautet, dann ist das Projektverzeichnis dasjenige Verzeichnis in dem "x" ist.
Der Sinn is kurz gesagt, dass du dadurch uf alle Methoden Variablen usw. zB. aus ner anderen Klasse aufgerufen werden können, solange sie im Selben Package sind......
Das is zwar nur ein achtel der ganzen Wahrheit;-)
aber naja
ich hab im Verzeichnis "Neu/Teila" eine klasse namens Teila
und nun mach ich ein Programm im Ordner Neu und sagen wir ,die klasse soll Neu heißen
kann ich jetzt diese klasse durch den unten angegeben code abrufen ..?
:
ehmm eine andere frage ,könnte mir jemand ein einfaches beispiel programm machen ,wo ich ungefähr den sinn daran sehen ,mir kommt es vor als hätte ich das ding nicht verstanden
Unmöglich, der Sinn von Packages erschliesst sich erst mit grossen Programmen. Man kann nicht anhand von drei Comics erklären, für was man ein Büchergestell benötigt.