java上课作业(第三次)
一)請依據代碼:
的輸出結果,自行總結Java字段初始化的規律。
源代碼:
class?InitializeBlockClass
{
?
{
????field=200;
}
public?int?field=100;
public?InitializeBlockClass(int?value){
this.field=value;
}
public?InitializeBlockClass(){
?
}
}
public?class?Test?{
public?static?void?main(String[]?args)?
{
?
InitializeBlockClass?obj=new?InitializeBlockClass();
System.out.println(obj.field);
?
obj=new?InitializeBlockClass(300);
System.out.println(obj.field);
}
}
public?int?field=100;在類初始化后面時:
?
public?int?field=100;在類初始化前面時:
?
?
通過兩個情況對比,很容易發現:執行類成員定義時指定的默認值或類的初始化塊,到底執行哪一個要看哪一個“排在前面”。
二)當多個類之間有繼承關系時,創建子類對象會導致父類初始化塊的執行。請自行編寫示例代碼驗證以上結論。
源代碼:
//驗證當多個類之間有繼承關系時,創建子類對象會導致父類初始化塊的執行。
//范亞雷,2015,10,17
?
class?One???????//祖父類
{
????static
???????{
???????????System.out.println("祖父類的靜態初始化塊");
???????}
????{
????????System.out.println("祖父普通初始化塊");
????}
}
?
class?Two?extends?One?????//父類
{
????static
????????{
??????????System.out.println("父類的靜態初始化塊");
????????}
??????{
????????System.out.println("父類的普通初始化塊");
??????}
}
?
class?Three?extends?Two?????//子類
{
????static
????????{
??????????System.out.println("子類的靜態初始化塊");
????????}
??????{
????????System.out.println("子類的普通初始化塊");
??????}
}
?
public?class?Test2
{
?????public?static?void?main(String[]?args)?
?????????{
?????????????new?Three();
?????????}
}
運行結果:
?
從運行結果的截圖中很容易看出創建子類對象會導致父類初始化塊的執行。
三)靜態方法中只允許訪問靜態數據,那么,如何在靜態方法中訪問類的實例成員(即沒有附加static關鍵字的字段或方法)?請編寫代碼驗證你的想法。
源代碼:
//靜態方法中訪問類的實例成員(
//范亞雷?2015.10.17
class?Myclass
{
int?i=100;????//實例變量
static?public?void?output(){
Myclass?a=new?Myclass();???//關鍵點
System.out.println(a.i);
}
}
public?class?Test3?{
???????public?static?void?main(String[]?args){
???? ???Myclass?g=new?Myclass();
???? ???g.output();
???????}
}
運行結果:
?
運用靜態方法訪問實例變量,最關鍵的步驟是在靜態變量中新建對象實例,再引用類中實例變量。
四)使用類的靜態字段和構造函數,我們可以跟蹤某個類所創建對象的個數。請寫一個類,在任何時候都可以向它查詢“你已經創建了多少個對象?”。
源代碼:
//使用類的靜態字段和構造函數跟蹤某個類所創建對象的個數。
//范亞雷?2015.10.17
class?Myclass
{
int?i=0;????????//計數變量
public?Myclass(){
i++;
System.out.println("當前創建的對象個數為"+i);
}
}
public?class?Test3?{
???????public?static?void?main(String[]?args){
???? ???Myclass?g=new?Myclass();
???????}
}
運行結果截圖:
?
?
五)兩對整數明明完全一樣,為何一個輸出true,一個輸出false?
?
?
整數在小于127時都可以用常量池,因此第一次比較的的地址是取自同一個地址的數字,而第二次比較的數是創建了兩個不同地址的對象,所以第一次比較的地址相同,第二次不同。
轉載于:https://www.cnblogs.com/fan-xiaofan/p/4888439.html
總結
以上是生活随笔為你收集整理的java上课作业(第三次)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于html5的几个新标签在IE9之前不
- 下一篇: 用jQuery写的最简单的表单验证