java填空题 在非静态成员方法中_Java学习(四): 类的使用
1. 類
1.1 類的定義
[修飾符]?class?類名?{????//?零或多個構造器定義...????????//?零或多個Field...????????//?零或多個方法...}- 修飾符: 如public,private及許多其他修飾符
- 類名,并且按慣例首字母要大寫。
- 父類(超類)的名稱,都要在前面加上關鍵字extends。一個類只能繼承自一個父類。
- 被該類實現的接口列表(用逗號進行分隔),在接口前面加上關鍵字implements。一個類可以實現多個接口。
- 類體,用花括號{}包圍。
1.2 定義MyClass類
public?class?MyClass?{????/**????*?@Description:?靜態常量????*/????public?final?static?Double?PI?=?3.1415;????/**?????*?@Description:?名稱(成員變量)?????*/????private?String?name;????/**?????*?@Description:?設置名稱(成員方法)?????*/????public?void?setName(String?name)?{????????this.name?=?name;????}????/**?????*?@description:?獲取名稱(成員方法)?????**/????public?String?getName()?{????????return?this.name;????}????/**?????*?@Description:?無參構造方法?????*/????public?MyClass()?{????????System.out.println("無參構造方法....");????}????public?static?void?staticMethod(){????????System.out.println("這是個靜態方法");????}????/**?????*?@description:有參構造方法?????**/????public?MyClass(String?name)?{????????this.name?=?name;????????System.out.println("有參構造方法....");????}}1.3 調用MyClass類
1.3.1 實例化調用
MyClass?classTest?=?new?MyClass();classTest.setName("小明");String?name?=?classTest.getName();System.out.println(name);/*輸出:無參構造方法....小明*/1.3.2 靜態調用
//調用靜態成員System.out.println(MyClass.PI);//調用靜態方法MyClass.staticMethod();/*輸出:無參構造方法....小明*/雖然靜態成員也可以使用"對象.靜態成員"的形式進行調用,但通常不建議用這樣的形式,因為這樣容易混淆靜態成員和非靜態成員。
- 測試有參構造方法
1.4 類方法分析
[修飾符]?返回類型?方法名稱(方法參數列表){????//?方法體}?- 返回類型: 方法所返回的數據值的數據類型,若方法不返回值,用void
1.4.1 方法重載
Java語言支持“重載”方法,并且Java能夠根據不同的“方法簽名”來區分重載的方法。這意味著在一個類中,可以有相同名稱但具有不同參數列表的方法(當然會有一些限定條件,這將在“接口和繼承”中討論)。
代碼示例
public?class?DrawDate{????//聲明繪制字符串的方法????public?void?draw(String?s){??????????????????//?...????}????//聲明繪制整數的方法????public?void?draw(int?i){????????//?...????}?????//聲明繪制雙精度小數的方法????public?void?draw(double?f){????????//?...????}????//聲明繪制一個整數和一個小數的方法????public?void?draw(int?i?,?double?f){???????????//?...????}}1.4.2 傳遞任意數量的參數
可以使用“可變參數”來傳遞任意數量的值到一個方法。當程序員不知道有多少個特定類型的參數要被傳遞給方法時,使用可變參數。可變參數是手工創建一個數組的簡潔方法。 要使用可變參數,在最后一個參數的類型后面跟上省略號“…”,然后是一個空格,再接著是參數名。具有這種可變參數的方法可以接收任意數量的該類型的參數,包括空參數。例如下面代碼:
public?Polygon?polygonFrom(Point...?corners)?{????//corners參數被當作數組處理,可以調用數組屬性length獲得長度????int?numberOfSides?=?corners.length;????//聲明兩個變量????double?squareOfSide1,?lengthOfSide1;????squareOfSide1?=?(corners[1].x?-?corners[0].x)*(corners[1].x?-?corners[0].x)?+?(corners[1].y?-?corners[0].y)*(corners[1].y?-?corners[0].y)?;????lengthOfSide1?=?Math.sqrt(squareOfSide1);?//調用Math類的靜態方法求平方根????…}可以看出來,在上面這個方法中,corners被當做數組使用。調用這個方法時,既可以使用一個數組,也可以使用一系列的參數。不管使用哪種形式,方法中的代碼都會將參數作為一個數組對待。
1.5 構造器
語法
public?類名稱(方法參數列表){????//?方法體}?- 構造器與類同名
- 每個類可以有一個以上的構造器
- 構造器可以有 0 個、1 個或多個參數
- 構造器沒有返回值
- 構造器總是伴隨著 new 操作一起調用
1.5.1 無參構造器
????/**????*?@description:無參構造器?????**/????public?MyClass()?{????????System.out.println("無參構造器....");????}1.5.2 有參構造器
????/**?????*?@description:有參構造器?????**/????public?MyClass(String?name)?{????????this.name?=?name;????????System.out.println("有參構造器....");????}2. Object類
Object類是Java一個比較特殊的類,Java中所有的類從根本上都繼承自Object類。Object是Java中唯一沒有父類的類。
如果一個類沒有使用extends關鍵字明確標識繼承另外一個類,那么這個類就默認繼承Object類
Object類中常用的方法
3. 內部類
所謂的內部類就是指在一個類的內部又定義了其他類的情況。如果在類Outer的內部再定義一個類Inner,此時類Inner就稱為內部類,而類Outer則稱為外部類。內部類可聲明為public或private。當內部類聲明為public或private時,對其訪問的限制與成員變量和成員方法完全相同。
3.1 定義
權限標示符?class?外部類名稱{????...????????權限標示符?class?內部類名稱?{????????...????}}示例:
//?外部類public?class?Outer{????//?外部類屬性?int?score=95;??//?外部類方法,調用內部類方法?void?inst(){??Inner?in=new?Inner();??in.display();?}?//?內部類?public?class?Inner{??//在內部類中聲明name屬性??String?name="張三";??//?內部類方法??void?display(){???//內部類訪問外部類中的屬性???System.out.println("成績:score="+score);??}?}}//?測試使用public?class?ObjectInnerDemo{?public?static?void?main(String[]args){??Outer?outer=new?Outer();??outer.inst();?//輸出:成績:score=95?}}3.2 內部類主要作用
- 內部類提供了更好的封裝,可以把內部類隱藏在外部類之內,不允許同一個包中的其他類訪問該類。
- 內部類成員可以直接訪問外部類的私有數據,因為內部類被當成其外部類成員,同一個類的成員之間可以相互訪問。但外部類不能訪問內部類的實現細節,例如內部類的成員變量。
- 匿名內部類適合用于創建那些僅需要一次的類
3.3 使用static定義的內部類就是外部類
如果使用static來修飾一個內部類,則這個內部類就屬于外部類本身,而不屬于外部類的某個對象。因此使用static修飾的內部類被稱為類內部類,有的地方也稱為靜態內部類。
static關鍵字的作用是把類的成員變成類相關,而不是實例相關,即static修飾的成員屬于整個類,而不屬于單個對象。
靜態內部類可以包含靜態成員,也可以包含非靜態成員。根據靜態成員不能訪問非靜態成員的規則,靜態內部類不能訪問外部類的實例成員,只能訪問外部類的類成員。即使是靜態內部類的實例方法也不能訪問外部類的實例成員,只能訪問外部類的靜態成員。
靜態內部類是外部類的一個靜態成員,因此外部類的靜態方法、靜態初始化也可以使用靜態內部類來定義變量、創建對象等。
外部類依然不能直接訪問靜態內部類的成員,但可以使用靜態內部類的類名作為調用者來訪問靜態內部類的類成員,也可以使用靜態內部類對象作為調用者來訪問靜態內部類的實例成員。
使用示例:
class?StaticInnerClassTest?{????//?外部類實例成員????private?int?propl=5;????//?外部類靜態成員????private?static?int?prop2=9;????????void?display()?{?????????StaticInnerClass?in=new?StaticInnerClass();????????in.display();????}????//?靜態內部類????static?class?StaticInnerClass?{????????//內部類里的靜態成員????????private?static?int?age;????????????????public?void?display()?{????????????//下面代碼出現錯誤-靜態內部類無法訪問外部類的實例成員????????????//?System.out.println(propl);????????????????????????//下面代碼正常????????????System.out.println(prop2);????????}????}}public?class?ObjectStaticDemo?{????public?static?void?main(String[]args)?{????????StaticInnerClassTest?outer=new?StaticInnerClassTest();????????outer.display();?//?輸出:9????}}3.4 匿名內部類
匿名內部類由于沒有名字,所以它的創建方式也比較特別。創建格式如下。
new?父類構造器(參數列表)|實現接口(){????//匿名內部類的類體部分}匿名內部類我們必須要繼承一個父類或者實現一個接口。同時它沒有class關鍵字,這是因為匿名內部類是直接使用new來生成一個對象的引用。當然這個引用是隱式的。
使用示例
abstract?class?Bird?{????private?String?name;????public?String?getName()?{????????return?name;????}????public?void?setName(String?name)?{????????this.name=name;????}????public?abstract?int?fly();}public?class?AnonymousInnerClass?{????public?void?test(Bird?bird)?{????????System.out.println(bird.getName()+"最高能飛"+bird.fly()+"米");????}????????public?static?void?main(String[]args)?{????????//?聲明一個名為?animal?的AnonymousInnerClass對象????????AnonymousInnerClass?animal=new?AnonymousInnerClass();????????????????//?調用實例方法,并傳入一個匿名對象????????animal.test(?new?Bird()?{????????????public?int?fly()?{????????????????return?1000;????????????}????????????public?String?getName()?{????????????????return"小鳥";????????????}????????}????}}代碼詳解
在AnonymousInnerClass類中,test()方法接受一個Bird類型的參數,同時我們知道一個抽象類是沒有辦法直接new的,我們必須要先有實現類才能new出來它的實現類實例。所以在main方法中直接使用匿名內部類來創建一個Bird實例。 匿名內部類不能是抽象類,所以必須要實現它的抽象父類或者接口里面所有的抽象方法。
匿名內部類存在一個缺陷,就是它僅能被使用一次,創建匿名內部類時它會立即創建一個該類的實例,該類的定義會立即消失,所以匿名內部類不能夠被重復使用。
4. 匿名對象
匿名對象,顧名思義就是沒有明確的聲明的對象。讀者也可以簡單地理解為只使用一次的對象,即沒有任何一個具體的對象名稱引用它
使用示例:
class?Person{?private?String?name="張三";?private?int?age=25;?public?String?talk(){??return"我是:"+name+",今年:"+age+"歲";?}}public?class?AnonymousObject?{?public?static?void?main(String[]args)?{???//?使用匿名對象???System.out.println(new?Person().talk());?}}總結
以上是生活随笔為你收集整理的java填空题 在非静态成员方法中_Java学习(四): 类的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rssi室内定位算法原理_三分钟看懂蓝牙
- 下一篇: c#进行三角形周长面积计算公式_小学数学