java靜態方法與非靜態方法的差異
1、靜態方法(static method)
與靜態成員變數一樣,屬於類別本身,在類別裝載的時候被裝載到記憶體中,不自動進行銷毀,會一直存在記憶體中,直到JVM關閉;
2、非靜態方法(non-static method)
又稱實例化方法,屬於實例對象,實例化之後才會分配內存,必須透過類別的實例來引用,當實例物件被JVM回收之後,也跟著消失
靜態方法與實例方法的差異
1.生命週期
靜態方法的生命週期從行程建立時就開始,一直到行程結束,所以說靜態方法是全域的,貫穿整個行程
實例方法的生命週期,從實例化物件開始,一直到實例化物件被註銷回收之後結束
所以實例方法的生命週期是短於靜態方法的生命週期,這也是實例方法中不能呼叫靜態方法的原因
2 .呼叫方式
在外部呼叫靜態方法時,可以使用 「類別名稱.方法名稱」的方式,也可以使用「物件.方法名稱」的方式,也就是說呼叫靜態方法時無需建立物件
實例方法只能使用「物件.方法名稱的方式」
//-----------hasStaticMethod.java----------------- public class hasStaticMethod{ //定义一个静态方法 public static void callMe(){ System.out.println("This is a static method."); } }
下面這個程式使用兩種形式來呼叫靜態方法。
//-----------invokeStaticMethod.java----------------- public class invokeStaticMethod{ public static void main(String args[]){ hasStaticMethod.callMe(); //不创建对象,直接调用静态方法 hasStaticMethod oa = new hasStaticMethod(); //创建一个对象 oa.callMe(); //利用对象来调用静态方法 } }
3.存取限制
靜態方法在存取本類別的成員時,只允許存取靜態成員(即靜態變數和靜態方法),而不允許存取實例成員變數和實例方法;而實例方法則無此限制
實例成員變數是屬於某個物件的,在靜態方法執行時,並不一定存在該物件;同理,如果允許靜態方法存取實例成員方法,就間接的可以存取實例成員變量,所以也不能存取實例成員方法;基於同樣的道理,靜態方法中也不能使用關鍵字this
//-----------accessMember.java----------------- class accessMember{ private static int sa; //定义一个静态成员变量 private int ia; //定义一个实例成员变量 //下面定义一个静态方法 static void statMethod(){ int i = 0; //正确,可以有自己的局部变量sa = 10; //正确,静态方法可以使用静态变量 otherStat(); //正确,可以调用静态方法 ia = 20; //错误,不能使用实例变量 insMethod(); //错误,不能调用实例方法 } static void otherStat(){} //下面定义一个实例方法 void insMethod(){ int i = 0; //正确,可以有自己的局部变量 sa = 15; //正确,可以使用静态变量 ia = 30; //正确,可以使用实例变量 statMethod(); //正确,可以调用静态方法 } }
#4.執行順序
當一個class檔案被ClassLoader load進入JVM之後,方法指令儲存在Stack中,此時Heap區並沒有資料。然後程式技術器開始執行指令,如果是靜態方法,直接依序執行指令碼,當然此時指令碼是不能存取Heapshuju資料區的;如果是實例方法(實例方法有一個隱含的傳入參數,該參數是JVM給它的,這個參數就是實例物件在Stack中的記憶體位址,因此實例方法才可以找到在Heap中屬於自己的資料),則在呼叫前必須實例化該對象,在Heap中分配數據,並將Stack中的記憶體指標透過JVM的隱含參數傳給實例方法。若不實例化直接調用,由於隱含參數沒有值,會報錯。
以上是java靜態方法和非靜態方法的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于设计模式的相关问题,主要将装饰器模式的相关内容,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式,希望对大家有帮助。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),