Warum ist der Zugangskontrollmechanismus in Java entwickelt? Es gibt zwei Hauptfunktionen:
(1) Um zu vermeiden, dass Benutzer Teile berühren, die sie nicht berühren sollten, sind diese Teile für interne Operationen erforderlich, sind jedoch nicht Teil der vom Client -Programmierer geforderten Schnittstelle.
(2) Um es Klassenbibliotheksdesigner zu ermöglichen, die internen Funktionen von Klassen zu ändern, ohne sich Gedanken darüber zu machen, einen erheblichen Einfluss auf die Benutzer zu haben.
Der Grad der Zugriffsberechtigungskontrolle in Java beträgt:
Public -> geschützt -> Paketzugriff (kein Berechtigungsmodifikator) -> privat.
1. Paket
Das Konzept der Pakete in Java ist dem Konzept der Namespaces in C ++ sehr ähnlich, und beide können den Klassenumfang begrenzen. Der größte Unterschied zwischen beiden besteht darin, dass die Pakete in Java implizit die Baumhierarchie der Klasse (und auch die Verzeichnisstruktur der Java -Quellcode -Datei) angeben. Der Vorteil davon ist, dass die Einzigartigkeit der Klasse durch die Anforderungen für die Einzigartigkeit des Dateipfades im Dateisystem eingeschränkt werden kann.
1. Codeorganisation
Beim Schreiben einer Java -Quellcode -Datei (.Java -Datei) wird diese Datei normalerweise als Kompilierungseinheit bezeichnet. In der Kompilierungseinheit ist höchstens eine öffentliche Klasse erlaubt, und der Name der Klasse muss genau dem Dateinamen (einschließlich oberer und unterer Fall) entsprechen.
Beim Kompilieren einer .java -Datei verfügt jede Klasse in der .java -Datei über eine .class -Ausgabedatei und der Dateiname und der Klassenname sind gleich. Ein Java Runnable -Programm ist eine Reihe von .cass -Dateien, die in eine Java -Dokumentdatei verpackt und komprimiert werden können (JAR -Paket mit dem JAR -Dokumentgenerator von Java). Der Java -Interpreter ist für die Suche, Lade und Interpretation dieser Dateien verantwortlich.
Eine Klassenbibliothek ist tatsächlich eine Reihe von Klassendateien. Jede .java-Datei darf höchstens eine öffentliche Klasse sowie eine beliebige Anzahl von nicht öffentlichen Klassen haben. Daher hat jede Datei ein Artefakt. Wenn Sie diese Komponenten organisieren möchten (jedes Build verfügt über eine .java -Datei und mehrere .class -Dateien), um verschiedene Gruppen zu bilden, können Sie das Schlüsselwortpaket in Java verwenden.
2. Die Funktion des Pakets
(1) Organisieren Sie Klassen oder Schnittstellen mit ähnlichen oder verwandten Funktionen im selben Paket, um die Suche und Verwendung von Klassen zu erleichtern.
(2) Paketen verwenden wie Ordner auch baumförmige Verzeichnisse, um sie zu speichern. Die Klassennamen im selben Paket sind unterschiedlich, und die Namen der Klassen in verschiedenen Paketen können gleich sein. Wenn Klassen mit demselben Klassennamen in zwei verschiedenen Paketen gleichzeitig aufgerufen werden, sollte der Paketame hinzugefügt werden, um sie zu unterscheiden. Daher kann das Paket Namenskonflikte vermeiden.
(3) Pakete beschränken auch Zugriffsrechte. Nur Klassen mit Paketzugriffsrechten können in einem Paket auf Klassen zugreifen.
3. Erstellen Sie ein Paket
Verwenden Sie in Java das Paketschlüsselwort, um das Paket (Namespace) anzugeben, zu dem der Code gehört.
Syntaxformat:
Paket PKG1 [. PKG2 [. pkg3…]];
Notiz:
(1) Der Name des Pakets weist implizit auf die Verzeichnisstruktur des Codes hin.
(2) Der Name der öffentlichen Klassen (auch der Java -Dateiname) im selben Verzeichnis sollte eindeutig sein.
(3) Die Paketdeklaration sollte in der ersten Zeile der Quelldatei liegen. Jede Quelldatei kann nur eine Paketdeklaration haben und jeder Typ in dieser Datei wird darauf angewendet.
(4) Wenn eine Quelldatei keine Paketdeklaration verwendet, werden die Klassen, Funktionen, Aufzüge, Kommentare usw. in einem ungenannten Paket platziert.
(5) Die Namen von Paketen befinden sich in der Regel in Kleinbuchstaben.
Zum Beispiel:
Überprüfen Sie den Quellcode der Klasse java.util.ArrayList und Sie können sehen, dass die erste Zeile der Datei lautet:
Paket java.util;
Seine Code -Verzeichnisstruktur ist Java/util/arrayList.java
4. Importpaket
Verwenden Sie in Java das Schlüsselwort importieren, um Pakete zu importieren.
Syntaxformat:
Paket import1 [.package2…]. (KlasseName |*);
Beispiel:
Nehmen wir Java.util.ArrayList als Beispiel. Es ist sehr unpraktisch, es auf eine Weise zu verwenden, die einen vollständigen Klassenweg hat.
java.util.arrayList <string> list = new java.util.arrayList <string> ();
Wenn Sie den vorherigen Pfad weglassen möchten, können Sie das Schlüsselwort importieren.
Import Java.util.ArrayList;
Nach dem Importieren des Pakets in der Datei kann der vorherige Code, der die Liste deklariert, wie folgt vereinfacht werden:
ArrayList <string> list = new ArrayList <string> ();
2. Zugriffsrechtsmodifikatoren
1. Paket: Paketzugriffsberechtigungen
Wenn kein Zugriffsmodifikator bereitgestellt wird, bedeutet dies, dass es sich um Paketzugriff handelt.
Der Standardzugriff hat keine Schlüsselwörter, bezieht sich jedoch normalerweise auf den Paketzugriff (manchmal auch als freundlich, ein bisschen wie das Konzept der Freundeselemente in C ++). Dies bedeutet, dass alle anderen Klassen im Paket auf dieses Mitglied oder auf alle Klassen außerhalb dieses Pakets zugreifen können, auf alle Klassen nicht zugegriffen werden können.
Beispiel:
com.notes.packages.test.info
paket com.notes.packages.test; publicClass info {void print () {System.out.println ("Standardmethode - print ()"); }}com.notes.packages.test.publicdemo01
paket com.notes.packages.test; publicClass publicDemo01 {publicStaticVoid main (String [] args) {info x = new info (); X.print (); }}PublicDemo01 und Info können unter demselben Paket auf die Methode für die Standard -Info - Print () zugreifen.
com.notes.packages.publicdemo02
paket com.notes.packages; import com.notes.packages.test.info; publicClass publicDemo02 {publicStaticVoid main (String [] args) {info x = new info (); // x.print (); // Fehler }}PublicDEMO02 und Info befinden sich nicht im selben Paket, und die Methode des Info -Paket -Zugriffs -Berechtigungsstufe kann nicht zugegriffen werden - print ().
2. öffentlich: Schnittstellenzugriffsberechtigungen
Die Verwendung des öffentlichen Schlüsselworts bedeutet, dass das deklarierte Mitglied oder die erklärte Methode für alle zugänglich ist.
Beispiel: Wenn die PRINT () -Methode -Genehmigung in der Standard -Ebene -Berechtigungsbeispiel auf öffentlich eingestellt ist, kann auf publicDemo02 zugegriffen werden.
Paket com.notes.packages.test; publicClass Info {publicVoid print () {System.out.println ("public methode - print ()"); }}3. privat: Zugang kann nicht zugreifen
Durch die Verwendung des privaten Schlüsselworts ist das deklarierte Mitglied oder die erklärte Methode für jede andere Klasse außer dieser Klasse unzugänglich.
Anwendungsszenario: Singleton -Modus
4. Geschützt: Erbe Zugriffsberechtigungen
Eine neue Klasse (als Kinderklasse oder abgeleitete Klasse bezeichnet) kann eine vorhandene Klasse (als Elternklasse oder eine Basisklasse bezeichnet) durch Erbschaft wiederverwenden und dann die Mitglieder und Methoden der Basisklasse erweitern. Manchmal möchte der Schöpfer einer Basisklasse, dass ein bestimmtes Mitglied seinen Zugriff auf die abgeleitete Klasse anstelle aller Klassen zuweist. Die Öffentlichkeit kann dies nicht tun, und zu diesem Zweck wurde geschützt, um den Job zu erledigen. Protected bietet auch Paketzugriff, dh abgeleitete Klassen und andere Klassen innerhalb desselben Pakets können auf geschützte Mitglieder oder Methoden zugreifen.
Beispiel: Nachdem die Unterklasse die übergeordnete Klasse erbt, kann es auf die geschützten Mitglieder der übergeordneten Klasse zugreifen.
Klasse Vater {private Zeichenfolge a = "privat"; geschützte Zeichenfolge b = "geschützt"; public String c = "public";}; Class Son erweitert Vater {publicVoid print () {// system.out.println ("Element a:" + Super.a); // Fehler system.out.println ("Element B:" + Super.b); System.out.println ("Element C:" + Super.c); }} publicClass ProtectedDemo01 {publicStaticVoid main (String args []) {Son sub = new Son (); sub.print (); }};Anmerkungen zu Zugriffsmodifikatoren
In den vorherigen Beispielen können die Mitglieder und Methoden der Klasse mit verschiedenen Berechtigungsmodifikatoren geändert werden.
Darüber hinaus gibt es einige Punkte, auf die Sie sich beachten können:
(1) Die Verwendung von Berechtigungsmodifikatoren für statische Mitglieder und statische Methoden entspricht dem von gewöhnlichen Mitgliedern und Methoden.
(2) Obwohl die Klasse auch durch Modifikatoren modifiziert werden kann, können die beiden rhetorischen und geschützten Berechtigungswörter nicht verwendet werden.
(3) In einigen Büchern wird der Paketzugriff auch als Standardzugriff bezeichnet. Ich persönlich empfehle mich nicht so auswendig, da dies leicht mit der neuen Funktion von Java SE8 verwechselt wird - dem Standard -Schlüsselwort. Dieses Schlüsselwort kann nur für die Schnittstelle verwendet werden, und seine Funktion besteht darin, den Programmierern die Standardimplementierung von Schnittstellen in der Schnittstelle zu definieren (in den vergangenen JDK -Versionen erlaubten Sie dies nicht, sondern können nur Methoden in der Schnittstelle deklarieren).
Das Obige dreht sich alles um diesen Artikel, ich hoffe, es wird für das Lernen aller hilfreich sein.