static關鍵字的三大作用:
(推薦教學:java入門教學)
static靜態成員變量
static靜態成員方法
static靜態程式碼區塊
分析:
1、static靜態成員變數
說明:如果一個成員變數使用了static關鍵字,那麼這個變數不再屬於物件自己,而是屬於所在類別。多個物件共享同一份資料。
程式碼範例說明:
我們建立一個Student學生類,設定room教室和idCounter兩個靜態成員變數。在main()方法中實例化兩個學生物件one和two,只給one物件的room賦值,列印輸出的時候會發現此時two.room的值和one.room的值一樣。
可以看出,因為room使用了static關鍵字,所以它屬於類,不再屬於物件自己,可以被多個物件共享一。因為idCounter是一個靜態變量,只會初始化一次,所以,每建立一個物件id都會自增長1。
public class Demo01StaticField { public static void main(String[] args) { Student one=new Student("郭靖",19); Student two=new Student("黄蓉",16); one.room="101教室"; System.out.println("姓名:"+one.getName()+",年龄:" +one.getAge()+",教室:"+one.room +",学号:"+one.getId()); //姓名:郭靖,年龄:19,教室:101教室,学号:1 System.out.println("姓名:"+two.getName() +",年龄:"+two.getAge()+",教室:"+two.room +",学号:"+two.getId()); //姓名:黄蓉,年龄:16,教室:101教室,学号:2 } } public class Student { private int id; //学号 private String name; //姓名 private int age; //年龄 static String room; //所在教室 private static int idCounter=0; //学号计数器,每当new了一个新对象的时候,计数器++ public Student() { this.id= ++idCounter; } public Student(String name, int age) { this.name = name; this.age = age; this.id= ++idCounter; } public int getId() { return id; } public void setId(int id) { this.id = id; } //name和age的Getter,Setter方法同上id,省略 }
2、static靜態成員方法
說明:如果一個成員方法使用了static關鍵字,同樣,那麼這就變成了靜態方法。靜態方法不屬於對象,而是屬於類別的。
static修飾成員方法的優點:避免了new物件的繁瑣和資源的消耗,可以直接透過【類別名稱.方法名稱】來使用。
程式碼範例說明:
新一個Myclass類,裡面有一個成員變量,一個靜態成員變量,一個成員方法,一個靜態成員方法。我們可以看到,成員方法既可以存取成員變數也可以存取靜態變數。而靜態方法只能存取靜態變量,不能存取非靜態,也不能使用this關鍵字。使用該類別的時候,有了static關鍵字,那麼不需要創建對象,直接就能透過類別名稱來使用它。對於本類別當中的靜態方法,可以省略類別名稱。
public class Demo02StaticMethod { public static void main(String[] args) { //非静态方法使用:1.首先创建对象 MyClass obj=new MyClass(); //2.然后才能使用没有static关键字的方法 obj.method(); //对于静态方法来说,可以通过对象名进行调用,也可以通过类名称来调用。 obj.methodStatic(); //正确,不推荐,这种写法也会被javac翻译成“类名称.静态方法名” MyClass.methodStatic(); //正确,推荐 //对于本类当中的静态方法,可以省略类名称 myMethod(); Demo02StaticMethod.myMethod(); //完全等效 } public static void myMethod(){ System.out.println("自己的方法!"); } } public class MyClass { int num; //成员变量 static int numStatic; //静态变量 //成员方法 public void method(){ System.out.println("这是一个普通的成员方法。"); //成员方法可以访问成员变量 System.out.println(num); //成员方法可以访问静态变量 System.out.println(numStatic); } //静态方法 public static void methodStatic(){ System.out.println("这是一个普通的静态方法。"); //静态方法可以访问静态变量 System.out.println(numStatic); //静态不能直接访问非静态【重点】 //System.out.println(num); //错误写法 //静态方法中不能使用this关键字 //System.out.println(this); //错误写法 } }
(學習影片推薦:java課程)
3、static靜態程式碼區塊
格式:
public class 类名称{ static{ //静态代码块的内容 } }
特點:當第一次用到本類時,靜態程式碼區塊執行唯一的一次,可以用來最佳化程式效能。我們大多數情況下,會將一些只會執行一次的初始化操作(初始化靜態資源)的程式碼放在static程式碼區塊中,例如:載入設定檔等。注意:靜態內容總是優先於非靜態,所以靜態程式碼區塊比建構方法先執行。
public class Demo04StaticCode { public static void main(String[] args) { Person one=new Person(); System.out.println("************************"); //无论创建几个Person对象,静态代码块只执行一次 Person two=new Person(); } } public class Person { static{ System.out.println("静态代码块执行!"); } public Person() { System.out.println("构造方法执行!"); } }
執行結果:
以上是static關鍵字的三大作用的詳細內容。更多資訊請關注PHP中文網其他相關文章!