范例:定義程序
class Book { //描述的是同一個出版社的信息
private String title;
private double price;
//定義一個描述出版社信息的屬性晚胡,
//但是考慮到操作方便,暫不封裝
String pub = "清華大學(xué)出版社";
public Book(String title , double price) {
this.title = title;
this.price = price;
}
public String getInfo() {
return "圖書名稱:" + this.title + ", 價格:"
+ this.price + ", 出版社:" + this.pub;
}
}
public class TestDemo {
public static void main(String[] args) {
Book ba = new Book("Java開發(fā)" , 15.0);
Book bb = new Book("Java測試" , 18.9);
//修改了一個屬性的內(nèi)容
ba.pub = "北京大學(xué)出版社";
System.out.println(ba.getInfo());
System.out.println(bb.getInfo());
}
}
運(yùn)行結(jié)果
內(nèi)存分析
通過內(nèi)存圖可以看出侯嘀,所有的圖書出版社都是同一個盗尸,那就沒有必要每個對象都各自占有重復(fù)的屬性信息呐赡。既然所有對象的pub內(nèi)容一樣,應(yīng)該定義為一個共享屬性咙冗,即:所有對象將共享同一個pub屬性粟按,可以使用static來定義屬性。
范例:使用static定義屬性
//String pub = "清華大學(xué)出版社";
static String pub = "清華大學(xué)出版社";
運(yùn)行結(jié)果
在屬性定義上使用了static之后遏餐,只要有一個對象修改屬性內(nèi)容伦腐,那么所有的對象的static屬性的內(nèi)容都將一起進(jìn)行修改,即pub屬性變成了一個公共屬性失都。
內(nèi)存分析
static聲明的屬性于普通屬性(非static屬性)最大的區(qū)別在于保存的內(nèi)存區(qū)域的不同
既然static是一個公共屬性柏蘑,如果用一個對象去調(diào)用是不合適的,所以最好的就是用類來調(diào)用粹庞。
//ba.pub = "北京大學(xué)出版社";
Book.pub = "北京大學(xué)出版社";
非static屬性必須產(chǎn)生實例化對象之后才可以訪問咳焚,但是static屬性不受實例化對象的控制,也就是說庞溜,在沒有實例化對象產(chǎn)生的情況下革半,依然可以使用static屬性。
System.out.println(Book.pub);
- static 方法不能夠直接訪問非static屬性或者方法流码,只能夠調(diào)用static屬性或者方法又官;
- 非static方法可以訪問static的屬性或者是方法,不受任何的限制漫试;