国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Table des matières
Polymorphisme
1. Transformation vers le haut
忘記對象類型
2.顯露優(yōu)勢
合理即正確
可擴展性
失靈了?
3.構(gòu)造器與多態(tài)
構(gòu)造器內(nèi)部的多態(tài)行為
Maison Java JavaBase De nos jours, si vous dites conna?tre Java, vous devez conna?tre le polymorphisme.

De nos jours, si vous dites conna?tre Java, vous devez conna?tre le polymorphisme.

Sep 15, 2020 pm 04:46 PM
java Polymorphe

De nos jours, si vous dites conna?tre Java, vous devez conna?tre le polymorphisme.

Recommandations d'apprentissage associées?: Tutoriel de base Java

Aujourd'hui, j'ai visité l'entreprise comme d'habitude. Asseyez-vous à votre poste de travail et allumez votre ordinateur, "又是搬磚的一天". Après y avoir réfléchi, j'ai "熟練" ouvert Idea, examiné les exigences actuelles et commencé à taper le code. Hé, qui a écrit ces codes, comment se fait-il qu'ils apparaissent dans mon code, et qu'ils attendent toujours d'être soumis. Je me souviens que je ne les ai jamais écrits, alors je les ai regardés avec intérêt?:

De nos jours, si vous dites conna?tre Java, vous devez conna?tre le polymorphisme..

N'est-ce pas polymorphe?? Celui qui a écrit le test sur mon ordinateur ne peut s'empêcher de se demander.

"你看看這會輸出什么結(jié)果?"

Un son est venu de derrière. Parce que je pensais aux résultats de sortie, je ne me souciais pas de la source du son et j'ai continué à regarder le code. suis arrivé à la conclusion :

    polygon() before cal()
    square.cal(), border = 2
    polygon() after cal()
    square.square(), border = 4復(fù)制代碼

Je pensais : C'est ?a ? Au moins, vous êtes ingénieur en développement Java, d'accord ? Même si vous faites habituellement beaucoup de choses, vous avez quand même quelques compétences de base. Je n'ai pas pu m'empêcher de me sentir un peu fier~

"這就是你的答案嗎?看來你也不咋的"

La voix a soudainement retenti, cette fois je ne suis plus calme, Nima ! J'ai aussi pensé à cette réponse dans mon esprit, d'accord ? Qui peut la voir ? De plus, cela donne envie aux gens d'interpréter un ensemble des dix-huit styles d'Awei. "你是誰啊?"Il tourna la tête avec une pointe de doute et de colère. Pourquoi n'y a-t-il personne ? Vous ne pouvez pas tolérer un seul instant mes doutes, "小菜,醒醒,你怎么上班時間就睡著了"

Vous dormez pendant les heures de travail?? J'ai ouvert les yeux et regardé ce qui m'entourait. Cela s'est avéré être un rêve et j'ai poussé un soupir de soulagement. J'ai regardé autour de moi et j'ai vu le chef de service debout devant moi. Il dormait pendant les heures de travail. Tu ne te sens pas bien ou quelque chose comme ?a ? J'ai écrit un tas de bugs hier mais je ne les ai pas corrigés, et j'ai soumis des trucs compliqués aujourd'hui. Je pense que votre performance ce mois-ci n'est pas ce que je veux, et sur la base de votre performance, je dois commencer à y réfléchir pour le département. .

"我不是,我沒有,我也不知道怎么就睡著了,你聽我解釋?。?quot; Avant de pouvoir dire cela, 心里的花我要帶你回家,在那深夜酒吧哪管它是真是假,請你盡情搖擺忘記鐘意的他,你是最迷人噶,你知道嗎, l'alarme a sonné, je me suis levé immédiatement, mon dos était légèrement mouillé et mon front légèrement en sueur, j'ai regardé mon téléphone. 30, ?a s’est avéré être un rêve !

étrange, comment ai-je pu faire un rêve aussi étrange ? C'est si effrayant. Ensuite, j'ai pensé à la partie du code dans le rêve. Mes résultats sont-ils faux ? D'après ma mémoire, je l'ai retapé sur l'ordinateur, et les résultats sont les suivants?: Le résultat de

/*
    polygon() before cal()
    square.cal(), border = 0
    polygon() after cal()
    square.square(), border = 4
*/復(fù)制代碼

square.cal(), border est en fait 0, pas 2. Ne suis-je même pas bon en polymorphisme maintenant ? Devant votre ordinateur et votre téléphone portable, vous ne savez pas si vous avez trouvé la bonne réponse ! Que vous l'ayez ou non, passons en revue le polymorphisme avec Xiao Cai !

Certains amis peuvent être confus non seulement quant au résultat de square.cal(), border étant 0, mais aussi quant à la raison pour laquelle square.square(), border = 4 n'est pas affiché en premier. Alors commen?ons par les doutes !

Polymorphisme

Dans les langages de programmation orientés objet, le polymorphisme est la troisième fonctionnalité de base après l'abstraction et l'héritage des données.

Le polymorphisme peut non seulement améliorer l'organisation et la lisibilité du code, mais également créer des programmes évolutifs. La fonction du polymorphisme est d'éliminer 耦合關(guān)系 entre les types.

1. Transformation vers le haut

Selon 里氏代換原則?: Partout où une classe de base peut appara?tre, une sous-classe peut certainement appara?tre.

Un objet peut être utilisé soit comme son propre type, soit comme son type de base. Cette approche consistant à traiter une référence à un objet comme une référence à son type de base est appelée - 向上轉(zhuǎn)型. étant donné que la classe parent est au-dessus de la classe enfant, la classe enfant doit faire référence à la classe parent, elle est donc appelée 向上轉(zhuǎn)型.

public class Animal {    void eat() {
        System.out.println("Animal eat()");
    }
}class Monkey extends Animal {    void eat() {
        System.out.println(" Monkey eat()");
    }
}class test {    public static void start(Animal animal) {
        animal.eat();
    }    public static void main(String[] args) {
        Monkey monkey = new Monkey();
        start(monkey);
    }
}/* OUTPUT:
Monkey eat()
*/復(fù)制代碼

La méthode test dans la classe start() ci-dessus re?oit une référence de Animal et peut naturellement également recevoir des classes dérivées de Animal. Lors de l'appel de la méthode eat(), la méthode Monkey définie dans eat() est naturellement utilisée sans aucune conversion de type. Parce que la diffusion ascendante de Monkey vers Animal ne peut que réduire les interfaces, mais pas moins d'interfaces que Animal.

Une analogie pas particulièrement appropriée : Les biens de votre père vous seront hérités, et vos biens seront toujours les v?tres. En général, vos biens ne seront pas inférieurs à ceux de votre père.

De nos jours, si vous dites conna?tre Java, vous devez conna?tre le polymorphisme.

忘記對象類型

test.start()方法中,定義傳入的是 Animal 的引用,但是卻傳入Monkey,這看起來似乎忘記了Monkey 的對象類型,那么為什么不直接把test類中的方法定義為void start(Monkey monkey),這樣看上去難道不會更直觀嗎。

直觀也許是它的優(yōu)點,但是就會帶來其他問題:Animal不止只有一個Monkey的導出類,這個時候來了個pig ,那么是不是就要再定義個方法為void start(Monkey monkey),重載用得挺溜嘛小伙子,但是未免太麻煩了。懶惰才是開發(fā)人員的天性。

因此這樣就有了多態(tài)的產(chǎn)生

2.顯露優(yōu)勢

方法調(diào)用中分為 靜態(tài)綁定動態(tài)綁定。何為綁定:將一個方法調(diào)用同一個方法主體關(guān)聯(lián)起來被稱作綁定。

  • 靜態(tài)綁定:又稱為前期綁定。是在程序執(zhí)行前進行把綁定。我們平時聽到"靜態(tài)"的時候,不難免想到static關(guān)鍵字,被static關(guān)鍵字修飾后的變量成為靜態(tài)變量,這種變量就是在程序執(zhí)行前初始化的。前期綁定是面向過程語言中默認的綁定方式,例如 C 語言只有一種方法調(diào)用,那就是前期綁定。

引出思考:

public static void start(Animal animal) {
    animal.eat();
}復(fù)制代碼

start()方法中傳入的是Animal 的對象引用,如果有多個Animal的導出類,那么執(zhí)行eat()方法的時候如何知道調(diào)用哪個方法。如果通過前期綁定那么是無法實現(xiàn)的。因此就有了后期綁定。

  • 動態(tài)綁定:又稱為后期綁定。是在程序運行時根據(jù)對象類型進行綁定的,因此又可以稱為運行時綁定。而 Java 就是根據(jù)它自己的后期綁定機制,以便在運行時能夠判斷對象的類型,從而調(diào)用正確的方法。

小結(jié):

Java 中除了 staticfinal 修飾的方法之外,都是屬于后期綁定

合理即正確

顯然通過動態(tài)綁定來實現(xiàn)多態(tài)是合理的。這樣子我們在開發(fā)接口的時候只需要傳入 基類 的引用,從而這些代碼對所有 基類 的 導出類 都可以正確的運行。

De nos jours, si vous dites conna?tre Java, vous devez conna?tre le polymorphisme.

其中Monkey、PigDog皆是Animal的導出類

Animal animal = new Monkey() 看上去不正確的賦值,但是上通過繼承,Monkey就是一種Animal,如果我們調(diào)用animal.eat()方法,不了解多態(tài)的小伙伴常常會誤以為調(diào)用的是Animaleat()方法,但是最終卻是調(diào)用了Monkey自己的eat()方法。

Animal作為基類,它的作用就是為導出類建立公用接口。所有從Animal繼承出去的導出類都可以有自己獨特的實現(xiàn)行為。

可擴展性

有了多態(tài)機制,我們可以根據(jù)自己的需求對系統(tǒng)添加任意多的新類型,而不需要重載void start(Animal animal)方法。

在一個設(shè)計良好的OOP程序中,大多數(shù)或者所有方法都會遵循start()方法的模型,只與基類接口同行,這樣的程序就是具有可擴展性的,我們可以通過從通用的基類繼承出新的數(shù)據(jù)類型,從而添加一些功能,那些操縱基類接口的方法就不需要任何改動就可以應(yīng)用于新類。

失靈了?

我們先來復(fù)習一下權(quán)限修飾符:

作用域當前類用一個package子孫類其他package
public
protected×
default××
private×××
  • public:所有類可見
  • protected:本類、本包和子類都可見
  • default:本類和本包可見
  • private:本類可見

私有方法帶來的失靈

復(fù)習完我們再來看一組代碼:

public class PrivateScope {    private void f() {
        System.out.println("PrivateScope f()");
    }    public static void main(String[] args) {
        PrivateScope p = new PrivateOverride();
        p.f();
    }
}class PrivateOverride extends PrivateScope {    private void f() {
        System.out.println("PrivateOverride f()");
    }
}/* OUTPUT
 PrivateScope f()
*/復(fù)制代碼

是否感到有點奇怪,為什么這個時候調(diào)用的f()是基類中定義的,而不像上面所述的那樣,通過動態(tài)綁定,從而調(diào)用導出類PrivateOverride中定義的f()。不知道心細的你是否發(fā)現(xiàn),基類中f()方法的修飾是private。沒錯,這就是問題所在,PrivateOverride中定義的f()方法是一個全新的方法,因為private的緣故,對子類不可見,自然也不能被重載。

結(jié)論

只有非 private 修飾的方法才可以被覆蓋

我們通過 Idea 寫代碼的時候,重寫的方法頭上可以標注@Override注解,如果不是重寫的方法,標注@Override注解就會報錯:

De nos jours, si vous dites conna?tre Java, vous devez conna?tre le polymorphisme.

這樣也可以很好的提示我們非重寫方法,而是全新的方法。

域帶來的失靈

當小伙伴看到這里,就會開始認為所有事物(除private修飾)都可以多態(tài)地發(fā)生。然而現(xiàn)實卻不是這樣子的,只有普通的方法調(diào)用才可以是多態(tài)的。這邊是多態(tài)的誤區(qū)所在。

讓我們再看看下面這組代碼:

class Super {    public int field = 0;    public int getField() {        return field;
    }
}class Son extends Super {    public int field = 1;    public int getField() {        return field;
    }    public int getSuperField() {        return super.field;
    }
}class FieldTest {    public static void main(String[] args) {
        Super sup = new Son();
        System.out.println("sup.field:" + sup.field + " sup.getField():" + sup.getField());

        Son son = new Son();
        System.out.println("son.field:" + son.field + " son.getField:" + son.getField() + " son.getSupField:" + son.getSuperField());
    }
}/* OUTPUT
sup.field:0 sup.getField():1
son.field:1 son.getField:1 son.getSupField:0
*/復(fù)制代碼

從上面代碼中我們看到sup.field輸出的值不是 Son 對象中所定義的,而是Super本身定義的。這與我們認識的多態(tài)有點沖突。

De nos jours, si vous dites conna?tre Java, vous devez conna?tre le polymorphisme.

其實不然,當Super對象轉(zhuǎn)型為Son引用時,任何域訪問操作都將由編譯器解析,因此不是多態(tài)的。在本例中,為Super.fieldSon.field分配了不同的存儲空間,而Son類是從Super類導出的,因此,Son實際上是包含兩個稱為field的域:它自己的+Super

雖然這種問題看上去很令人頭痛,但是我們開發(fā)規(guī)范中,通常會將所有的域都設(shè)置為 private,這樣就不能直接訪問它們,只能通過調(diào)用方法來訪問。

static 帶來的失靈

看到這里,小伙伴們應(yīng)該對多態(tài)有個大致的了解,但是不要掉以輕心哦,還有一種情況也是會出現(xiàn)失靈的,那就是如果某個方法是靜態(tài)的,那么它的行為就不具有多態(tài)性。

老規(guī)矩,我們看下這組代碼:

class StaticSuper {    public static void staticTest() {
        System.out.println("StaticSuper staticTest()");
    }

}class StaticSon extends StaticSuper{    public static void staticTest() {
        System.out.println("StaticSon staticTest()");
    }

}class StaticTest {    public static void main(String[] args) {
        StaticSuper sup = new StaticSon();
        sup.staticTest();
    }
}/* OUTPUT
StaticSuper staticTest()
*/復(fù)制代碼

靜態(tài)方法是與類相關(guān)聯(lián),而非與對象相關(guān)聯(lián)

3.構(gòu)造器與多態(tài)

首先我們需要明白的是構(gòu)造器不具有多態(tài)性,因為構(gòu)造器實際上是static方法,只不過該static的聲明是隱式的。

我們先回到開頭的那段神秘代碼:

De nos jours, si vous dites conna?tre Java, vous devez conna?tre le polymorphisme.

其中輸出結(jié)果是:

/*
    polygon() before cal()
    square.cal(), border = 0
    polygon() after cal()
    square.square(), border = 4
*/復(fù)制代碼

我們可以看到先輸出的是基類polygon中構(gòu)造器的方法。

這是因為基類的構(gòu)造器總是在導出類的構(gòu)造過程中被調(diào)用,而且是按照繼承層次逐漸向上鏈接,以使每個基類的構(gòu)造器都能得到調(diào)用。

De nos jours, si vous dites conna?tre Java, vous devez conna?tre le polymorphisme.

因為構(gòu)造器有一項特殊的任務(wù):檢查對象是否能正確的被構(gòu)造。導出類只能訪問它自己的成員,不能訪問基類的成員(基類成員通常是private類型)。只有基類的構(gòu)造器才具有權(quán)限來對自己的元素進行初始化。因此,必須令所有構(gòu)造器都得到調(diào)用,否則就不可能正確構(gòu)造完整對象。

步驟如下:

  • 調(diào)用基類構(gòu)造器,這個步驟會不斷的遞歸下去,首先是構(gòu)造這種層次結(jié)構(gòu)的根,然后是下一層導出類,...,直到最底層的導出類
  • 按聲明順序調(diào)用成員的初始化方法
  • 調(diào)用導出類構(gòu)造其的主體

打個不是特別恰當?shù)谋确剑?em>你的出現(xiàn)是否先要有你父親,你父親的出現(xiàn)是否先要有你的爺爺,這就是逐漸向上鏈接的方式

構(gòu)造器內(nèi)部的多態(tài)行為

有沒有想過如果在一個構(gòu)造器的內(nèi)調(diào)用正在構(gòu)造的對象的某個動態(tài)綁定方法,那么會發(fā)生什么情況呢? 動態(tài)綁定的調(diào)用是在運行時才決定的,因為對象無法知道它是屬于方法所在的那個類還是那個類的導出類。如果要調(diào)用構(gòu)造器內(nèi)部的一個動態(tài)綁定方法,就要用到那個方法的被覆蓋后的定義。然而因為被覆蓋的方法在對象被完全構(gòu)造之前就會被調(diào)用,這可能就會導致一些難于發(fā)現(xiàn)的隱藏錯誤。

問題引索

一個動態(tài)綁定的方法調(diào)用會向外深入到繼承層次結(jié)構(gòu)內(nèi)部,它可以調(diào)動導出類里的方法,如果我們是在構(gòu)造器內(nèi)部這樣做,那么就可能會調(diào)用某個方法,而這個方法做操縱的成員可能還未進行初始化,這肯定就會招致災(zāi)難的。

敏感的小伙伴是不是想到了開頭的那段代碼:

De nos jours, si vous dites conna?tre Java, vous devez conna?tre le polymorphisme.

輸出結(jié)果是:

/*
    polygon() before cal()
    square.cal(), border = 0
    polygon() after cal()
    square.square(), border = 4
*/復(fù)制代碼

我們在進行square對象初始化的時候,會先進行polygon對象的初始化,在polygon構(gòu)造器中有個cal()方法,這個時候就采用了動態(tài)綁定機制,調(diào)用了squarecal(),但這個時候border這個變量尚未進行初始化,int 類型的默認值為 0,因此就有了square.cal(), border = 0的輸出??吹竭@里,小伙伴們是不是有種撥開云霧見青天的感覺!

這組代碼初始化的實際過程為:

  • 在其他任何事物發(fā)生之前,將分配給對象的存儲空間初始化成二進制的零
  • 調(diào)用基類構(gòu)造器時,會調(diào)用被覆蓋后的cal()方法,由于步驟1的緣故,因此 border 的值為 0
  • 按照聲明的順序調(diào)用成員的初始化方法
  • 調(diào)用導出類的構(gòu)造器主體

不知道下次又會做什么樣的夢~

De nos jours, si vous dites conna?tre Java, vous devez conna?tre le polymorphisme.

想了解更多編程學習,敬請關(guān)注php培訓欄目!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1502
276
Comment gérer les transactions en Java avec JDBC? Comment gérer les transactions en Java avec JDBC? Aug 02, 2025 pm 12:29 PM

Pour gérer correctement les transactions JDBC, vous devez d'abord désactiver le mode de validation automatique, puis effectuer plusieurs opérations, et enfin vous engager ou randonner en fonction des résultats; 1. Appelez Conn.SetAutoCommit (false) pour démarrer la transaction; 2. Exécuter plusieurs opérations SQL, telles que l'insertion et la mise à jour; 3. Appelez Conn.Commit () Si toutes les opérations sont réussies, et appelez Conn.Rollback () Si une exception se produit pour garantir la cohérence des données; Dans le même temps, les ressources TRY-With doivent être utilisées pour gérer les ressources, gérer correctement les exceptions et cl?turer les connexions pour éviter la fuite de connexion; De plus, il est recommandé d'utiliser des pools de connexion et de définir des points de sauvegarde pour réaliser un retour en arrière partiel, et de maintenir les transactions aussi courtes que possible pour améliorer les performances.

Comment travailler avec le calendrier à Java? Comment travailler avec le calendrier à Java? Aug 02, 2025 am 02:38 AM

Utilisez des classes dans le package Java.Time pour remplacer les anciennes classes de date et de calendrier; 2. Obtenez la date et l'heure actuelles via LocalDate, LocalDateTime et Localtime; 3. Créez une date et une heure spécifiques en utilisant la méthode OF (); 4. Utilisez la méthode plus / moins pour augmenter et diminuer le temps; 5. Utilisez ZonedDateTime et ZoneID pour traiter le fuseau horaire; 6. Format et cha?nes de date d'analyse via DateTimeFormatter; 7. Utilisez instantanément pour être compatible avec les anciens types de dates si nécessaire; Le traitement des dattes dans le Java moderne devrait donner la priorité à l'utilisation de Java.timeapi, qui fournit clairement, immuable et linéaire

Comparaison des frameworks Java: Spring Boot vs Quarkus vs MicronAut Comparaison des frameworks Java: Spring Boot vs Quarkus vs MicronAut Aug 04, 2025 pm 12:48 PM

Pré-formancetartuptimemoryusage, quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusofperforming lightbetterine scénarios.

Comprendre les ports du réseau et les pare-feu Comprendre les ports du réseau et les pare-feu Aug 01, 2025 am 06:40 AM

NetworkportsandfirewallsworkTogeTherToenable Communication whileSenSurringSecurity.1.networkportsAreVirtualEndpointsNumberred0–65535, Withwell-connuportslike80 (HTTP), 443 (HTTPS), 22 (SSH), et 25 (SMTP)

Comment fonctionne la collection Garbage en Java? Comment fonctionne la collection Garbage en Java? Aug 02, 2025 pm 01:55 PM

La collecte des ordures de Java (GC) est un mécanisme qui gère automatiquement la mémoire, ce qui réduit le risque de fuite de mémoire en récupérant des objets inaccessibles. 1. GC juge l'accessibilité de l'objet de l'objet racine (tel que les variables de pile, les threads actifs, les champs statiques, etc.), et les objets inaccessibles sont marqués comme des ordures. 2. Sur la base de l'algorithme de compensation de marque, marquez tous les objets accessibles et effacez des objets non marqués. 3. Adopter une stratégie de collecte générationnelle: la nouvelle génération (Eden, S0, S1) exécute fréquemment MinorGC; Les personnes agées fonctionnent moins, mais prend plus de temps pour effectuer MajorGC; Metaspace Stores Metadata de classe. 4. JVM fournit une variété de périphériques GC: SerialGC convient aux petites applications; Le parallelGC améliore le débit; CMS réduit

Utilisation de types HTML ?Entrée? pour les données utilisateur Utilisation de types HTML ?Entrée? pour les données utilisateur Aug 03, 2025 am 11:07 AM

Le choix du bon type HTMLinput peut améliorer la précision des données, améliorer l'expérience utilisateur et améliorer la convivialité. 1. Sélectionnez les types d'entrée correspondants en fonction du type de données, tels que le texte, le courrier électronique, le tel, le numéro et la date, qui peuvent vérifier automatiquement la somme de la somme et l'adaptation au clavier; 2. Utilisez HTML5 pour ajouter de nouveaux types tels que l'URL, la couleur, la plage et la recherche, qui peuvent fournir une méthode d'interaction plus intuitive; 3. Utilisez l'espace réservé et les attributs requis pour améliorer l'efficacité et la précision du remplissage des formulaires, mais il convient de noter que l'espace réservé ne peut pas remplacer l'étiquette.

Comparaison des outils de construction Java: Maven vs Gradle Comparaison des outils de construction Java: Maven vs Gradle Aug 03, 2025 pm 01:36 PM

GradleisthebetterChoiceFormostNewProjectsDuetOtsSuperiorflexibility, Performance et ModerNtoolingSupport.1.gradle’sgroovy / kotlindslismoreConcis

passer par l'exemple de déclaration de différence expliquée passer par l'exemple de déclaration de différence expliquée Aug 02, 2025 am 06:26 AM

Le report est utilisé pour effectuer des opérations spécifiées avant le retour de la fonction, telles que les ressources de nettoyage; Les paramètres sont évalués immédiatement lorsqu'ils sont reportés et les fonctions sont exécutées dans l'ordre de la dernière entrée (LIFO); 1. Plusieurs éleveurs sont exécutés dans l'ordre inverse des déclarations; 2. Communément utilisé pour le nettoyage sécurisé tel que la fermeture des fichiers; 3. La valeur de retour nommée peut être modifiée; 4. Il sera exécuté même si la panique se produit, adaptée à la récupération; 5. éviter l'abus de report dans les boucles pour éviter la fuite des ressources; Une utilisation correcte peut améliorer la sécurité et la lisibilité du code.

See all articles