[Swift vs Java] Lassen Sie uns statisch und endgültig verstehen

Static

Es ist Mitglied der statischen Klasse und kann an Variablen, Methoden, Blöcke und verschachtelte Klassen angehängt werden. (Über Variable und Methode)

Mit dem statischen Schlüsselwort ** können Sie ohne Instanz auf statische Mitglieder innerhalb der Klasse zugreifen **. Unabhängig davon, wie viele Instanzen Sie erstellen, haben alle Instanzen dieselben Werte und Methoden.

Die "statische" Methode gehört nicht zur Instanz und kann daher nicht auf die Mitglieder der Instanz zugreifen. Auf 'statische' Mitglieder kann nur mit der 'statischen' Methode zugegriffen werden.

Wann benutzt du es?

Verwenden Sie static, wenn es keine Rolle spielt, ob die Klasse erstellt wird oder nicht. Wenn Sie beispielsweise einen Namen und eine Schulnamensvariable in Ihrer Schülerklasse haben, Da der Name eindeutig ist, handelt es sich um eine Instanzvariable, und der Schulname ist eine statische Variable, da er ohne den Schüler unabhängig ist. Die Methode ist dieselbe und es fühlt sich an, als würden statische Methoden beibehalten, die nicht mit den Schülern zusammenhängen.

Was nützlich ist, ist, dass ** das Ändern der Statik in einer Klasse die statischen Werte aller Objekte ändert, die auf die Klasse verweisen! ** **.

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)")
    }
}

** Punkt 1 ** Java Swift ist ungefähr gleich, aber Der einzige Unterschied besteht darin, wie auf statische Variablen zugegriffen wird.

** Punkt 2 ** In den obigen Ausführungen lautet der Schulname der beiden Schüler "Tokyo University", obwohl er nicht festgelegt ist. Und statische Variablen werden nicht einmal von Klassen referenziert, daher werden sie nicht einmal in Konstruktoren verwendet!

Berechtigungen für statische Variablen und statische Methoden innerhalb der Klasse

Java

Prorammer.java



public class Programmer {

    private static boolean isGood;
    private int experienceYears;

    public static void main(){

        //Auf statische Variablen kann mit statischen Methoden zugegriffen werden
        isGood = true;

        //* Von der statischen Methode zur nicht-Auf statische Variablen kann nicht zugegriffen werden. Sie müssen eine Referenz verwenden
        Programmer person1 = new Programmer();
        person1.experienceYears = 10;
    }

    // non-Auf statische Variablen kann mit statischen Methoden zugegriffen werden
    public void setExperienceYears(int years){
        this.experienceYears = experienceYears;
    }

    // non-Von statischen Methoden zu nicht-Auf statische Variablen kann zugegriffen werden
    public void setIsGood(Boolean isGood){
        isGood = isGood;
    }
}

Swift

.swift


class Programmer{
    
    static var isGood:Bool?
    var experienceYears:Int?
    
    
    static func execute(){
        isGood = true
        
        //nicht von statischer Methode-Auf statische Variablen kann nicht zugegriffen werden. Benötigt Instanz
        let person1 = Programmer();
        person1.experienceYears = 10;
        
    }
    
    //non-Kann über statische Methoden aufgerufen werden
    func setExperience(_ years:Int){
        self.experienceYears = years
    }
    
    //non-Auf statische Variablen kann nicht direkt mit statischen Methoden zugegriffen werden. Klassenname erforderlich.
    func setIsGood(_ isGood:Bool){
        Programmer.isGood = isGood
    }
}

Final

Jede Funktion, wenn Final angehängt ist. Nur die Bedeutung der Variablen ändert sich 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

//Das ist in Ordnung
final public class Final extends Queen { }

//Das ist NG=Kompilierungsfehler
public class King extends Final { }

Swift

.swift


//OK
final class Final: Programmer { }

//NG =Kompilierungsfehler
final class Student: Final { }

Final Variable

Java Da es konstant wird, kann der Wert nicht geändert werden. Es ist ein Einlass in Swift.

Swift

.swift


//Sie können den Wert der endgültigen Variablen in der OK-Klasse ändern.
class Final{
    final var name = "Ayako Sayama"
    init() { name = "Ayako Superman" }
}

//NG Kompilierungsfehler
class Student: Final{
    override var name = "new name"
}

Final Method

Recommended Posts

[Swift vs Java] Lassen Sie uns statisch und endgültig verstehen
JAVA Learning History Final Modifier und Static Modifier
[Java] Unterschied zwischen statischem final und final in Mitgliedsvariablen
[Java] Stapelbereich und statischer Bereich
Informationen zu statischen und nicht statischen Java-Methoden
[Java] Verwendung statischer Modifikatoren (Was sind statische endgültige und statische Importe)
Unterschied zwischen final und Immutable in Java
Java statisch
Probieren wir WebSocket mit Java und Javascript aus!
Ein Java-Ingenieur verglich Swift, Kotlin und Java.
[Java / Swift] Vergleich von Java-Schnittstelle und Swift-Protokoll
Java-Programmierung (statische Klausel und "Klassenvariablen")
[Java] Verstehe den Unterschied zwischen List und Set
Vergleich zwischen Java und Swift (1) Quellcodeverwaltung / Umfang / Variablen
Ändern Sie dynamisch private statische Endfelder in Java
Überprüfen Sie das statische und öffentliche Verhalten in Java-Methoden
[Java] Verstehe in 10 Minuten! Assoziatives Array und HashMap
Java- und Swift-Vergleich (3) Klassenimplementierung / Klassenvererbung / Klassendesign
[Java] Unterschied zwischen "endgültiger Variable" und "unveränderlichem Objekt"
Lassen Sie uns Java studieren
Java und JavaScript
Lassen Sie uns die Schließung verstehen!
XXE und Java
Verstehen Sie den Java-Konstruktor
Java Final Modifier
Verstehen Sie den Fehler, indem Sie ihn implementieren und analysieren. (1) Deadlock (Java)
In der Abbildung verstandene Java-Klassen und -Instanzen