詳談Java靜態(tài)動(dòng)態(tài)的問(wèn)題
Cannot make a static reference to the non-static field
靜態(tài)方法中不能引用非靜態(tài)成員變量及方法
class A {
private int a = 1;
public sttaic void main(String[] args){
System.out.println(a);
}
}
因?yàn)閷?shí)例變量應(yīng)該是具體對(duì)象的狀態(tài),應(yīng)該先A a = new A();然后System.out.println(a,a);
或者將變量改為static
No enclosing instance of type EventApp4 is accessible. Must qualify the allocation with an enclosing instance of type EventApp4 (e.g. x.new A() where x is an instance of EventApp4).
原因:內(nèi)部類(lèi)沒(méi)有用static限定,所以是動(dòng)態(tài)的,而我在main函數(shù)中new了這個(gè)內(nèi)部類(lèi)。為什么這樣就出現(xiàn)問(wèn)題了呢,因?yàn)殪o態(tài)的方法以及變量在類(lèi)加載之時(shí)就已經(jīng)進(jìn)入內(nèi)存了,但是非靜態(tài)的方法和變量只能在實(shí)例化之后才會(huì)進(jìn)入內(nèi)存,所以在靜態(tài)方法中new非靜態(tài)的內(nèi)部類(lèi)就會(huì)出錯(cuò),因?yàn)榇藭r(shí)這個(gè)內(nèi)部類(lèi)還不存在呢。反之,在動(dòng)態(tài)方法中new靜態(tài)方法是不會(huì)出現(xiàn)錯(cuò)誤的,原因同樣,靜態(tài)的在非靜態(tài)的之前就已經(jīng)存在了。
從java的內(nèi)存機(jī)制去分析,首先當(dāng)你New 一個(gè)對(duì)象的時(shí)候,并不是先在堆中為對(duì)象開(kāi)辟內(nèi)存空間,而是先將類(lèi)中的靜態(tài)方法(帶有static修飾的靜態(tài)函數(shù))的代碼加載到一個(gè)叫做方法區(qū)的地方,然后再在堆內(nèi)存中創(chuàng)建對(duì)象。所以說(shuō)靜態(tài)方法會(huì)隨著類(lèi)的加載而被加載。當(dāng)你new一個(gè)對(duì)象時(shí),該對(duì)象存在于對(duì)內(nèi)存中,this關(guān)鍵字一般指該對(duì)象,但是如果沒(méi)有new對(duì)象,而是通過(guò)類(lèi)名調(diào)用該類(lèi)的靜態(tài)方法也可以。
遇到遇上問(wèn)題時(shí),有以下原則
1.在main中,使用靜態(tài)方法靜態(tài)變量靜態(tài)類(lèi),即將變量、方法都限定為static
2.在main中,實(shí)例化本類(lèi)或其他類(lèi)(要使用的類(lèi))
3.將main中的語(yǔ)句放進(jìn)構(gòu)造函數(shù)中,在main中實(shí)例化本類(lèi),因?yàn)闃?gòu)造函數(shù)中可以使用本類(lèi)的引用this
以上這篇詳談Java靜態(tài)動(dòng)態(tài)的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Java中的動(dòng)態(tài)和靜態(tài)編譯實(shí)例詳解
- Java靜態(tài)代理和動(dòng)態(tài)代理總結(jié)
- Java 靜態(tài)綁定與動(dòng)態(tài)綁定深入分析
- Java反射之靜態(tài)加載和動(dòng)態(tài)加載的簡(jiǎn)單實(shí)例
- java 反射 動(dòng)態(tài)調(diào)用不同類(lèi)的靜態(tài)方法(推薦)
- 理解Java中的靜態(tài)綁定和動(dòng)態(tài)綁定
- Java中的靜態(tài)綁定和動(dòng)態(tài)綁定詳細(xì)介紹
- 使用java將動(dòng)態(tài)網(wǎng)頁(yè)生成靜態(tài)網(wǎng)頁(yè)示例
- 深入解析java中的靜態(tài)代理與動(dòng)態(tài)代理
- java 靜態(tài)代理 動(dòng)態(tài)代理深入學(xué)習(xí)
相關(guān)文章
SpringBoot整合SSO(single sign on)單點(diǎn)登錄
這篇文章主要介紹了SpringBoot整合SSO(single sign on)單點(diǎn)登錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
springboot實(shí)現(xiàn)jar運(yùn)行復(fù)制resources文件到指定的目錄(思路詳解)
這篇文章主要介紹了springboot實(shí)現(xiàn)jar運(yùn)行復(fù)制resources文件到指定的目錄,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
Maven統(tǒng)一版本管理的實(shí)現(xiàn)
在使用Maven多模塊結(jié)構(gòu)工程時(shí),配置版本是一個(gè)比較頭疼的事,本文主要介紹了Maven統(tǒng)一版本管理的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
autoMapping和autoMappingBehavior的區(qū)別及說(shuō)明
這篇文章主要介紹了autoMapping和autoMappingBehavior的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Java實(shí)現(xiàn)Http工具類(lèi)的封裝操作示例
這篇文章主要介紹了Java實(shí)現(xiàn)Http工具類(lèi)的封裝操作,涉及java針對(duì)http請(qǐng)求與響應(yīng)、遠(yuǎn)程交互與字符串拼接等操作封裝技巧,需要的朋友可以參考下2018-01-01
Java詳解線上內(nèi)存暴漲問(wèn)題定位和解決方案
本篇文章介紹了我在開(kāi)發(fā)過(guò)程中遇到的線上內(nèi)存暴漲的問(wèn)題,以及定位問(wèn)題原因和解決該問(wèn)題的過(guò)程及思路,通讀本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下2021-10-10
Java Fluent Mybatis實(shí)戰(zhàn)之構(gòu)建項(xiàng)目與代碼生成篇下
Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。國(guó)內(nèi)又以Mybatis用的多,基于mybatis上的增強(qiáng)框架,又有mybatis plus和TK mybatis等。今天我們介紹一個(gè)新的mybatis增強(qiáng)框架 fluent mybatis2021-10-10
學(xué)習(xí)Java模擬實(shí)現(xiàn)百度文檔在線瀏覽
這片文章介紹了如何使用Java模擬實(shí)現(xiàn)百度文檔在線瀏覽,文章思路清晰,需要的朋友可以參考下2015-07-07

