Java靜態(tài)變量和靜態(tài)方法 同一個(gè)類中靜態(tài)方法為什么不能調(diào)用實(shí)例變量?
同一個(gè)類中靜態(tài)方法為什么不能調(diào)用實(shí)例變量?不行,因?yàn)閖ava中靜態(tài)的東西是類級別的,也就是說用類名就可訪問,也可以用任何對象名訪問,無論以哪種形式訪問的都是同一個(gè)東西。而一般我們所說的成員變量,是指對
同一個(gè)類中靜態(tài)方法為什么不能調(diào)用實(shí)例變量?
不行,因?yàn)閖ava中靜態(tài)的東西是類級別的,也就是說用類名就可訪問,也可以用任何對象名訪問,無論以哪種形式訪問的都是同一個(gè)東西。而一般我們所說的成員變量,是指對象級別的,也就是說每一個(gè)對象所擁有的成員變量都是獨(dú)立的不同的變量,是屬于對象自己擁有的。相對于來說訪問范圍,無疑是靜態(tài)的更大,靜態(tài)的可以被任何對象所訪問且是同一個(gè),而成員變量是每個(gè)對象各自擁有的。那么,為什么“靜態(tài)方法不能調(diào)用類成員變量”,因?yàn)橐朐L問成員變量你必須有個(gè)“已經(jīng)實(shí)例化好的對象”,除非你在靜態(tài)方法里創(chuàng)建一個(gè)當(dāng)前類的實(shí)例對象,否則你是無法直接調(diào)用成員變量的,因?yàn)樗恢肋@個(gè)成員變量屬于哪個(gè)實(shí)例對象的。而在成員方法里,所有屬于成員的變量、方法已經(jīng)可以確定是同一個(gè)對象的,并且可以用this表示當(dāng)前對象。
靜態(tài)方法可以直接調(diào)用實(shí)例方法么?
packagecom.text_3//靜態(tài)方法不能直接調(diào)用實(shí)例方法和變量,但可以間接調(diào)用(即在靜態(tài)方法中創(chuàng)建類的實(shí)例,然后調(diào)用)classDemo_12{publicstaticvoidmain(String[]args){Circlec=newCircle()Demo_12d=newDemo_12()method1()//此處報(bào)錯(cuò),靜態(tài)方法不能直接調(diào)用非靜態(tài)方法d.method1()//間接調(diào)用,無錯(cuò)c.setRadius(5.0)//間接調(diào)用,無錯(cuò)}publicvoidmethod1(){method2()}publicstaticvoidmethod2(){Circlec=newCircle()System.out.println("whatisradius" c.getRadius())}}classCircle{privatedoubleradiuspublicdoublegetRadius(){returnradius}publicvoidsetRadius(doubleradius){this.radius=radius}}
為什么訪問靜態(tài)方法和靜態(tài)變量不需要實(shí)例化?
靜態(tài)變量 在java也叫類變量從名字可以看出它是屬于某個(gè)類的而不是類的實(shí)例。它的關(guān)鍵字是static存儲在靜態(tài)存儲區(qū),當(dāng)程序執(zhí)行,類的代碼被加載到內(nèi)存,類的靜態(tài)變量就分配了內(nèi)存空間,他是屬于類的也就是沒個(gè)實(shí)例對象都是對于以個(gè)靜態(tài)變量,靜態(tài)變量的內(nèi)存空間知道程序退出才釋放所占用的內(nèi)存空間。靜態(tài)變量直接通過類名訪問(java 也能通過對象名訪問)。 有人會分全局的靜態(tài)變量、局部的靜態(tài)變量;全局靜態(tài)變量失去了“全局”的普遍含義,它的作用域限定在本文件里。而靜態(tài)變量的聲明是應(yīng)該出現(xiàn)在類里不是類的函數(shù)里。