[Swift vs Java] Comprenons le statique et le final

Static

Il fait partie de la classe statique et peut être attaché à des variables, des méthodes, des blocs et des classes imbriquées. (À propos de la variable et de la méthode)

Avec le mot-clé static **, vous pouvez accéder aux membres statiques à l'intérieur de la classe sans instance **. De plus, quel que soit le nombre d'instances que vous créez, toutes les instances partageront les mêmes valeurs et méthodes.

La méthode "statique" n'appartient pas à l'instance et ne peut donc pas accéder aux membres de l'instance. Les membres «statiques» ne sont accessibles qu'à partir de la méthode «statique».

Quand l'utilisez vous?

Utilisez statique lorsque le fait que la classe soit créée ou non n'a pas d'importance. Par exemple, si vous avez une variable de nom et de nom d'école dans votre classe Student, Puisque le nom est unique, il s'agit d'une variable d'instance et le nom de l'école est une variable statique car il est indépendant sans l'élève. La méthode est la même et on a l'impression de conserver des méthodes statiques qui ne sont pas liées aux étudiants.

Ce qui est utile, c'est que ** la modification de la statique dans une classe modifie les valeurs statiques de tous les objets qui référencent la classe! ** **

Java

Main.java


public static void main(String args[]){
     Student s1 = new Student("Yagami");
     Student s2 = new Student("Dekisugi");

     s1.display();
     s2.display();

     System.out.println(Student.collegeName);
}

Student.java


public class Student {

        String name;
        static String collegeName ="Tokyo University";

        Student(String newStudentName){
            name = newStudentName;
        }
        void display (){
            System.out.println(name+" "+collegeName);
        }
}

Swift

Main.swift


let s1 = Student("Yagami")
let s2 = Student("Dekisugi")

s1.display()
s2.display()

print(Student.collegeName)

Student.swift


public class Student {
    
    var name:String?
    static var collegeName:String?
    
    init(_ name:String) {
        self.name = name
    }
    
    func display() {
        print("\(name) \(Student.collegeName)")
    }
}

** Point 1 ** Java Swift est à peu près le même, mais La seule différence est de savoir comment accéder aux variables statiques.

--Dans Swift, que vous soyez dans une classe ou non, vous pouvez accéder aux membres statiques Commencez par Student.collegeName et le nom de la classe

--En Java, vous n'avez pas besoin d'ajouter un nom de classe au début lorsque vous êtes dans une classe

** Point 2 ** En regardant ce qui précède, le nom de l'école des deux étudiants est "Université de Tokyo" même s'il n'est pas défini. Et les variables statiques ne sont même pas référencées par les classes, donc elles ne sont même pas utilisées dans les constructeurs!

Autorisations pour les variables statiques et les méthodes statiques au sein de la classe

Java

Prorammer.java



public class Programmer {

    private static boolean isGood;
    private int experienceYears;

    public static void main(){

        //Les variables statiques sont accessibles à partir de méthodes statiques
        isGood = true;

        //* De la méthode statique au non-Les variables statiques sont inaccessibles. Vous devez utiliser une référence
        Programmer person1 = new Programmer();
        person1.experienceYears = 10;
    }

    // non-Les variables statiques sont accessibles à partir de méthodes statiques
    public void setExperienceYears(int years){
        this.experienceYears = experienceYears;
    }

    // non-Des méthodes statiques aux non-les variables statiques sont accessibles
    public void setIsGood(Boolean isGood){
        isGood = isGood;
    }
}

Swift

.swift


class Programmer{
    
    static var isGood:Bool?
    var experienceYears:Int?
    
    
    static func execute(){
        isGood = true
        
        //méthode non statique-Les variables statiques sont inaccessibles. Nécessite une instance
        let person1 = Programmer();
        person1.experienceYears = 10;
        
    }
    
    //non-Accessible à partir de méthodes statiques
    func setExperience(_ years:Int){
        self.experienceYears = years
    }
    
    //non-Les variables statiques ne sont pas accessibles directement à partir de méthodes statiques. Nom de classe requis.
    func setIsGood(_ isGood:Bool){
        Programmer.isGood = isGood
    }
}

Final

Chaque fonction lorsque Final est joint. Seule la signification de la variable change Java

Final Class Final Variable Final Method
no child constant no override

Swift

Final Class Final Variable Final Method
no child no override in subclass no override

Final Class

Java

//C'est acceptable
final public class Final extends Queen { }

//C'est NG=erreur de compilation
public class King extends Final { }

Swift

.swift


//OK
final class Final: Programmer { }

//NG =erreur de compilation
final class Student: Final { }

Final Variable

Java Puisqu'il devient Constant, la valeur ne peut pas être modifiée. C'est un let dans Swift.

Swift

.swift


//Vous pouvez modifier la valeur de la variable finale dans la classe OK.
class Final{
    final var name = "Ayako Sayama"
    init() { name = "Ayako Superman" }
}

//Erreur de compilation NG
class Student: Final{
    override var name = "new name"
}

Final Method

Recommended Posts

[Swift vs Java] Comprenons le statique et le final
Modificateur final et modificateur statique de l'historique d'apprentissage JAVA
[Java] Différence entre statique final et final dans les variables membres
[Java] Zone de pile et zone statique
À propos des méthodes Java statiques et non statiques
[Java] Comment utiliser les modificateurs statiques (Que sont l'importation statique finale et statique)
Différence entre final et immuable en Java
Java statique
Essayons WebSocket avec Java et javascript!
Un ingénieur Java a comparé Swift, Kotlin et Java.
[Java / Swift] Comparaison de l'interface Java et du protocole Swift
Programmation Java (clause statique et "variables de classe")
[Java] Comprendre la différence entre List et Set
Comparaison entre Java et Swift (1) Source control / Scope / Variables
Modifier dynamiquement les champs finaux statiques privés en Java
Vérifier le comportement statique et public dans les méthodes Java
[Java] Comprenez en 10 minutes! Tableau associatif et HashMap
Comparaison Java et Swift (3) Implémentation de classe / héritage de classe / conception de classe
[Java] Différence entre "variable finale" et "objet immuable"
Étudions Java
Java et JavaScript
Comprenons la fermeture!
XXE et Java
Comprendre le constructeur java
modificateur final java
Comprendre le bogue en l'implémentant et en l'analysant (1) Deadlock (Java)
Classes et instances Java comprises dans la figure