靜態方法:static
靜態方法可以用類名調用,而非靜態方法不能用類名調用,只能用實例對象調用
靜態方法:靜態方法會隨着類的定義而被分配和裝載入內存中。靜態方法可以調用靜態方法以及訪問靜態數據域,但靜態方法不能調用實例方法或者訪問實例數據域。
實例方法:只有在類的對象創建時在對象的內存中才有這個方法的代碼段。實例方法可以調用實例方法和靜態方法,以及訪問實例數據域或者靜態數據域。
引用靜態方法時,可以用類名.方法名或者對象名.方法名的形式。
靜態變量:靜態變量被類中所有的對象所共享,它將變量值存儲在一個公共的內存地址,因為地址公共,所以如果某個對象修改了靜態變量的值,那么同一個類的所有對象都會受到影響。
非靜態變量:非靜態變量是對象所擁有的,在創建對象的時候被初始化,存在多個副本,各個對象擁有的副本互不影響。
靜態意味着它只在類被加載時創建一次,只擁有一個拷貝,不會隨着創建的實例對象的增加而增加
當聲明一個對象時,並不產生static變量的拷貝,而是該類所有的實例變量共用同一個static變量
3.static的一些特點:
(1)、當使用到類時,類被加載到內存,而靜態成員隨着類的加載而加載;
(2)、靜態成員可以用類名直接調用,它是優先於對象而存在的;
(3)、它為所有的對象所共享,都可以來調用。它是先於對象而存在的。
4.實例變量和靜態變量的一些區別:
(1)實例變量隨着對象的產生而被封裝在堆內存中,而靜態變量隨着類的加載而加載到方法區中。
(2)存儲空間不同,生命周期不同。
(3)靜態的方法中不可以定義this super 等關鍵字,因為靜態是先於對象而存在的,this是當前對象的引用
5.main方法為什么用static來定義?
在C/C++當中,這個main方法並不是屬於某一個類的,它是一個全局的方法,所以當我們執行的時候,c++編譯器很容易的就能找到這個main方法,然而當我們執行一個java程序的時候,因為java都是以類作為程序的組織單元,當我們要執行的時候,我們並不知道這個main方法會放到哪個類當中,也不知道是否是要產生類的一個對象,為了解決程序的運行問題,我們將這個main方法定義為static,這樣的話,當我們在執行一個java代碼的時候,我們在命令提示符中寫:java Point(Point為一個類),解釋器就會在Point這個類當中,去調用這個靜態的main方法,而不需要產生Point這個類的對象,當我們加載Point這個類的時候,那么main方法也被加載了,作為我們java程序的一個入口。
如果一個方法沒有用static來修飾的話就說明這是一個成員方法,只能通過對象來調用這個方法。在Java程序運行時,是沒有實例化任何對象的,只能通過調用類方法來運行main方法,所以會用static來修飾