Heim > Java > javaLernprogramm > Hauptteil

Detaillierte Erläuterung der Verwendung statischer Codeblöcke in Java

高洛峰
Freigeben: 2017-01-18 15:10:03
Original
1310 Leute haben es durchsucht

1. Vergleich mit statischen Methoden

Wenn beim Starten des Projekts Code ausgeführt werden muss, müssen Sie diese Art von Code aktiv ausführen Wird beim Start des Projekts automatisch ausgeführt. Beim Aufruf aus anderen Programmen müssen statische Methoden bereits geladen werden und können direkt mit aufgerufen werden Der Klassenname muss beispielsweise statisch sein. Dies ist der Programmeintrag. Der Unterschied zwischen den beiden besteht darin, dass statische Codeblöcke automatisch ausgeführt werden; statische Methoden werden beim Aufruf ausgeführt.


2. Vorsichtsmaßnahmen für statische Methoden

Beachten Sie bei der Verwendung statischer Methoden einer Klasse Folgendes:

a. In einer statischen Methode können Sie nur direkt aufrufen Andere Mitglieder derselben Klasse sind statische Mitglieder (einschließlich Variablen und Methoden), während auf nicht statische Mitglieder einer Klasse nicht direkt zugegriffen werden kann. Dies liegt daran, dass nicht-statische Methoden und Variablen ein Instanzobjekt der Klasse erstellen müssen, bevor sie verwendet werden können, während statische Methoden

vor der Verwendung keine Objekte erstellen müssen.

b. Statische Methoden können in keiner Weise auf diese und Super-Schlüsselwörter verweisen, da statische Methoden vor der Verwendung keine Instanzobjekte erstellen müssen all (dieser Schlüssel Das Wort kann nur innerhalb einer Methode verwendet werden und stellt einen Verweis auf „das

-Objekt, das die Methode aufgerufen hat“) dar.

Statische Variablen sind Variablen, die zur gesamten Klasse und nicht zu einem Objekt gehören. Beachten Sie, dass Variablen innerhalb eines Methodenkörpers nicht als statisch deklariert werden können, zum Beispiel: fun() { static int i=0;//Illegal. }

3. Programmbeispiele

public class TestStaticCon {
     public static int a = 0;

     static {
         a = 10;
         System.out.println("父类的静态代码块在执行a=" + a);
     }

     {
         a = 8;
         System.out.println("父类的非静态代码块在执行a=" + a);
     }

     public TestStaticCon() {
         this("a在父类带参构造方法中的值:" + TestStaticCon.a); // 调用另外一个构造方法
         System.out.println(a);
         System.out.println("父类无参构造方法在执行a=" + a);
     }

     public TestStaticCon(String n) {
         System.out.println(n);
         System.out.println(a);

     }

     public static void main(String[] args) {
         TestStaticCon tsc = null;
         System.out.println("!!!!!!!!!!!!!!!!!!!!!");
         tsc = new TestStaticCon();
     }
 }
Nach dem Login kopieren
运行结果: 
父类的静态代码块在执行a=10 
!!!!!!!!!!!!!!!!!!!!! 
父类的非静态代码块在执行a=8 
a在父类带参构造方法中的值:10 
8 
8 
父类无参构造方法在执行a=8
Nach dem Login kopieren

Bereitgestellt von Internetnutzern

public class StaticBlock {

     static {
         System.out.println("静态块");
     }
     {
         System.out.println("构造块,在类中定义");
     }

     public StaticBlock() {
         System.out.println("构造方法执行");
     }

     public static void main(String[] args) {
         new StaticBlock();
         new StaticBlock();
     }

 }
Nach dem Login kopieren
静态块 
构造块,在类中定义 
构造方法执行 
构造块,在类中定义 
构造方法执行
Nach dem Login kopieren

Fazit: Statische Codeblöcke sind in Klassen Wird beim Laden automatisch ausgeführt. Der nicht statische Codeblock wird beim Erstellen des Objekts automatisch ausgeführt. Der nicht statische Codeblock dieser Klasse wird nicht ausgeführt. Und die Ausführungsreihenfolge ist statischer Codeblock – nicht statischer Codeblock – Konstruktor.

Was mich verwirrt, ist „der Wert von a in der Konstruktormethode der übergeordneten Klasse: 10“. Ich habe dann darüber nachgedacht, warum es zu diesem Zeitpunkt nicht 8 war. Debug (F11, man kann keinen Haltepunkt setzen und dann ausführen. Das unterscheidet sich nicht von der direkten Ausführung. Ich habe festgestellt, dass zuerst der Parameterlos-Konstruktor eingegeben, die erste Anweisung ausgeführt und zu einem anderen Konstruktor gewechselt wurde (der erste Satz muss ausgeführt werden, unabhängig davon, ob dies zu diesem Zeitpunkt der Fall ist). ist immer noch 10, andernfalls Der statische Codeblock wurde noch nicht ausgeführt), was darauf hinweist, dass die Quelle nicht gefunden werden kann, unabhängig davon, ob diese Anweisung diese Warnung auslöst (kein Fehler, da das Programm weiterhin normal ausgeführt wird) und dann ausgeführt wird Nicht statischer Codeblock, und dann ab dem Parameter Die Ausführung wird mit der Konstruktormethode fortgesetzt...

Ausführlichere Erläuterungen zur Verwendung statischer Codeblöcke in Java finden Sie auf der chinesischen PHP-Website Artikel!


Verwandte Etiketten:
Quelle: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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!