色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

靜態方法不能調用非靜態方法和變量的原因

汽車玩家 ? 來源:今日頭條 ? 作者:Java的架構師技術 ? 2020-04-12 19:36 ? 次閱讀

這個可能很多人之前學習jvm的時候都會遇到,屬于一個小問題,寫這篇文章的原因是我在看java相關的面試題目中遇到的,因此順手總結一下:

一、例子

我們先看效果:

靜態方法不能調用非靜態方法和變量的原因

我們在靜態方法main中調用非靜態變量或者是方法都會報錯。我們反過來看看:

靜態方法不能調用非靜態方法和變量的原因

反過來沒有一點問題,接下來我們解釋一下原因:

二、原因解釋

我們需要首先知道的是靜態方法和靜態變量是屬于某一個類,而不屬于類的對象。我們不直接講原因,先從jvm說起:

靜態方法不能調用非靜態方法和變量的原因

這是一張類加載的生命周期圖。

1、加載

”加載“是”類加機制”的第一個過程,在加載階段,虛擬機主要完成三件事:

(1)通過一個類的全限定名來獲取其定義的二進制字節流

(2)將這個字節流所代表的的靜態存儲結構轉化為方法區的運行時數據結構

(3)在堆中生成一個代表這個類的Class對象,作為方法區中這些數據的訪問入口。

注意此時會掃描到我們的代碼中是否有靜態變量或者是靜態方法等等這些靜態數據結構,還未分配內存。

2、驗證

驗證的主要作用就是確保被加載的類的正確性。

3、準備

準備階段主要為類變量分配內存并設置初始值。這些內存都在方法區分配。注意此時就會為我們的類變量也就是靜態變量分配內存,但是普通成員變量還沒。

4、解析

解析階段主要是虛擬機將常量池中的符號引用轉化為直接引用的過程。

5、初始化

這是類加載機制的最后一步,在這個階段,java程序代碼才開始真正執行。我們知道,在準備階段已經為類變量賦過一次值。在初始化階端,程序員可以根據自己的需求來賦值了。初始化時候才會為我們的普通成員變量賦值。

寫到這答案已經出來了,靜態方法是屬于類的,動態方法屬于實例對象,在類加載的時候就會分配內存,可以 通過類名直接去訪問,非靜態成員(變量和方法)屬于類的對象,所以只有該對象初始化之后才存在,然后通過類的對象去訪問。

也就是說如果我們在靜態方法中調用非靜態成員變量會超前,可能會調用了一個還未初始化的變量。因此編譯器會報錯。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2970

    瀏覽量

    104838
  • 變量
    +關注

    關注

    0

    文章

    613

    瀏覽量

    28402
收藏 人收藏

    評論

    相關推薦

    Linux環境變量配置方法

    Linux上環境變量配置分為設置永久變量和臨時變量兩種。環境變量設置方法同時要考慮環境Shell類型,不同類型的SHELL設置臨時
    的頭像 發表于 10-23 13:39 ?183次閱讀

    TPA3116靜態功耗靜態電流比較大是什么原因導致的?

    關于TPA3116靜態功耗大,在TI的論壇里面發現幾乎所有的電感發熱都是說是因為輸出LC電路導致 1,想問一下這個靜態功耗靜態電流比較大是什么原因導致的? 2,除了LC電路會導致,
    發表于 10-12 08:35

    一種半動態環境中的定位方法

    靜態環境中進行地圖繪制和定位是機器人學的基本問題。之前的方法大多關注靜態和高度動態的物體,但在半動態環境中,如果不考慮低動態物體(如停放的汽車和行人),可能會導致定位失敗。我們提出
    的頭像 發表于 09-30 14:40 ?278次閱讀
    一種半動態環境中的定位<b class='flag-5'>方法</b>

    手機靜態獨享ip搭建方法,是如何操作的?

    手機靜態獨享IP的搭建主要涉及到選擇一個可靠的代理服務提供商,并從該服務商處獲取靜態獨享IP地址及其配置信息,然后在手機上進行相應的網絡設置。
    的頭像 發表于 09-13 09:41 ?441次閱讀
    手機<b class='flag-5'>靜態</b>獨享ip搭建<b class='flag-5'>方法</b>,是如何操作的?

    嵌入式學習-靜態鏈接和動態鏈接

    目標文件,一般是以.so文件形式存在。GCC默認是動態鏈接不需要加參數。舉例子看一下動態鏈接庫的使用方法,創建三個C語言文件:mymath.c、mymath.h、test.c。 通過兩個變量相加的方式來
    發表于 08-28 09:33

    靜態鏈接和動態鏈接

    目標文件,一般是以.so文件形式存在。GCC默認是動態鏈接不需要加參數。舉例子看一下動態鏈接庫的使用方法,創建三個C語言文件:mymath.c、mymath.h、test.c。 通過兩個變量相加的方式來
    發表于 08-27 10:20

    放大電路靜態工作點不穩定的原因

    以下是關于放大電路靜態工作點不穩定原因的分析: 引言 放大電路是電子系統中的關鍵組成部分,其主要功能是接收輸入信號并將其轉換為更大的電流或電壓信號。然而,放大電路的靜態工作點(Q點)穩定性對于電路
    的頭像 發表于 08-06 15:36 ?1456次閱讀

    請問靜態變量如何放到flash中?

    比如有有很多的靜態變量,如何防到flash中。 我用了const修飾,編譯出來,但是還是在rodate段,該段不是在80k的ram中嗎?
    發表于 07-12 09:26

    靜態庫中定義的INIT_DEVICE_EXPORT函數并沒有被系統調用,為什么?

    1,將一段代碼編譯成靜態庫 2,主工程鏈接這個靜態庫 3,靜態庫里的函數并沒有被主工程調用 4,靜態庫中定義了一些 INIT_DEVICE_
    發表于 07-04 06:49

    請問ESP-IDF v4.1怎么生成靜態庫和調用靜態庫?

    ESP-IDF v4.1怎么生成靜態庫和調用靜態
    發表于 06-24 09:00

    如何設置靜態IP代理

    靜態IP
    jf_60146132
    發布于 :2024年04月29日 07:46:31

    關于go中接口類型的表示方法

    go是一個靜態性語言,每個變量都有靜態的類型,因此每個變量在編譯階段中有明確的變量類型,比如像:int、float32、MyType。
    的頭像 發表于 04-28 10:13 ?378次閱讀

    使用Tasking編譯器生成的map文件中找不到靜態全局變量的地址怎么解決 ?

    使用Tasking編譯器生成的map文件中找不到靜態全局變量的地址(變量在函數中已經使用),請問怎么解決
    發表于 02-06 07:21

    常用的變頻器檢測方法靜態測試和動態測試

    常用的變頻器檢測方法靜態測試和動態測試? 變頻器是一種電力調節裝置,可以實現對電動機的調速和節能。在使用變頻器時,經常需要對其進行檢測,以確保其正常工作。常用的變頻器檢測方法主要包括靜態
    的頭像 發表于 02-01 15:47 ?4734次閱讀

    dataflash中的靜態變量值初始化會變嗎,怎么改變變量的值?

    dataflash中的靜態變量值初始化會變嗎,怎么改變變量的值? 若系統啟動初始化時,不改變變量的值該怎么設變量
    發表于 01-15 06:27
    主站蜘蛛池模板: 亚洲精品第五页中文字幕| 内地同志男16china16| 又黄又爽又无遮挡在线观看免费| 欧美怡红院视频一区二区三区 | 亲胸吻胸添奶头GIF动态图免费| 解开白丝老师的短裙猛烈进入 | 亚洲欧美中文日韩v在线| 丝袜美腿美女被狂躁在线观看| 蜜芽最新域名解析网站| 精品无码一区二区三区不卡| 国产精品亚洲高清一区二区 | 挺弄抽插喷射HH| 日韩中文无线码在线视频| 欧美日韩一区不卡在线观看| 男男肉肉互插腐文| 麻豆高潮AV久久久久久久| 久久99这里只有精品| 韩国黄电影| 好看AV中文字幕在线观看| 久久精麻豆亚洲AV国产品| 极品美女穴| 嫩草国产精品99国产精品| 肉色无边(高h)| 骚妇BB双飞插| 亚洲爱视频| 亚洲精品久久一区二区三区四区 | 九九热在线观看| 男男h开荤粗肉h文1v1| 色欲AV亚洲情无码AV蜜桃| 日韩精品在线看| 亚洲AV无码一区二区三区乱子伦| 又亲又揉摸下面视频免费看| xxxx88| 厨房玩朋友娇妻中文字幕| 成3d漫二区三区四区| 成人免费在线观看视频| 国产 精品 亚洲 欧美 高清| 国产成人v视频在线观看| 国产成人小视频| 久久国产乱子伦精品免费M| 日本精品久久久久中文字幕2|