java面试题2 牛客:定义类中成员变量时不可能用到的修饰是
懵逼樹上懵逼果,懵逼樹下你和我
第二題
定義類中成員變量時不可能用到的修飾是()
A final B void C protected D static一看到這道題,有點(diǎn)慌了,直接選c,很顯然,我又錯了,難題嘛不應(yīng)該選c嗎
于是我又開始了我的百度生涯
成員變量
???????我們來研究一個事物:
???????????????屬性:外在特征;例如人的身高,體重
???????????????行為:能夠做什么;例如人有說話,打球等行為。
???????而在Java語言中,最基本的單位是類,類就是用來體現(xiàn)事物的。
???????用類class來描述事物也是如此:
???????????????屬性:對應(yīng)類中的成員變量
???????????????行為:對應(yīng)類中的成員函數(shù)
???????定義類其實(shí)就是在定義類中的成員(成員變量和成員函數(shù))
??????拓展:類是一個抽象的概念,而對象就是類的具體的存在,體現(xiàn)。例如:生活中的汽車,可以看做一個類,我們稱之為汽車類,每一臺車都有顏色和輪胎數(shù)(可以定義為屬性,即成員變量),每一臺車都可以跑(即車的行為,對應(yīng)類總的成員函數(shù)),我們把汽車實(shí)例化一下,即會產(chǎn)生一個對象,比如奔馳、寶馬(BMW)。
public class Car {private String color; // 定義汽車顏色,成員變量private int numLuntai; // 定義汽車輪胎數(shù),成員變量public Car(String color, int numLuntai){super();this.color = color;this.numLuntai = numLuntai;}public void run() {System.out.println(this.numLuntai+ "個輪子的" +this.color + "轎車在馬路上行駛著");} }public class ClassTest {public static void main(String[] args){Car bmw = new Car("黑色", 4); // 創(chuàng)建一個轎車對象,名字為bmwbmw.run();} }其中color和numLuntai就稱為Car 類的成員變量,這個屬性能夠用來描述一個類的屬性,否則,它就應(yīng)該定義為局部變量。
例如一個for循環(huán)中的i即是局部變量。
for(int i = 0; i < args.length; i++){......}又例如寫在成員方法中變量是局部變量。
publicclass Car {private String color; // 定義汽車顏色,成員變量private int numLuntai; // 定義汽車輪胎數(shù),成員變量public Car(String color, int numLuntai){super();this.color = color;this.numLuntai = numLuntai;} public void run() {String carName=”寶馬牌”; //這個就是局部變量System.out.println(this.numLuntai+ "個輪子的" +this.color + carName+"轎車在馬路上行駛著");} } publicclass ClassTest {public static void main(String[] args){Car bmw = new Car("黑色", 4); // 創(chuàng)建一個轎車對象,名字為bmwbmw.run();} }成員變量和局部變量的區(qū)別
???????成員變量:
??????????①成員變量定義在類中,在整個類中都可以被訪問。
??????????②成員變量隨著對象的建立而建立,隨著對象的消失而消失,存在于對象所在的堆內(nèi)存中。
??????????③成員變量有默認(rèn)初始化值。
??????局部變量:
??????????①局部變量只定義在局部范圍內(nèi),如:函數(shù)內(nèi),語句內(nèi)等,只在所屬的區(qū)域有效。
??????????②局部變量存在于棧內(nèi)存中,作用的范圍結(jié)束,變量空間會自動釋放。
??????????③局部變量沒有默認(rèn)初始化值
?
??????在使用變量時需要遵循的原則為:就近原則
??????首先在局部范圍找,有就使用;接著在成員位置找。
靜態(tài)變量
? ? ? 由static修飾的變量稱為靜態(tài)變量,其實(shí)質(zhì)上就是一個全局變量。如果某個內(nèi)容是被所有對象所共享,那么該內(nèi)容就應(yīng)該用靜態(tài)修飾;沒有被靜態(tài)修飾的內(nèi)容,其實(shí)是屬于對象的特殊描述。
class Person{String name; //成員變量,實(shí)例變量static String country = "CN"; //靜態(tài)變量,類變量,所有對象共享的屬性用static修飾public void show(){System. out.println(country + ":" + name);//等效語句:System.out.println(Person.country+ ":" + this.name);} } class StaticDemo{public static void main(String[]args){Personp = new Person();System. out.println(p.country);//可以用類名直接調(diào)用System. out.println(Person.country);} }成員變量和靜態(tài)變量的區(qū)別
??????1、兩個變量的生命周期不同
????????????成員變量隨著對象的創(chuàng)建而存在,隨著對象被回收而釋放。
????????????靜態(tài)變量隨著類的加載而存在,隨著類的消失而消失。
??????2、調(diào)用方式不同
????????????成員變量只能被對象調(diào)用。
????????????靜態(tài)變量可以被對象調(diào)用,還可以被類名調(diào)用。
??????3、別名不同
????????????成員變量也稱為實(shí)例變量。
????????????靜態(tài)變量也稱為類變量。
??????4、數(shù)據(jù)存儲位置不同
????????????成員變量存儲在堆內(nèi)存的對象中,所以也叫對象的特有數(shù)據(jù)。
????????????靜態(tài)變量數(shù)據(jù)存儲在方法區(qū)(共享數(shù)據(jù)區(qū))的靜態(tài)區(qū),所以也叫對象的共享數(shù)據(jù)。
列表對比:
? ? ? ?成員變量、局部變量、靜態(tài)變量的區(qū)別
| ? | 成員變量 | 局部變量 | 靜態(tài)變量 |
| 定義位置 | 類中,方法外 | 方法中,方法的形式參數(shù) | 類中,方法外 |
| 初始化值 | 有默認(rèn)初始化值 | 無先定義,賦值后才能使用 | 有默認(rèn)初始化值 |
| 調(diào)用方式 | 對象調(diào)用 | ? | 對象調(diào)用,類名調(diào)用 |
| 存儲位置 | 堆 | 棧 | 方法區(qū) |
| 生命周期 | 與對象共存亡 | 與方法共存亡 | 與類共存亡 |
| 別名 | 實(shí)例變量 | ? | 類變量 |
小結(jié):
????????盡管三者的本質(zhì)都是變量,可是使用時卻有相當(dāng)大的區(qū)別,稍不留神就可能陷入陷阱。且先記住:在一個類中,如果一個變量能夠用來描述一個類的屬性,那就定義為成員變量,否則,它就應(yīng)該定義為局部變量。而如果一個變量在全局中都能使用(某個內(nèi)容是被所有對象所共享),那么我們就可以把這個變量用static來修飾,即為靜態(tài)變量。
void修飾方法?? static修飾靜態(tài)變量 protect修飾類 final修飾的是常量
選B
文章僅個人理解,來在各大網(wǎng)站。如有不合理之處,歡迎吐槽。
閱讀目錄(置頂)(長期更新計算機(jī)領(lǐng)域知識)https://blog.csdn.net/weixin_43392489/article/details/102380691
閱讀目錄(置頂)(長期更新計算機(jī)領(lǐng)域知識)https://blog.csdn.net/weixin_43392489/article/details/102380882
閱讀目錄(置頂)(長期科技領(lǐng)域知識)https://blog.csdn.net/weixin_43392489/article/details/102600114
歌謠帶你看java面試題 https://blog.csdn.net/weixin_43392489/article/details/102675944
總結(jié)
以上是生活随笔為你收集整理的java面试题2 牛客:定义类中成员变量时不可能用到的修饰是的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 第十八课 强大的滚动控件
- 下一篇: c语言蛮力法实现背包问题