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