Heim  >  Artikel  >  Java  >  Welche Funktion hat das statische Java-Schlüsselwort?

Welche Funktion hat das statische Java-Schlüsselwort?

青灯夜游
青灯夜游Original
2020-11-02 10:42:3927331Durchsuche

Statisch ist in Java ein Modifikator, der zum Ändern von Klassenmitgliedsmethoden und Klassenmitgliedsvariablen verwendet wird. Darüber hinaus können statische Codeblöcke geschrieben werden, um die Programmleistung zu optimieren. Methoden oder Variablen, die durch das Schlüsselwort static geändert werden, müssen nicht von Objekten abhängen Solange die Klasse geladen ist, kann auf sie über den Klassennamen zugegriffen werden.

Welche Funktion hat das statische Java-Schlüsselwort?

(Empfohlenes Tutorial: Java-Einführungs-Tutorial)

1. Eigenschaften des statischen Schlüsselworts:

Auf Seite P86 von „Java Programming Thoughts“ gibt es diese Passage:

„Die statische Methode funktioniert Nicht statische Methoden können nicht innerhalb statischer Methoden aufgerufen werden, und statische Methoden können nur über die Klasse selbst aufgerufen werden, ohne dass Objekte erstellt werden

Obwohl diese Passage nur die Besonderheiten der statischen Methode erläutert, können wir die Grundfunktion des statischen Schlüsselworts in einem Satz beschreiben:

Es ist bequem zu verwenden, ohne ein Objekt zu erstellen ein Aufruf (Methode/Variable).

 Offensichtlich müssen Methoden oder Variablen, die durch das Schlüsselwort static geändert werden, für den Zugriff nicht auf Objekte angewiesen sein, auf die über den Klassennamen zugegriffen werden kann.

static ist ein Modifikator, der zum Ändern von Klassenmitgliedsmethoden und Klassenmitgliedsvariablen verwendet wird. Darüber hinaus können statische Codeblöcke geschrieben werden, um die Programmleistung zu optimieren.

1 Mitgliedsmethoden

Die durch statische Methoden geänderten Methoden werden im Allgemeinen als statische Methoden bezeichnet, da auf statische Methoden nicht zugegriffen werden kann, da sie an keine Objekte angehängt sind. Es hat keinen Sinn, darüber zu reden. Und aufgrund dieser Funktion kann in statischen Methoden nicht auf nicht statische Mitgliedsvariablen und nicht statische Mitgliedsmethoden der Klasse zugegriffen werden, da nicht statische Mitgliedsmethoden/-variablen auf bestimmte Objekte angewiesen sind, bevor sie aufgerufen werden können.

Es ist jedoch zu beachten, dass in statischen Methoden zwar nicht auf nicht statische Mitgliedsmethoden und nicht statische Mitgliedsvariablen zugegriffen werden kann, in nicht statischen Mitgliedsmethoden jedoch auf statische Mitgliedsmethoden/-variablen zugegriffen werden kann. Zum Beispiel:

Da die print2-Methode im obigen Code unabhängig vom Objekt existiert, kann sie direkt mit dem Klassennamen aufgerufen werden.

Wenn in statischen Methoden auf nicht-statische Methoden/Variablen zugegriffen werden kann, dann gibt es die folgende Anweisung in der Hauptmethode:

MyObject.print2();

Zu diesem Zeitpunkt sind keine Objekte vorhanden, str2 jedoch Es wird also überhaupt keinen Widerspruch geben. Das Gleiche gilt für Methoden. Da Sie nicht vorhersagen können, ob in der print1-Methode auf nicht statische Mitgliedsvariablen zugegriffen wird, ist der Zugriff auf nicht statische Mitgliedsmethoden auch in statischen Mitgliedsmethoden verboten.

 Für nicht statische Mitgliedsmethoden gibt es offensichtlich keine Einschränkung für den Zugriff auf statische Mitgliedsmethoden/-variablen.

 Wenn Sie also eine Methode aufrufen möchten, ohne ein Objekt zu erstellen, können Sie diese Methode auf statisch setzen. Unsere gebräuchlichste statische Methode ist die Hauptmethode. Warum die Hauptmethode statisch sein muss, ist jetzt klar. Da das Programm beim Ausführen der Hauptmethode keine Objekte erstellt, kann nur über den Klassennamen darauf zugegriffen werden.

2. Statisch modifizierte Mitgliedsvariablen werden auch als statische Variablen bezeichnet. Der Unterschied zwischen statischen Variablen und nicht statischen Variablen besteht darin, dass statische Variablen von allen Objekten gemeinsam genutzt werden und nur eine Kopie im Speicher haben if Die Klasse wird beim ersten Laden initialisiert. Nicht statische Variablen gehören Objekten und werden beim Erstellen des Objekts initialisiert. Es gibt mehrere Kopien, und die Kopien, die jedem Objekt gehören, wirken sich nicht gegenseitig aus.

Die Initialisierungsreihenfolge statischer Mitgliedsvariablen wird in der definierten Reihenfolge initialisiert.

3. Statischer modifizierter Codeblock

Eine weitere wichtige Rolle des statischen Schlüsselworts besteht darin, einen statischen Codeblock zu bilden, um die Programmleistung zu optimieren. Ein statischer Block kann an einer beliebigen Stelle in einer Klasse platziert werden, und eine Klasse kann mehrere statische Blöcke enthalten. Wenn eine Klasse zum ersten Mal geladen wird, wird jeder statische Block in der Reihenfolge der statischen Blöcke und nur einmal ausgeführt.

Der statische Block kann aufgrund seiner Eigenschaften die Programmleistung optimieren: Er wird nur einmal ausgeführt, wenn die Klasse zum ersten Mal geladen wird. Wie folgt:

class Person{
    private Date birthDate;

    public Person(Date birthDate) {
        this.birthDate = birthDate;
    }

    boolean isBornBoomer() {
        Date startDate = Date.valueOf("1946");
        Date endDate = Date.valueOf("1964");
        return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
    }
}

isBornBoomer wird verwendet, um zu bestimmen, ob eine Person zwischen 1946 und 1964 geboren wurde. Bei jedem Aufruf von isBornBoomer werden zwei Objekte, startDate und BirthDate, generiert, was zu einer Platzverschwendung führt, wenn es in geändert wird Die folgende Effizienz wird höher sein:

class Person {
    private Date birthDate;
    private static Date startDate, endDate;

    static {
        startDate = Date.valueOf("1946");
        endDate = Date.valueOf("1964");
    }

    public Person(Date birthDate) {
        this.birthDate = birthDate;
    }

    boolean isBornBoomer() {
        return birthDate.compareTo(startDate) >= 0 && birthDate.compareTo(endDate) < 0;
    }
}

Daher werden viele Initialisierungsvorgänge, die nur einmal ausgeführt werden müssen, in statischen Codeblöcken platziert.

二、static关键字的误区

1. 与C/C++中的static不同,Java中的static关键字不会影响到变量的变量或者方法的作用域。在Java中能够影响到访问权限的只有private、public、protected这几个关键字。示例如下:

提示错误,说明static关键字并不会改变变量和方法的访问权限。

2. 虽然对于静态方法来说没有this,但是我们在非静态方法中能够通过this访问静态方法成员变量。如下:

public class Test {

    static int value = 11;

    public static void main(String[] args) {

        new Test().printValue();

    }

    private void printValue() {
        int value = 22;
        System.out.println(this.value);
    }
}

输出的结果是:11

这里的this表示的是当前对象,那么通过new Test()来调用printValue的话,当前对象就是通过new Test()生成的对象。而static变量是被对象所享有的,因此在printValue中的this.value的值毫无疑问是11。在printValue方法内部的value是局部变量,根本不可能与this关联,所以输出11。需要记住的是:静态成员变量虽然独立于对象,但是不代表不可以通过对象去访问,所有的静态方法和静态变量都可以通过对象访问(只要权限足够)。

3. 在C/C++中static关键字是可以作用于局部变量的,但是在Java中是不允许使用static修饰局部变量的。这是Java语法的规定。

更多编程相关知识,请访问:编程教学!!

Das obige ist der detaillierte Inhalt vonWelche Funktion hat das statische Java-Schlüsselwort?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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