首頁 Java Java基礎 java靜態方法和非靜態方法的差別

java靜態方法和非靜態方法的差別

Nov 12, 2019 am 10:24 AM
java 差別 靜態方法

java靜態方法和非靜態方法的差別

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1269
29
C# 教程
1248
24
PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP與Python:核心功能 PHP與Python:核心功能 Apr 13, 2025 am 12:16 AM

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP的影響:網絡開發及以後 PHP的影響:網絡開發及以後 Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP與Python:用例和應用程序 PHP與Python:用例和應用程序 Apr 17, 2025 am 12:23 AM

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。

centos和ubuntu的區別 centos和ubuntu的區別 Apr 14, 2025 pm 09:09 PM

CentOS 和 Ubuntu 的關鍵差異在於:起源(CentOS 源自 Red Hat,面向企業;Ubuntu 源自 Debian,面向個人)、包管理(CentOS 使用 yum,注重穩定;Ubuntu 使用 apt,更新頻率高)、支持週期(CentOS 提供 10 年支持,Ubuntu 提供 5 年 LTS 支持)、社區支持(CentOS 側重穩定,Ubuntu 提供廣泛教程和文檔)、用途(CentOS 偏向服務器,Ubuntu 適用於服務器和桌面),其他差異包括安裝精簡度(CentOS 精

laravel和thinkphp的區別 laravel和thinkphp的區別 Apr 18, 2025 pm 01:09 PM

Laravel 和 ThinkPHP 都是流行的 PHP 框架,在開發中各有優缺點。本文將深入比較這兩者,重點介紹它們的架構、特性和性能差異,以幫助開發者根據其特定項目需求做出明智的選擇。

centos如何查看防火牆狀態 centos如何查看防火牆狀態 Apr 14, 2025 pm 08:18 PM

CentOS防火牆的狀態可以通過sudo firewall-cmd --state命令查看,返回running或not running。更詳細的信息可以使用sudo firewall-cmd --list-all查看,包括已配置的區域、服務、端口等。如果 firewall-cmd 無法解決問題,可以使用sudo iptables -L -n查看iptables規則。修改防火牆配置前請務必做好備份,以確保服務器安全性。

在後端開發中,如何區分service層和dao層的職責? 在後端開發中,如何區分service層和dao層的職責? Apr 19, 2025 pm 01:51 PM

探討後端開發中的分層架構在後端開發中,分層架構是一種常見的設計模式,通常包括controller、service和dao三層�...

See all articles