Java教程 Java語言中的static修飾符
本文是Java教程之Java語言中的static修飾符部分。
在Java類中,我們常常會看到static關(guān)鍵字,往往被稱為靜態(tài)的。Static修飾符可以用來修飾數(shù)據(jù)成員,方法成員,但是不能修飾類(此處指外部類),不能修飾構(gòu)造方法。如:
- package com.csst.vo;
- public class User {
- private String name;
- private static int count;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public static int getCount() {
- return count;
- }
- public static void main(String[] args){
- User user1=new User();
- User user2=new User();
- user1.setName("Rose");
- user2.setName("Kate");
- user1.count=10;
- user2.count=20;
- System.out.println("user1.name:"+user1.getName()+" user2.name:"+user2.getName());
- System.out.println("user1.count:"+User.getCount()+"user2.count:"+user2.count);
- }
- }
該程序運行結(jié)果為:
- user1.name:Rose user2.name:Kate
- user1.count:20 user2.count:20
我們可以發(fā)現(xiàn),user1和user2的name屬性是不同的,分別為該對象調(diào)用setName所指定的,而雖然user1和user2分別對count屬性指定了不同的值,但是最終輸出的count值卻均為20。原因就是count被static修飾,而name沒有使用count修飾。
被static修飾符修飾的數(shù)據(jù)成員或方法成員被稱為靜態(tài)成員,或者類成員,沒有被static修飾的,被稱為實例成員。static成員只被初始化一次,所有的對象共享,因此count會輸出兩個20。實例成員只有當初始化對象的時候才初始化,每次創(chuàng)建對象,都會被初始化一次。name在user1和user2被創(chuàng)建時,初始化了2次,因此最終輸出的是Rose和Kate。
另外,static成員,由于是類共享的,所以不僅可以使用對象調(diào)用,也可以使用類名調(diào)用。在static方法中,不能夠直接使用非靜態(tài)的成員,如果使用,必須初始化對象,調(diào)用。如過在上面示例的User.java中有如下代碼,會發(fā)生編譯錯誤。
- public static void test(){
- setName("test");
- }
可以修改如下:
- public static void test(){
- User user=new User();
- user.setName("test");
- }
千萬不要盲目的把成員聲明為static,一定要理解static成員的特點,否則會造成雖然語法正確,但是邏輯錯誤的后果。
【編輯推薦】