Java靜態(tài)方法和實例方法區(qū)別詳解
靜態(tài)方法和實例方法的區(qū)別主要體現(xiàn)在兩個方面:
在外部調用靜態(tài)方法時,可以使用"類名.方法名"的方式,也可以使用"對象名.方法名"的方式。而實例方法只有后面這種方式。也就是說,調用靜態(tài)方法可以無需創(chuàng)建對象。
靜態(tài)方法在訪問本類的成員時,只允許訪問靜態(tài)成員(即靜態(tài)成員變量和靜態(tài)方法),而不允許訪問實例成員變量和實例方法;實例方法則無此限制。
下面幾個例子展示了這一區(qū)別。
1、調用靜態(tài)方法示例
//-----------hasStaticMethod.java----------------- public class hasStaticMethod{ //定義一個靜態(tài)方法 public static void callMe(){ System.out.println("This is a static method."); } }
下面這個程序使用兩種形式來調用靜態(tài)方法。
//-----------invokeStaticMethod.java----------------- public class invokeStaticMethod{ public static void main(String args[]){ hasStaticMethod.callMe(); //不創(chuàng)建對象,直接調用靜態(tài)方法 hasStaticMethod oa = new hasStaticMethod(); //創(chuàng)建一個對象 oa.callMe(); //利用對象來調用靜態(tài)方法 } }
程序兩次調用靜態(tài)方法,都是允許的,程序的輸出如下:
This is a static method.This is a static method.
允許不創(chuàng)建對象而調用靜態(tài)方法,是Java為了減少程序員調用某些常用方法時的麻煩,而允許程序員按照傳統(tǒng)的C語言中使用函數(shù)的方式來使用方法。典型的例子是前面某些程序中使用"Math.ramdon()"來獲取隨機數(shù)。
還有一個很典型的代表就是數(shù)組的處理工具Arrays
2、靜態(tài)方法訪問成員變量示例
//-----------accessMember.java----------------- class accessMember{ private static int sa; //定義一個靜態(tài)成員變量 private int ia; //定義一個實例成員變量 //下面定義一個靜態(tài)方法 static void statMethod(){ int i = 0; //正確,可以有自己的局部變量sa = 10; //正確,靜態(tài)方法可以使用靜態(tài)變量 otherStat(); //正確,可以調用靜態(tài)方法 ia = 20; //錯誤,不能使用實例變量 insMethod(); //錯誤,不能調用實例方法 } static void otherStat(){} //下面定義一個實例方法 void insMethod(){ int i = 0; //正確,可以有自己的局部變量 sa = 15; //正確,可以使用靜態(tài)變量 ia = 30; //正確,可以使用實例變量 statMethod(); //正確,可以調用靜態(tài)方法 } }
本例其實可以概括成一句話:靜態(tài)方法只能訪問靜態(tài)成員,實例方法可以訪問靜態(tài)和實例成員。之所以不允許靜態(tài)方法訪問實例成員變量,是因為實例成員變量是屬于某個對象的,而靜態(tài)方法在執(zhí)行時,并不一定存在對象。同樣,因為實例方法可以訪問實例成員變量,如果允許靜態(tài)方法調用實例方法,將間接地允許它使用實例成員變量,所以它也不能調用實例方法?;谕瑯拥牡览?,靜態(tài)方法中也不能使用關鍵字this。
main()方法是一個典型的靜態(tài)方法,它同樣遵循一般靜態(tài)方法的規(guī)則,所以它可以由系統(tǒng)在創(chuàng)建對象之前就調用。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
java poi設置生成的word的圖片為上下型環(huán)繞以及其位置的實現(xiàn)
這篇文章主要介紹了java poi設置生成的word的圖片為上下型環(huán)繞以及其位置的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09淺談Spring AOP中args()和argNames的含義
這篇文章主要介紹了Spring AOP中args()和argNames的含義,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07從零到掌握Spring Boot Validation 接口校驗的詳細過程
本文詳細介紹了SpringBoot的Validation接口校驗機制,包括其核心功能、常用注解、自定義校驗、以及實際應用場景,通過注解定義數(shù)據校驗規(guī)則,感興趣的朋友跟隨小編一起看看吧2025-02-02Java代碼實現(xiàn)對properties文件有序的讀寫的示例
本篇文章主要介紹了Java代碼實現(xiàn)對properties文件有序的讀寫的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11springboot整合cxf發(fā)布webservice以及調用的方法
這篇文章主要介紹了springboot整合cxf發(fā)布webservice以及調用的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08Java中的MessageFormat.format用法實例
這篇文章主要介紹了Java中的MessageFormat.format用法實例,本文先是講解了MessageFormat的語法,然后給出了多個操作實例,需要的朋友可以參考下2015-06-06java啟動時自定義配置文件路徑,自定義log4j2.xml位置方式
這篇文章主要介紹了java啟動時自定義配置文件路徑,自定義log4j2.xml位置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08