[轉載] 詳解Java中靜態方法

參考鏈接: Java中的靜態類

定義: 在類中使用static修飾的靜態方法會隨著類的定義而被分配和裝載入內存中;而非靜態方法屬于對象的具體實例,只有在類的對象創建時在對象的內存中才有這個方法的代碼段。?

注意: 非靜態方法既可以訪問靜態數據成員 又可以訪問非靜態數據成員,而靜態方法只能訪問靜態數據成員; 非靜態方法既可以訪問靜態方法又可以訪問非靜態方法,而靜態方法只能訪問靜態數據方法。?

原因: 因為靜態方法和靜態數據成員會隨著類的定義而被分配和裝載入內存中,而非靜態方法和非靜態數據成員只有在類的對象創建時在對象的內存中才有這個方法的代碼段。?

引用靜態方法時,可以用類名.方法名或者對象名.方法名的形式。 對以上描述進行驗證的代碼示例:?

import java.util.*;

?

public class TestStatic {

? ? public static void main(String[]args){

? ? ? ? System.out.println(S.getStatic());//使用類名加前綴訪問靜態方法

? ? ? ? S s=new S();

? ? ? ? System.out.println(s.getStatic());//使用實例化對象名訪問靜態方法

? ? ? ? System.out.println(s.get());

? ? }

? ? public static class S

? ? {

? ? ? ? private static int a;

? ? ? ? private int t=0;

?

? ? ? ? //靜態初始器:由static和{}組成,只在類裝載的時候(第一次使用類的時候)執行一次,往往用來初始化靜態變量。

? ? ? ? static{

? ? ? ? ? ? a=10;

? ? ? ? }

?

? ? ? ? //靜態方法只能訪問靜態數據成員

? ? ? ? public static int getStatic()

? ? ? ? {

? ? ? ? ? ? return a;

? ? ? ? }

?

? ? ? ? public int getT()

? ? ? ? {

? ? ? ? ? ? return t;

? ? ? ? }

?

? ? ? ? //非靜態方法可以訪問靜態方法和非靜態方法

? ? ? ? public int get()

? ? ? ? {

? ? ? ? ? ? getT();

? ? ? ? ? ? getStatic();

? ? ? ? ? ? t=a;//非靜態方法可以訪問非靜態數據成員和靜態數據成員

? ? ? ? ? ? return t;

? ? ? ? }

? ? }

}

?

總結: (1)static修飾的靜態方法會隨著類的定義而被分配和裝載入內存中,編譯器只為整個類創建了一個靜態變量的副本,也就是只分配一個內存空間,雖然可能有多個實例,但這些實例共享該內存,特別值得注意的是,任何一個對象對靜態數據成員的修改,都會影響其它對象。 (2)靜態不能引用非靜態這一特性,是由于靜態的會隨著類的定義而被分配和裝載入內存中這一關鍵點決定的;如果靜態引用了非靜態的,根本無法從內存中找到非靜態的代碼段,勢必會出錯,這種做法是Java虛擬機決不允許的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540305.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540305.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540305.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[轉載] 向集合中添加自定義類型--建議在自定義類型的時候要重寫equals方法

參考鏈接: Java重寫equals方法 package com.bjpowernode.t01list; import java.util.ArrayList; /* * 向集合中添加自定義類型 */public class TestList04 { public static void main(String[] args) { ArrayList list new ArrayList(); Student s1 new Stude…

[轉載] java重寫toString()方法

參考鏈接: 在Java中重寫toString() 前言: 在你興高采烈的寫完一個類,創建測試類時,創建對象,傳入參數,調用對象,以為會得到參數值,但突然發現輸出的是“ 類名什么東東?&…

haproxy+keepalived實現負載均衡及高可用

HAProxy是一個使用C語言編寫的自由及開放源代碼軟件,其提供高性能性、負載均衡,以及基于TCP和HTTP的應用程序代理。相較與 Nginx,HAProxy 更專注與反向代理,因此它可以支持更多的選項,更精細的控制,更多的健…

[轉載] Java中變量與常量

參考鏈接: Java中的實例變量隱藏 1、變量的定義:定義變量就是要告訴編譯器這個變量的數據類型,這樣編譯器才知道需要分配多少空間給它,以及它能存放什么樣的數據。在程序運行過程中空間的值是變化的,這個內存空間就成…

Linux-實用快捷鍵操作

博文說明【前言】: 本文將通過個人口吻介紹Linux下一些常用的實用快捷鍵,在目前時間點【2017年6月14號】下,所掌握的技術水平有限,可能會存在不少知識理解不夠深入或全面,望大家指出問題共同交流,在后續工作…

iOS技術博客:App備案指南

📝 摘要 本文介紹了移動應用程序(App)備案的重要性和流程。備案是規范App開發和運營的必要手段,有助于保護用戶權益、維護網絡安全和社會秩序。為了幫助開發者更好地了解備案流程,本文提供了一份最新、最全、最詳的備…

[轉載] Java中靜態成員變量,靜態代碼塊,靜態內部類何時被初始化?

參考鏈接: Java中的初始化程序塊Initializer Block 關于這個問題,本文不扯理論,直接上代碼,通過結果來驗證結論,廢話少說,測試代碼如下: public class StaticTest { public static StaticMem…

mikrotik dhcp server

操作路徑: /ip dhcp-server 關聯操作: /ip pool屬性 述 dhcp server interface (名稱) – 選擇 DHCP 服務的網絡接口 dhcp address space (IP 地址/掩碼; 默認: 192.168.0.0/24) – DHCP 服務器將出租給客戶端的網絡地 址段 gateway (IP 地址; 默認: 0.0.0.0) – 分配給客戶端的…

[轉載] Java static關鍵字與static{}語句塊

參考鏈接: Java中的靜態塊static block 目錄直通車 一、 類的加載特性與時機 1、 類加載的特性 2、 類加載的時機 二、 static的三個常用 1、 修飾成員變量 2、 修飾成員方法 3、 靜態塊(static{}) 一、 類的加載特性與時機 …

Perl文件讀寫操作

本文轉自 tiger506 51CTO博客,原文鏈接:http://blog.51cto.com/tiger506/830771,如需轉載請自行聯系原作者

[轉載] Java 語言中的實例初始化塊 ( IIB) 詳解

參考鏈接: Java中的實例初始化塊(IIB) 在 Java 語言中的類初始化塊 文章中我們簡單的介紹了下 Java 中的實例初始化塊 ( IIB )。不過我覺得介紹的有點簡單了,于是,再寫一篇文章詳細介紹下吧。 Java 語言中,存在三種操作&#x…

不用正則表達式,用javascript從零寫一個模板引擎(一)

前言 模板引擎的作用就是將模板渲染成html,html render(template,data),常見的js模板引擎有Pug,Nunjucks,Mustache等。網上一些制作模板引擎的文章大部分是用正則表達式做一些hack工作,看完能收獲的東西很少。本文將使用編譯原理那套理論來打…

[轉載] Java靜態綁定與動態綁定

參考鏈接: Java中的靜態綁定與動態綁定 程序綁定的概念: 綁定指的是一個方法的調用與方法所在的類(方法主體)關聯起來。對java來說,綁定分為靜態綁定和動態綁定;或者叫做前期綁定和后期綁定. 靜態綁定: 在程序執行前方…

關于批量插入數據之我見(100萬級別的數據,mysql)

2019獨角獸企業重金招聘Python工程師標準>>> 因前段時間去面試,問到如何高效向數據庫插入10萬條記錄,之前沒處理過類似問題,也沒看過相關資料,結果沒答上來,今天就查了些資料,總結出三種方法&am…

各個OS關于查看磁盤和wwn號的方法

1,HP-UX幾個命令1)查看型號,和uname -a差不多model2)查看光纖卡信息ioscan -funC fc3) 查看掃描出的磁盤信息ioscan -fucC disk4)查看磁盤及其對應的路徑ioscan -m dsf5) 查看劃分過來的lunioscan -m lun6) 查看磁盤大小diskinfo …

[轉載] Java是不是面向對象的程序

參考鏈接: 為什么Java不是純粹的面向對象語言 轉載自:https://blog.csdn.net/a21700790yan/article/details/80129053 Java——是否確實的 “純面向對象”?讓我們深入到Java的世界,試圖來證實它。 在我剛開始學習 Java 的前面幾…

極速理解設計模式系列:6.適配器模式(Adapter Pattern)

四個角色:目標抽象類角色(Target)、目標對象角色(Adapter)、源對象角色(Adaptee)、客戶端角色(Client) 目標抽象類角色(Target):定義需要實現的目標接口 目標對象角色(Adapter):調用另外一個源對象,并且轉換…

[轉載] Java之繼承

參考鏈接: Java多重繼承 Java之繼承 繼承是面向對象程序的一個基本特征,通過繼承可以實現父子關系,以及代碼的復用。通過繼承實現的類稱為子類,被繼承的類稱為父類,所有直接或間接被繼承的類都稱為父類。 Java類體…

Spark(二): 內存管理

2019獨角獸企業重金招聘Python工程師標準>>> Spark 作為一個以擅長內存計算為優勢的計算引擎,內存管理方案是其非常重要的模塊; Spark的內存可以大體歸為兩類:execution和storage,前者包括shuffles、joins、sorts和agg…

[轉載] 手把手教你整合最優雅SSM框架:SpringMVC + Spring + MyBatis

參考鏈接: Java繼承類的對象創建 本文發表于2016年6月,寫于作者學生時期。文中使用到的技術和框架可能不是當下最佳實踐,甚至很不“優雅”。但對于剛接觸JavaEE和Spring的同學來說,還是能有很多收獲的,大牛輕拍 我們…