Javaの中のstaticキーワードを素早く理解します。


Static基本ルール:
(1)クラスの静的方法は静的属性にのみアクセスできます。
(2)クラスの静的方法は、直接的に非静的方法を呼び出すことができない。
(3)アクセス権限が許可されている場合、static属性と方法はオブジェクトプラス''を用いて呼び出すことができ、もちろんインスタンスプラス''を使用して呼び出すこともできる。
(4)静的方法には現在のオブジェクトが存在しないので、thisは使用できません。もちろんsuperも使用できません。
(5)静的方法は非静的方法ではカバーできない。
(6)構造方法はstaticとして宣言されることを許さない。
staticキーワードは、メソッド、メンバー変数、コードブロックを追加することができます。クラスはもう考えないでください。
1.staticの方法
staticメソッドはクラスで実用化されていない場合に直接訪問することができます。静的方法ではクラスの非静的メンバ変数および非静的メンバ方法にアクセスできない。なぜなら、非静的メンバ方法/変数は特定のオブジェクトに依存しなければ呼び出されないからである。
2.static変数
static変数は静的変数とも呼ばれ、静的変数と非静的変数の違いは、静的変数がすべてのオブジェクトに共有され、メモリにはコピーが一つしかありません。クラスが最初にロードされたときだけ初期化されます。静的変数ではなくオブジェクトが持つもので、オブジェクトを作成する際に初期化され、複数のコピーが存在し、各オブジェクトが持つコピーは互いに影響しません。
staticメンバー変数の初期化順序は、定義された順序で初期化されます。
static変数にはメモリ空間が一つしかありません。複数のインスタンスがありますが、これらのインスタンスのstatic変数は同じメモリ空間を共有します。したがって、静的変数の値が変更される場合は、不必要な「bug」にならないように特に注意してください。
static変数はクラス搭載時に初期化されます。
3.staticコードブロック
いくつかのメンバー情報を初期化するために使用できます。

public class testClassA {
 public static int val = 1;
 static {
 System.err.println("11:" + val);
 val = 2;
 System.err.println("22:" + val);
 }
 public static int getVal() {
 return val;
 }
}
System.err.println(testClassA.getVal());
結果:
11:1
22:2
2
4.static内部クラス
なぜ内部クラスを使うのですか?
1)内部類は一般的にその外部類にのみ使用されます。
2)内部類は外部に入る窓を提供しています。
3)最も魅力的な原因でもあります。各内部クラスは独立して一つのインターフェースを継承できます。外部クラスがあるインターフェースを継承したかどうかに関わらず。したがって、内部クラスは多重継承の解決策をより完全にする。

public class ClassA {
 public static String val = "1";
 
 public ClassA() {
 }
 public static class ClassB {//     
 public static int bVal = 2;
 }
 
 public class ClassC {
 public ClassC()
 {
 
 }
 
 private void name() {
 System.err.println("abc");
 }
 }
}
5.スタティック導入
静的ガイドはコードを簡略化し、コードの読み取り性を向上させるためですが、読書性を濫用すると大変です。
静的導入については、必ず二つの規則(以下の資料から)を遵守します。
*(アスタリスク)ワイルドカードは使用しません。スタティック定数クラス(定数のみを含むクラスまたはインターフェース)を導入しない限り、使用します。
メソッド名は、明確で明確な表示意味を持つツール類です。

import static java.lang.System.*;

public class testClass {
 public static void main(String[] args) {
 err.println();//     system.err.println() 。
 }
}
6.実現単例

public class ClassA {
 
 private static ClassA instance = null;
 
 public static synchronized ClassA getInstance() {//                       
 if (instance == null) {
 instance = new ClassA();
 }
 return instance;
 }
 
 public void test() {
 System.err.println(1);
 }
}

public class ClassA {
 
 private static ClassA instance = new ClassA();//     ,      
 
 public static ClassA getInstance() {
 
 return instance;
 }
 
 public void test() {
 System.err.println(1);
 }
}
//volatileキーワードを使って、単一の例のモードの最適な解決案は、旧版jdkに対応していません。

public class ClassA {
 
 private volatile static ClassA instance = null;
 
 public static ClassA getInstance() {
 if (instance == null) {
 synchronized (ClassA.class) {
 if (instance == null) {
  instance = new ClassA();
 }
 }
 }
 return instance;
 }
 
 public void test() {
 System.err.println(1);
 }
}

//                jdk
public class ClassA {
 private ClassA() {
 
 }
 
 private static class InstanceClass {
 private static ClassA instance = new ClassA();
 }
 
 public static ClassA getInstance() {
 return InstanceClass.instance;
 }  2020         ,  mysql,netty,spring,  ,spring cloud、jvm、  、       ,            Q  :756584822
 
 public void test() {
 System.err.println(1);
 }
}
ClassA.getInstance().test(); //    
7.注意事項:
1.静的なメンバー変数は、実用化されたクラスのオブジェクトにアクセスできます。静的な方法はオブジェクトにもアクセスできますが、警告があります。
2.ローカル変数はstaticできません。
3.staticコードブロックは構造関数より優先されます。
ここで、javaのstaticキーワードについての文章を紹介します。javaのstaticキーワードの内容については、以前の文章を検索してください。また、下記の関連記事を見てください。これからもよろしくお願いします。