国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 Java Java基礎 java靜態(tài)方法和非靜態(tài)方法的區(qū)別

java靜態(tài)方法和非靜態(tài)方法的區(qū)別

Nov 12, 2019 am 10:24 AM
java 區(qū)別 靜態(tài)方法

java靜態(tài)方法和非靜態(tài)方法的區(qū)別

java靜態(tài)方法和非靜態(tài)方法的區(qū)別

1、靜態(tài)方法(static method)

與靜態(tài)成員變量一樣,屬于類本身,在類裝載的時候被裝載到內(nèi)存中,不自動進行銷毀,會一直存在內(nèi)存中,直到JVM關(guān)閉;

2、非靜態(tài)方法(non-static method)

又稱實例化方法,屬于實例對象,實例化之后才會分配內(nèi)存,必須通過類的實例來引用,當實例對象被JVM回收之后,也跟著消失

靜態(tài)方法和實例方法的區(qū)別

?1.生命周期

靜態(tài)方法的生命周期從進程創(chuàng)建時就開始,一直到進程結(jié)束,所以說靜態(tài)方法是全局的,貫穿整個進程

實例方法的生命周期,從實例化對象開始,一直到實例化對象被注銷回收之后結(jié)束

所以實例方法的生命周期是短于靜態(tài)方法的生命周期,這也是實例方法中不能調(diào)用靜態(tài)方法的原因

?2.調(diào)用方式

在外部調(diào)用靜態(tài)方法時,可以使用? “類名.方法名”的方式,也可以使用“對象.方法名”的方式,也就是說調(diào)用靜態(tài)方法時無需創(chuàng)建對象

實例方法只能使用“對象.方法名的方式”

//-----------hasStaticMethod.java-----------------
public class hasStaticMethod{
//定義一個靜態(tài)方法
public static void callMe(){
  System.out.println("This is a static method.");
}
}

下面這個程序使用兩種形式來調(diào)用靜態(tài)方法。

//-----------invokeStaticMethod.java-----------------
public class invokeStaticMethod{
  public static void main(String args[]){
  hasStaticMethod.callMe(); //不創(chuàng)建對象,直接調(diào)用靜態(tài)方法 
  hasStaticMethod oa = new hasStaticMethod();  //創(chuàng)建一個對象
  oa.callMe();   //利用對象來調(diào)用靜態(tài)方法
}
}

3.訪問限制

靜態(tài)方法在訪問本類的成員時,只允許訪問靜態(tài)成員(即靜態(tài)變量和靜態(tài)方法),而不允許訪問實例成員變量和實例方法;而實例方法則無此限制

實例成員變量是屬于某個對象的,在靜態(tài)方法執(zhí)行時,并不一定存在該對象;同理,如果允許靜態(tài)方法訪問實例成員方法,就間接的可以訪問實例成員變量,所以也不能訪問實例成員方法;基于同樣的道理,靜態(tài)方法中也不能使用關(guān)鍵字this

//-----------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(); 
  //正確,可以調(diào)用靜態(tài)方法
  ia = 20;  //錯誤,不能使用實例變量
  insMethod(); //錯誤,不能調(diào)用實例方法
}
static void otherStat(){} 
//下面定義一個實例方法 
void insMethod(){
  int i = 0;  //正確,可以有自己的局部變量
  sa = 15;  //正確,可以使用靜態(tài)變量
  ia = 30;  //正確,可以使用實例變量
  statMethod();  //正確,可以調(diào)用靜態(tài)方法
}
}

4.執(zhí)行順序

當一個class文件被ClassLoader load進入JVM之后,方法指令保存在Stack中,此時Heap區(qū)并沒有數(shù)據(jù)。然后程序技術(shù)器開始執(zhí)行指令,如果是靜態(tài)方法,直接依次執(zhí)行指令代碼,當然此時指令代碼是不能訪問Heapshuju數(shù)據(jù)區(qū)的;如果是實例方法(實例方法有一個隱含的傳入?yún)?shù),該參數(shù)是JVM給它的,這個參數(shù)就是實例對象在Stack中的內(nèi)存地址,因此實例方法才可以找到在Heap中屬于自己的數(shù)據(jù)),則在調(diào)用前必須實例化該對象,在Heap中分配數(shù)據(jù),并將Stack中的內(nèi)存指針通過JVM的隱含參數(shù)傳給實例方法。若不實例化直接調(diào)用,由于隱含參數(shù)沒有值,會報錯。

以上是java靜態(tài)方法和非靜態(tài)方法的區(qū)別的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務,必須先關(guān)閉自動提交模式,再執(zhí)行多個操作,最后根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開始事務;2.執(zhí)行多個SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時應使用try-with-resources管理資源,妥善處理異常并關(guān)閉連接,避免連接泄漏;此外建議使用連接池、設置保存點實現(xiàn)部分回滾,并保持事務盡可能短以提升性能。

比較Java框架:Spring Boot vs Quarkus vs Micronaut 比較Java框架:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

前形式攝取,quarkusandmicronautleaddueTocile timeProcessingandGraalvSupport,withquarkusoftenpernperforminglightbetterine nosserless notelless centarios.2。

垃圾收集如何在Java工作? 垃圾收集如何在Java工作? Aug 02, 2025 pm 01:55 PM

Java的垃圾回收(GC)是自動管理內(nèi)存的機制,通過回收不可達對象釋放堆內(nèi)存,減少內(nèi)存泄漏風險。1.GC從根對象(如棧變量、活動線程、靜態(tài)字段等)出發(fā)判斷對象可達性,無法到達的對象被標記為垃圾。2.基于標記-清除算法,標記所有可達對象,清除未標記對象。3.采用分代收集策略:新生代(Eden、S0、S1)頻繁執(zhí)行MinorGC;老年代執(zhí)行較少但耗時較長的MajorGC;Metaspace存儲類元數(shù)據(jù)。4.JVM提供多種GC器:SerialGC適用于小型應用;ParallelGC提升吞吐量;CMS降

比較Java構(gòu)建工具:Maven vs. Gradle 比較Java構(gòu)建工具:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

Gradleisthebetterchoiceformostnewprojectsduetoitssuperiorflexibility,performance,andmoderntoolingsupport.1.Gradle’sGroovy/KotlinDSLismoreconciseandexpressivethanMaven’sverboseXML.2.GradleoutperformsMaveninbuildspeedwithincrementalcompilation,buildcac

使用HTML'輸入類型”作為用戶數(shù)據(jù) 使用HTML'輸入類型”作為用戶數(shù)據(jù) Aug 03, 2025 am 11:07 AM

選擇合適的HTMLinput類型能提升數(shù)據(jù)準確性、增強用戶體驗并提高可用性。1.根據(jù)數(shù)據(jù)類型選用對應input類型,如text、email、tel、number和date,可實現(xiàn)自動校驗和適配鍵盤;2.利用HTML5新增類型如url、color、range和search,可提供更直觀的交互方式;3.配合使用placeholder和required屬性,可提升表單填寫效率和正確率,但需注意placeholder不能替代label。

以身作則http中間件記錄示例 以身作則http中間件記錄示例 Aug 03, 2025 am 11:35 AM

Go中的HTTP日志中間件可記錄請求方法、路徑、客戶端IP和耗時,1.使用http.HandlerFunc包裝處理器,2.在調(diào)用next.ServeHTTP前后記錄開始時間和結(jié)束時間,3.通過r.RemoteAddr和X-Forwarded-For頭獲取真實客戶端IP,4.利用log.Printf輸出請求日志,5.將中間件應用于ServeMux實現(xiàn)全局日志記錄,完整示例代碼已驗證可運行,適用于中小型項目起步,擴展建議包括捕獲狀態(tài)碼、支持JSON日志和請求ID追蹤。

如何使用Java中的觀察者模式? 如何使用Java中的觀察者模式? Aug 02, 2025 am 11:52 AM

該問題的明確答案是推薦使用自定義觀察者接口實現(xiàn)觀察者模式。1.雖然Java提供了Observable和Observer,但前者是類且已棄用,缺乏靈活性;2.現(xiàn)代推薦做法是定義函數(shù)式Observer接口,由Subject維護Observer列表并在狀態(tài)變化時通知所有觀察者;3.可結(jié)合Lambda表達式使用,提升代碼簡潔性與可維護性;4.對于GUI或JavaBean場景,可選用PropertyChangeListener。因此,新項目應采用自定義觀察者接口方案,它類型安全、易于測試且與現(xiàn)代Java特

Java并發(fā)公用事業(yè):執(zhí)行人員服務和叉/加入 Java并發(fā)公用事業(yè):執(zhí)行人員服務和叉/加入 Aug 03, 2025 am 01:54 AM

ExecutorService適用于獨立任務的異步執(zhí)行,如I/O操作或定時任務,使用線程池管理并發(fā),通過submit提交Runnable或Callable任務,并用Future獲取結(jié)果,需注意無界隊列風險和顯式關(guān)閉線程池;2.Fork/Join框架專為可拆分的CPU密集型任務設計,基于分治法和工作竊取算法,通過RecursiveTask或RecursiveAction實現(xiàn)任務遞歸拆分,由ForkJoinPool調(diào)度執(zhí)行,適合大數(shù)組求和、排序等場景,需合理設置拆分閾值避免開銷;3.選擇依據(jù):獨立任

See all articles