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