91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

靜態(tài)方法不能調(diào)用非靜態(tài)方法和變量的原因

汽車(chē)玩家 ? 來(lái)源:今日頭條 ? 作者:Java的架構(gòu)師技術(shù) ? 2020-04-12 19:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這個(gè)可能很多人之前學(xué)習(xí)jvm的時(shí)候都會(huì)遇到,屬于一個(gè)小問(wèn)題,寫(xiě)這篇文章的原因是我在看java相關(guān)的面試題目中遇到的,因此順手總結(jié)一下:

一、例子

我們先看效果:

靜態(tài)方法不能調(diào)用非靜態(tài)方法和變量的原因

我們?cè)陟o態(tài)方法main中調(diào)用非靜態(tài)變量或者是方法都會(huì)報(bào)錯(cuò)。我們反過(guò)來(lái)看看:

靜態(tài)方法不能調(diào)用非靜態(tài)方法和變量的原因

反過(guò)來(lái)沒(méi)有一點(diǎn)問(wèn)題,接下來(lái)我們解釋一下原因:

二、原因解釋

我們需要首先知道的是靜態(tài)方法和靜態(tài)變量是屬于某一個(gè)類(lèi),而不屬于類(lèi)的對(duì)象。我們不直接講原因,先從jvm說(shuō)起:

靜態(tài)方法不能調(diào)用非靜態(tài)方法和變量的原因

這是一張類(lèi)加載的生命周期圖。

1、加載

”加載“是”類(lèi)加機(jī)制”的第一個(gè)過(guò)程,在加載階段,虛擬機(jī)主要完成三件事:

(1)通過(guò)一個(gè)類(lèi)的全限定名來(lái)獲取其定義的二進(jìn)制字節(jié)流

(2)將這個(gè)字節(jié)流所代表的的靜態(tài)存儲(chǔ)結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)

(3)在堆中生成一個(gè)代表這個(gè)類(lèi)的Class對(duì)象,作為方法區(qū)中這些數(shù)據(jù)的訪(fǎng)問(wèn)入口。

注意此時(shí)會(huì)掃描到我們的代碼中是否有靜態(tài)變量或者是靜態(tài)方法等等這些靜態(tài)數(shù)據(jù)結(jié)構(gòu),還未分配內(nèi)存。

2、驗(yàn)證

驗(yàn)證的主要作用就是確保被加載的類(lèi)的正確性。

3、準(zhǔn)備

準(zhǔn)備階段主要為類(lèi)變量分配內(nèi)存并設(shè)置初始值。這些內(nèi)存都在方法區(qū)分配。注意此時(shí)就會(huì)為我們的類(lèi)變量也就是靜態(tài)變量分配內(nèi)存,但是普通成員變量還沒(méi)。

4、解析

解析階段主要是虛擬機(jī)將常量池中的符號(hào)引用轉(zhuǎn)化為直接引用的過(guò)程。

5、初始化

這是類(lèi)加載機(jī)制的最后一步,在這個(gè)階段,java程序代碼才開(kāi)始真正執(zhí)行。我們知道,在準(zhǔn)備階段已經(jīng)為類(lèi)變量賦過(guò)一次值。在初始化階端,程序員可以根據(jù)自己的需求來(lái)賦值了。初始化時(shí)候才會(huì)為我們的普通成員變量賦值。

寫(xiě)到這答案已經(jīng)出來(lái)了,靜態(tài)方法是屬于類(lèi)的,動(dòng)態(tài)方法屬于實(shí)例對(duì)象,在類(lèi)加載的時(shí)候就會(huì)分配內(nèi)存,可以 通過(guò)類(lèi)名直接去訪(fǎng)問(wèn),非靜態(tài)成員(變量和方法)屬于類(lèi)的對(duì)象,所以只有該對(duì)象初始化之后才存在,然后通過(guò)類(lèi)的對(duì)象去訪(fǎng)問(wèn)。

也就是說(shuō)如果我們?cè)陟o態(tài)方法中調(diào)用非靜態(tài)成員變量會(huì)超前,可能會(huì)調(diào)用了一個(gè)還未初始化的變量。因此編譯器會(huì)報(bào)錯(cuò)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    3002

    瀏覽量

    116487
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    616

    瀏覽量

    29513
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    變頻器的靜態(tài)調(diào)試步驟

    變頻器的“靜態(tài)調(diào)試”通常有兩種理解:一種是指電機(jī) 不旋轉(zhuǎn) 的情況下,讓變頻器自動(dòng)測(cè)量電機(jī)電氣參數(shù)的 “靜態(tài)自學(xué)習(xí)” (或靜態(tài)辨識(shí));另一種更廣泛的含義是指變頻器在 帶電機(jī)但不帶負(fù)載 的情況下,進(jìn)行
    的頭像 發(fā)表于 03-11 07:36 ?253次閱讀
    變頻器的<b class='flag-5'>靜態(tài)</b>調(diào)試步驟

    2.7VIN,5VOUT,300KHz,電荷泵升壓芯片,XZ3121 靜態(tài)電流:400uA#RTT設(shè)計(jì)大賽

    靜態(tài)電流
    jf_56831014
    發(fā)布于 :2026年01月16日 09:49:56

    用戶(hù)對(duì)變量或寄存器進(jìn)行位操作的方法

    個(gè)嵌入式的家伙粘實(shí)際硬件的邊。 3:用 #defines 和 bit masks 操作。這是一個(gè)有極高可移植性的方法,是應(yīng)該被用到的方法。最佳的解決方案如下: #define BIT3
    發(fā)表于 12-23 08:16

    關(guān)于晶振的靜態(tài)電容與動(dòng)態(tài)電容

    靜態(tài)電容與動(dòng)態(tài)電容 C0與C1 的區(qū)別是什么呢?
    的頭像 發(fā)表于 11-21 15:38 ?4393次閱讀
    關(guān)于晶振的<b class='flag-5'>靜態(tài)</b>電容與動(dòng)態(tài)電容

    常用變量的介紹

    extern:用在全局變量上表示該變量在其他文件中已經(jīng)定義;用在函數(shù)上作用同全局變量; static:用在全局變量上,和
    發(fā)表于 11-21 07:05

    求助,靜態(tài)電流測(cè)試,穩(wěn)態(tài)測(cè)試怎么做

    我是一名剛?cè)肼毜膶?shí)習(xí)生,我的嵌入式這一塊的知識(shí)很欠缺,但是交給我的任務(wù)就是做一塊DEMO板的靜態(tài)電流測(cè)試和穩(wěn)態(tài)測(cè)試,我目前有的工具如圖所示,請(qǐng)求各位大佬教給我具體方法(最好是能有操作步驟)和思路,多謝各位了
    發(fā)表于 11-12 15:46

    飛凌嵌入式ElfBoard-Vim編輯器之靜態(tài)鏈接和動(dòng)態(tài)鏈接

    文件,一般是以.so文件形式存在。GCC默認(rèn)是動(dòng)態(tài)鏈接不需要加參數(shù)。舉例子看一下動(dòng)態(tài)鏈接庫(kù)的使用方法,創(chuàng)建三個(gè)C語(yǔ)言文件:mymath.c、mymath.h、test.c。通過(guò)兩個(gè)變量相加的方式來(lái)
    發(fā)表于 10-17 09:07

    請(qǐng)問(wèn)RT-Thread Studio可以編譯靜態(tài)庫(kù)(*.a)嗎?

    可以在RT-Thread Studio中創(chuàng)建生成靜態(tài)庫(kù)(*.a)的工程嗎?若不能可以用什么方式編譯靜態(tài)庫(kù)嗎?
    發(fā)表于 09-17 06:00

    如何正確選購(gòu)功率半導(dǎo)體器件靜態(tài)參數(shù)測(cè)試機(jī)?

    主要的功率半導(dǎo)體器件特性分為靜態(tài)特性、動(dòng)態(tài)特性、開(kāi)關(guān)特性。這些測(cè)試中最基本的測(cè)試就是靜態(tài)參數(shù)測(cè)試。靜態(tài)參數(shù)主要是指本身固有的,與其工作條件無(wú)關(guān)的相關(guān)參數(shù)。主要包括:柵極開(kāi)啟電壓、柵極擊穿電壓、源極漏
    的頭像 發(fā)表于 08-05 16:06 ?820次閱讀
    如何正確選購(gòu)功率半導(dǎo)體器件<b class='flag-5'>靜態(tài)</b>參數(shù)測(cè)試機(jī)?

    IR302靜態(tài)路由配置上不生效是什么原因?需要怎么處理?

    IR302靜態(tài)路由配置上不生效是什么原因?需要怎么處理?
    發(fā)表于 08-05 06:20

    動(dòng)態(tài)BGP與靜態(tài)BGP的區(qū)別?

    BGP(邊界網(wǎng)關(guān)協(xié)議,Border Gateway Protocol) 是互聯(lián)網(wǎng)中用于自治系統(tǒng)(AS)之間路由信息交換的核心協(xié)議。在實(shí)際部署中,BGP 可分為靜態(tài) BGP和動(dòng)態(tài) BGP兩種方式,二者
    發(fā)表于 06-24 06:57

    詳解ADC電路的靜態(tài)仿真和動(dòng)態(tài)仿真

    ADC電路主要存在靜態(tài)仿真和動(dòng)態(tài)仿真兩類(lèi)仿真,針對(duì)兩種不同的仿真,我們存在不同的輸入信號(hào)和不同的數(shù)據(jù)采樣,因此靜態(tài)仿真和動(dòng)態(tài)仿真是完全不同的兩個(gè)概念,所以設(shè)置的參數(shù)不同。
    的頭像 發(fā)表于 06-05 10:19 ?2023次閱讀
    詳解ADC電路的<b class='flag-5'>靜態(tài)</b>仿真和動(dòng)態(tài)仿真

    參考cycx3_uvc_ov5640例程,想進(jìn)行按鍵觸發(fā)拍照,使用方法一,請(qǐng)問(wèn)怎么實(shí)現(xiàn)的?

    [] = #ifdef STILL_CAPTURE_ENABLE 0x02, /* 支持方法 2 靜態(tài)圖像捕獲方法 *//ZHN 02-&gt;01 不能改 1 改完 US
    發(fā)表于 05-21 07:24

    研發(fā)排查問(wèn)題的利器:一款方法調(diào)用棧跟蹤工具

    作者:京東物流 郭忠強(qiáng) 導(dǎo)語(yǔ) 本文從日常值班問(wèn)題排查痛點(diǎn)出發(fā),分析方法復(fù)用的調(diào)用鏈路和上下文業(yè)務(wù)邏輯,通過(guò)思考分析,借助棧幀開(kāi)發(fā)了一個(gè)方法調(diào)用棧的鏈?zhǔn)礁櫣ぞ撸阌谡故疽淮握?qǐng)求的
    的頭像 發(fā)表于 05-06 17:24 ?3180次閱讀
    研發(fā)排查問(wèn)題的利器:一款<b class='flag-5'>方法</b><b class='flag-5'>調(diào)用</b>棧跟蹤工具

    DA9233高效、超低靜態(tài)電流降壓穩(wěn)壓器和超低靜態(tài)電流 LDO數(shù)據(jù)手冊(cè)

    DA9233 是一款高效、超低靜態(tài)電流降壓穩(wěn)壓器和超低靜態(tài)電流 LDO,采用緊湊型 I2C 可配置 WLCSP 封裝。降壓穩(wěn)壓器還具有超低輸出紋波(10mV)。 該器件適用于需要低紋波和高效電源
    的頭像 發(fā)表于 04-08 18:07 ?820次閱讀
    DA9233高效、超低<b class='flag-5'>靜態(tài)</b>電流降壓穩(wěn)壓器和超低<b class='flag-5'>靜態(tài)</b>電流 LDO數(shù)據(jù)手冊(cè)