Heim Java javaLernprogramm Java-Verbesserung Kapitel (1) -----Verstehen der Kapselung der drei Hauptmerkmale von Java

Java-Verbesserung Kapitel (1) -----Verstehen der Kapselung der drei Hauptmerkmale von Java

Feb 09, 2017 pm 01:27 PM

Es ist fast drei Jahre her, seit ich in meinem zweiten Jahr mit Java in Kontakt kam. Vom einfachsten HTML und CSS bis zum endgültigen SSH habe ich es Schritt für Schritt durchgearbeitet. Ich war glücklich, enttäuscht und einsam. Obwohl er ein Halbmönch ist, hat er sein „Studium“ aus eigener Kraft abgeschlossen. Während dieser Zeit nahm ich an Ausbildungseinrichtungen teil, aber diese Art der Ausbildung gefiel mir wirklich nicht, also gab ich auf und entschied mich für das Selbststudium (schlecht, ich zahlte 6.000 Yuan, obwohl das Selbststudium sehr schmerzhaft war). Es hat mehr Spaß gemacht, und der Aufwand und der Gewinn waren nur Sie wissen es selbst. Huang Tian hat seiner harten Arbeit alle Ehre gemacht, aber ich bin dumm. Im ersten Semester seines letzten Jahres hat er Java schließlich im Selbststudium abgeschlossen (wobei er einen Umweg gemacht und ein halbes Jahr verschwendet hat) und einen guten Job bekommen damit. Vielen Dank!

Zu viel Klatsch! Was das Thema angeht: LZ hat kürzlich das Designmuster gelesen und hat viele Gefühle. Und während ich arbeite, habe ich zutiefst das Gefühl, dass die Grundlage von Java nicht solide genug ist. Ich bin beispielsweise nicht mit IO vertraut, ich verstehe Garbage Collection, Polymorphismus und Reflektion nicht und selbst die drei grundlegendsten Funktionen sind verwirrend Mich! Deshalb bin ich fest entschlossen, meine Java-Grundkenntnisse nachzuholen! Beginnend mit der ersten Lektion: Kapselung!!! bezieht sich auf die Verwendung abstrakter Datentypen zur Kapselung von Daten und datenbasierten Vorgängen, um eine untrennbare unabhängige Einheit zu bilden. Die Daten werden innerhalb des abstrakten Datentyps geschützt, wobei interne Details so weit wie möglich ausgeblendet werden und dies nur durch die Beibehaltung einiger externer Schnittstellen möglich ist mit der Außenwelt kommunizieren. Andere Objekte im System können nur über autorisierte Operationen außerhalb der Daten mit diesem gekapselten Objekt kommunizieren und interagieren. Das heißt, der Benutzer muss die internen Details des Objekts nicht kennen (natürlich gibt es keine Möglichkeit, dies zu wissen), aber der Benutzer kann über die vom Objekt bereitgestellte Schnittstelle auf das Objekt zugreifen.

Bei der Kapselung kapselt ein Objekt seine eigenen Eigenschaften und Methoden, sodass es seine eigenen Vorgänge ausführen kann, ohne auf andere Objekte angewiesen zu sein.

Die Verwendung der Kapselung bietet drei Hauptvorteile:

1. Eine gute Kapselung kann die Kopplung verringern.

2. Die interne Struktur der Klasse kann frei geändert werden.

3. Sie können Mitglieder genauer steuern.

4. Informationen ausblenden und Details implementieren.

Schauen wir uns zunächst zwei Klassen an: Husband.java, Wife.java

Anhand der beiden obigen Beispiele können wir erkennen, dass es für die Frau keinen Getter gibt Referenz in Husband (), und das Alter der Frau hat keine getter()-Methode. Was den Grund angeht, denke ich, dass jeder ihn kennt. Ein Mann versteckt seine Frau in einem tiefen Haus, und keine Frau möchte, dass andere ihr Alter erfahren.

public class Husband {  
      
    /* 
     * 对属性的封装 
     * 一个人的姓名、性别、年龄、妻子都是这个人的私有属性 
     */  
    private String name ;  
    private String sex ;  
    private int age ;  
    private Wife wife;  
      
    /* 
     * setter()、getter()是该对象对外开发的接口 
     */  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getSex() {  
        return sex;  
    }  
  
    public void setSex(String sex) {  
        this.sex = sex;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setWife(Wife wife) {  
        this.wife = wife;  
    }  
}
Nach dem Login kopieren
Die Kapselung privatisiert also die Eigenschaften eines Objekts und stellt einige Methoden für Eigenschaften bereit, auf die die Außenwelt zugreifen kann. Wenn wir nicht möchten, dass externe Methoden darauf zugreifen, müssen wir keine Methoden bereitstellen für den Zugang von außen. Wenn eine Klasse jedoch keine Methoden für den externen Zugriff bereitstellt, ist diese Klasse bedeutungslos. Zum Beispiel betrachten wir ein Haus als Objekt. Die schönen Dekorationen im Inneren, wie Sofas, Fernsehserien, Klimaanlagen, Teetische usw., sind das Privatvermögen des Hauses Blockieren Sie es, andere werden es auf einen Blick sehen. Was ist, wenn nichts mehr übrig ist? Überhaupt keine Privatsphäre! Mit dieser Schutzwand können wir unsere Privatsphäre wahren und die Inneneinrichtung nach Belieben verändern, ohne andere zu beeinträchtigen. Aber wenn es keine Türen oder Fenster gibt, was bedeutet dann eine dicht umwickelte Black Box? Daher können auch andere durch die Türen und Fenster die Landschaft im Inneren sehen. Daher sind Türen und Fenster die Schnittstellen des Objekts Haus, die der Außenwelt zugänglich gemacht werden.
public class Wife {  
    private String name;  
    private int age;  
    private String sex;  
    private Husband husband;  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getSex() {  
        return sex;  
    }  
  
    public void setSex(String sex) {  
        this.sex = sex;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setHusband(Husband husband) {  
        this.husband = husband;  
    }  
  
    public Husband getHusband() {  
        return husband;  
    }  
      
}
Nach dem Login kopieren

Dadurch können wir die Vorteile der Kapselung nicht wirklich einschätzen. Jetzt analysieren wir die Vorteile der Kapselung aus Programmperspektive. Wenn wir keine Kapselung verwenden, dann verfügt das Objekt nicht über setter() und getter(), dann sollte die Husband-Klasse so geschrieben werden:

Wir sollten sie so verwenden:

public class Husband {  
    public String name ;  
    public String sex ;  
    public int age ;  
    public Wife wife;  
}
Nach dem Login kopieren
Aber was ist, wenn wir „Ehemann“ an diesem Tag ändern müssen, zum Beispiel das Alter in „String“ ändern? Es ist in Ordnung, dass Sie diese Klasse nur an einer Stelle verwenden. Wenn Sie Dutzende oder sogar Hunderte solcher Stellen haben, führen Ihre Änderungen dann zu einem Absturz? Wenn Kapselung verwendet wird, müssen wir keine Änderungen vornehmen. Wir müssen nur die setAge()-Methode der Husband-Klasse geringfügig ändern. }

Husband husband = new Husband();  
husband.age = 30;  
husband.name = "张三";  
husband.sex = "男";    //貌似有点儿多余
Nach dem Login kopieren
Andere Orte werden weiterhin unverändert referenziert (husband.setAge(22)).

到了这里我们确实可以看出,封装确实可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码。

我们在看这个好处:可以对成员变量进行更精确的控制。

还是那个Husband,一般来说我们在引用这个对象的时候是不容易出错的,但是有时你迷糊了,写成了这样:

Husband husband = new Husband();  
husband.age = 300;
Nach dem Login kopieren

也许你是因为粗心写成了,你发现了还好,如果没有发现那就麻烦大了,逼近谁见过300岁的老妖怪啊!

但是使用封装我们就可以避免这个问题,我们对age的访问入口做一些控制(setter)如:

public class Husband {  
      
    /* 
     * 对属性的封装 
     * 一个人的姓名、性别、年龄、妻子都是这个人的私有属性 
     */  
    private String name ;  
    private String sex ;  
    private int age ;    /* 改成 String类型的*/  
    private Wife wife;  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        if(age > 120){  
            System.out.println("ERROR:error age input....");    //提示錯誤信息  
        }else{  
            this.age = age;  
        }  
          
    }  
      
    /** 省略其他属性的setter、getter **/  
      
}
Nach dem Login kopieren

上面都是对setter方法的控制,其实通过使用封装我们也能够对对象的出口做出很好的控制。例如性别我们在数据库中一般都是已1、0方式来存储的,但是在前台我们又不能展示1、0,这里我们只需要在getter()方法里面做一些转换即可。

public String getSexName() {  
        if("0".equals(sex)){  
            sexName = "女";  
        }  
        else if("1".equals(sex)){  
            sexName = "男";  
        }  
        else{  
            sexName = "人妖???";  
        }  
        return sexName;  
    }
Nach dem Login kopieren

在使用的时候我们只需要使用sexName即可实现正确的性别显示。同理也可以用于针对不同的状态做出不同的操作。

public String getCzHTML(){  
        if("1".equals(zt)){  
            czHTML = "<a href=&#39;javascript:void(0)&#39; onclick=&#39;qy("+id+")&#39;>启用</a>";  
        }  
        else{  
            czHTML = "<a href=&#39;javascript:void(0)&#39; onclick=&#39;jy("+id+")&#39;>禁用</a>";  
        }  
        return czHTML;  
    }
Nach dem Login kopieren

       鄙人才疏学浅,只能领悟这么多了,如果文中有错误之处,望指正,鄙人不胜感激!

以上就是 java提高篇(一)-----理解java的三大特性之封装的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

TrendForce: Nvidias Blackwell-Plattformprodukte sorgen dafür, dass die CoWoS-Produktionskapazität von TSMC in diesem Jahr um 150 % steigt TrendForce: Nvidias Blackwell-Plattformprodukte sorgen dafür, dass die CoWoS-Produktionskapazität von TSMC in diesem Jahr um 150 % steigt Apr 17, 2024 pm 08:00 PM

Laut Nachrichten dieser Website vom 17. April hat TrendForce kürzlich einen Bericht veröffentlicht, in dem es davon ausgeht, dass die Nachfrage nach den neuen Blackwell-Plattformprodukten von Nvidia optimistisch ist und die gesamte CoWoS-Verpackungsproduktionskapazität von TSMC im Jahr 2024 voraussichtlich um mehr als 150 % steigen wird. Zu den neuen Blackwell-Plattformprodukten von NVIDIA gehören GPUs der B-Serie und GB200-Beschleunigerkarten, die NVIDIAs eigene GraceArm-CPU integrieren. TrendForce bestätigt, dass die Lieferkette derzeit sehr optimistisch in Bezug auf GB200 ist. Es wird geschätzt, dass die Auslieferungen im Jahr 2025 eine Million Einheiten überschreiten werden, was 40-50 % der High-End-GPUs von Nvidia ausmacht. Nvidia plant, in der zweiten Jahreshälfte Produkte wie GB200 und B100 auszuliefern, aber vorgelagerte Waferverpackungen müssen noch komplexere Produkte einführen.

Offengelegte AMD „Strix Halo' FP11-Gehäusegröße: entspricht Intel LGA1700, 60 % größer als Phoenix Offengelegte AMD „Strix Halo' FP11-Gehäusegröße: entspricht Intel LGA1700, 60 % größer als Phoenix Jul 18, 2024 am 02:04 AM

Diese Website berichtete am 9. Juli, dass die Prozessoren der AMD Zen5-Architektur „Strix“ über zwei Verpackungslösungen verfügen werden: Der kleinere StrixPoint wird das FP8-Paket verwenden, während der StrixHalo das FP11-Paket verwenden wird. Quelle: videocardz source @Olrak29_ Die neueste Enthüllung ist, dass die FP11-Gehäusegröße von StrixHalo 37,5 mm * 45 mm (1687 Quadratmillimeter) beträgt, was der LGA-1700-Gehäusegröße der AlderLake- und RaptorLake-CPUs von Intel entspricht. AMDs neueste Phoenix APU verwendet eine FP8-Gehäuselösung mit einer Größe von 25*40 mm, was bedeutet, dass StrixHalos F

Verpackungstechnologie und Anwendung in PHP Verpackungstechnologie und Anwendung in PHP Oct 12, 2023 pm 01:43 PM

Kapselungstechnologie und Anwendungskapselung in PHP sind ein wichtiges Konzept in der objektorientierten Programmierung. Sie beziehen sich auf die gemeinsame Kapselung von Daten und Operationen auf Daten, um eine einheitliche Zugriffsschnittstelle für externe Programme bereitzustellen. In PHP kann die Kapselung durch Zugriffskontrollmodifikatoren und Klassendefinitionen erreicht werden. In diesem Artikel werden die Kapselungstechnologie in PHP und ihre Anwendungsszenarien vorgestellt und einige spezifische Codebeispiele bereitgestellt. 1. Gekapselte Zugriffskontrollmodifikatoren In PHP wird die Kapselung hauptsächlich durch Zugriffskontrollmodifikatoren erreicht. PHP bietet drei Zugriffskontrollmodifikatoren:

Einführung in die Axios-Kapselung und gängige Methoden in Vue Einführung in die Axios-Kapselung und gängige Methoden in Vue Jun 09, 2023 pm 04:13 PM

Einführung in die Axios-Kapselung und gängige Methoden in Vue Axios ist eine auf Promise basierende HTTP-Bibliothek. Ihr Vorteil besteht in der guten Lesbarkeit, Benutzerfreundlichkeit und Skalierbarkeit. Als beliebtes Frontend-Framework bietet Vue auch volle Unterstützung für Axios. In diesem Artikel wird erläutert, wie Axios in Vue gekapselt wird, und es werden einige häufig verwendete Methoden von Axios vorgestellt. 1. Axios-Kapselung Während des Entwicklungsprozesses müssen wir häufig eine benutzerdefinierte Kapselung von Axios durchführen, z

Wie verbessern C++-Funktionen die Effizienz der GUI-Entwicklung durch Kapselung von Code? Wie verbessern C++-Funktionen die Effizienz der GUI-Entwicklung durch Kapselung von Code? Apr 25, 2024 pm 12:27 PM

Durch die Kapselung von Code können C++-Funktionen die Effizienz der GUI-Entwicklung verbessern: Code-Kapselung: Funktionen gruppieren Code in unabhängige Einheiten, wodurch der Code leichter zu verstehen und zu warten ist. Wiederverwendbarkeit: Funktionen schaffen gemeinsame Funktionalität, die anwendungsübergreifend wiederverwendet werden kann, wodurch Duplikate und Fehler reduziert werden. Prägnanter Code: Der gekapselte Code macht die Hauptlogik prägnant und einfach zu lesen und zu debuggen.

Foxconn baut einen KI-One-Stop-Service auf und investiert in Sharp in den Einstieg in die fortschrittliche Halbleiterverpackung: Produktionsstart im Jahr 2026, ausgelegt für die Produktion von 20.000 Wafern pro Monat Foxconn baut einen KI-One-Stop-Service auf und investiert in Sharp in den Einstieg in die fortschrittliche Halbleiterverpackung: Produktionsstart im Jahr 2026, ausgelegt für die Produktion von 20.000 Wafern pro Monat Jul 18, 2024 pm 02:17 PM

Laut Nachrichten dieser Website vom 11. Juli berichtete die Economic Daily heute (11. Juli), dass die Foxconn Group in den Bereich Advanced Packaging eingestiegen sei und sich auf die aktuelle Mainstream-Halbleiterlösung Panel-Level Fan-out Packaging (FOPLP) konzentriert. 1. Nach seiner Tochtergesellschaft Innolux kündigte auch Sharp, an dem die Foxconn Group beteiligt ist, seinen Einstieg in den japanischen Bereich der Fan-out-Verpackung auf Panelebene an und wird voraussichtlich im Jahr 2026 in Produktion gehen. Die Foxconn Group selbst verfügt über ausreichend Einfluss im KI-Bereich und kann durch den Ausgleich ihrer Mängel bei der fortschrittlichen Verpackung „One-Stop“-Dienste anbieten, um die Annahme weiterer Bestellungen von KI-Produkten in Zukunft zu erleichtern. Laut öffentlichen Informationen auf dieser Website hält die Foxconn Group derzeit 10,5 % der Sharp-Aktien. Die Gruppe gab an, dass sie ihre Anteile zum jetzigen Zeitpunkt weder erhöhen noch reduzieren und ihre Anteile beibehalten wird.

So implementieren Sie Kapselung und Vererbung in der Go-Sprache So implementieren Sie Kapselung und Vererbung in der Go-Sprache Jul 23, 2023 pm 08:17 PM

So implementieren Sie Kapselung und Vererbung in der Go-Sprache. Kapselung und Vererbung sind zwei wichtige Konzepte in der objektorientierten Programmierung. Sie können den Code modularer und wartbarer machen und auch die Wiederverwendung von Code erleichtern. In diesem Artikel wird die Implementierung von Kapselung und Vererbung in der Go-Sprache vorgestellt und entsprechende Codebeispiele bereitgestellt. Kapselung Kapselung dient dazu, Daten und Funktionen zu kapseln, Implementierungsdetails zu verbergen und nur notwendige Schnittstellen für die externe Verwendung verfügbar zu machen. In der Go-Sprache wird die Kapselung durch exportierte und nicht exportierte Bezeichner erreicht. Auf Bezeichner mit Großbuchstaben kann von anderen Paketen zugegriffen werden

Wie kann ein Fehler wegen schlechter Skalierbarkeit im Python-Code behoben werden? Wie kann ein Fehler wegen schlechter Skalierbarkeit im Python-Code behoben werden? Jun 25, 2023 am 09:51 AM

Als High-Level-Programmiersprache wird Python häufig in der Datenanalyse, beim maschinellen Lernen, in der Webentwicklung und in anderen Bereichen eingesetzt. Da jedoch die Größe des Codes immer größer wird, wird das Skalierbarkeitsproblem von Python-Programmen allmählich deutlich. Ein Fehler bei schlechter Skalierbarkeit bedeutet, dass sich das Python-Programm unter bestimmten Umständen nicht gut an geänderte Anforderungen anpassen und große Datenmengen nicht verarbeiten kann, was zu einer schlechten Programmleistung führt. Zu viele Abhängigkeiten, schlechte Codestruktur, fehlende Dokumentation usw. sind allesamt die Ursachen für Fehler aufgrund schlechter Skalierbarkeit in Python-Programmen.

See all articles