Java-staticキーワードの詳細解

6359 ワード

staticは静的とも呼ばれ、クラスのローディングによってロードされ、静的領域に存在し、メンバ変数およびメンバ方法を修飾するために一般的に使われる。
staticの定義
1.メンバー変数を修飾する
public static int num = 0;
2.メンバーの飾り方
 public static void print(){

 }
staticはいつ使いますか?
オブジェクト内のメンバー変数が固定されている場合、またはオブジェクトを作成するたびにこのメンバー変数に空間を開く必要はありません。
どういう意味ですか栗を挙げます。今は学生の種類があります。入学には個人情報を記入しなければなりません。
class Person {
    public String name; //  
    public int age; //  
    public String grade; //  
}
オブジェクトを作成するのに便利なように、構造的な方法を追加します。
 public Person(String name, int age, String grade) {
     this.name = name;
     this.age = age;
     this.grade = grade;
 }
次の新入生は入学します。私たちは対象を作り始めます。
  public static void main(String[] args) {
      Person xiaoming = new Person("  ", 7, "   ");
      Person xiaohong = new Person("  ", 8, "   ");
      Person xiaobai = new Person("  ", 9, "   ");
  }
今は三人の新入生が入学しました。個人情報を記入する時は、同じクラスにいますので、学年の時は同じです。でも、対象を作るたびに、gradeメンバー変数を作成しなければなりません。毎回同じである以上、このメンバー変数を一回だけ作成してもいいですか?今はstaticキーワードを使う必要があります。grade変数をstaticで修飾し、gradeにデフォルト値を初期化します。
class Person {
    public String name; //  
    public int age; //  
    public static String grade = "   "; //  
}
構造方法は、gradeパラメータを削除し、構造方法を実行する時に、学生情報を出力してもいいです。
 public Person(String name, int age) {
     this.name = name;
     this.age = age;
     System.out.println(name + " " + age + " " + grade);
 }
オブジェクトを再作成します。
 public static void main(String[] args) {
     Person xiaoming = new Person("  ", 7);
     Person xiaohong = new Person("  ", 8);
     Person xiaobai = new Person("  ", 9);
 }
実行結果
   7    
   8    
   9    
これは明らかにメリットがあるとは言えないかもしれませんが、このオブジェクトを何度も繰り返し作成するとメモリが節約できます。
staticは対象に共有されます。
今は一年が経ちました。三人のクラスメートはもう三年生になりました。私達は三人のクラス情報を修正したいです。まずPerson類にset Grade()の方法を追加して、grade変数を修正する必要があります。
xiaoming.setGrade("   ");
xiaohong.setGrade("   ");
xiaobai.setGrade("   ");
面倒くさいですかここでは、新しい機能を紹介します。staticによって修正されたメンバー変数とメンバー方法は直接にクラス名を使って訪問することができます。
 public static void main(String[] args) {
     Person.grade = "   ";
     Person xiaoming = new Person("  ", 7);
     Person xiaohong = new Person("  ", 8);
     Person xiaobai = new Person("  ", 9);
 }
実行結果
   7    
   8    
   9    
この3つのオブジェクトのいずれかのオブジェクトのgrade変数を「3年生」に変更すると、すべてのオブジェクトのgradeも変更されます。彼らが一つのgrade変数を共有するからです。
staticのメリット
1.オブジェクト内の共有が必要なデータを個別に記憶し、省スペース2.直接にクラス名を使って呼び出すことができ、オブジェクトの作成を繰り返す必要がない。
staticメンバーの飾り方
通常のツールクラスの方法は、staticによって変更されます。ツールクラスを使用する場合は、メモリを便利にしたり、節約するため(オブジェクトを作成する必要はありません)、静的な方法として設定されていますので、直接にクラス名で呼び出します。
class Utils {
     public static void print(String text) {
         System.out.println(text);
     }
}

//   
Utils.print("haha")
注意事項
1.静的方法では、非静的方法と非静的メンバ変数にアクセスできません。静的方法では、this、superguaキーワードは発生しません。