JAVA自學筆記08
1、構造方法私有,外界就不能再創建對象
2、說明書的制作過程
1)寫一個工具類,在同一文件夾下,測試類需要用到工具類,系統將自動編譯工具類;工具類的成員方法一般是靜態的,因此在測試類中可直接通過
工具類名.方法名(參數列表);
的方法來調用
2)加入文檔注釋
@ 文字(作者、版本)
@ param / return
3)用工具解析文檔注釋:javadoc
格式:javadoc -d 目錄名-author-version 工具類名.java
可創建未存在的目錄
3、工具類配合說明書使用
1)找到并打開文檔
2)點擊顯示,找出索引,找出搜索框
3)觀察該類的構造,需不需要導包(java.lang包下的類不需要導入)等等
4)觀察類說明,構造方法及成員方法和版本
成員變量 字段摘要
構造方法 構造方法摘要
成員方法(靜態?返回值類型?) 方法摘要
有構造方法就創建對象;沒有構造方法可能就是靜態的
5)使用
@例題1:觀察JAVA1.7API文檔,學習math類
@例題2:借助Math工具類,編寫猜數字程序
import java.util.Scanner;
public class Guess {public static void main(String[] args) {// TODO 自動生成的方法存根int num = (int)( 100*Math.random()+1);System.out.println(num);int i=5;Scanner sc = new Scanner(System.in);System.out.print("猜數字,范圍在0~100間");String s2 = "大了";String s3 = "小了";String s4 = "猜對了,游戲結束";String s5 = "請輸入數字";int x=sc.nextInt();for(;x!=num&&i>0;i--) {if(x>num) {System.out.println(s2);System.out.println(s5);}if(x<num) {System.out.println(s3);System.out.println(s5);}x=sc.nextInt();}if(x==num) {System.out.println(s4);}else {System.out.println("五次機會用完,游戲結束");}}
}
3、代碼塊
1)用{}括起來的代碼
2)可分為局部代碼塊、靜態代碼塊、同步代碼塊、構造代碼塊
3)局部代碼塊:在方法中出現,用于 限定變量生命周期,及早釋放,提高內存利用率
4)構造代碼塊:在類中方法外(類中的成員位置)出現,多個構造方法中 方法中相同的代碼存放到一起,每次調用構造方法時都執行(但在main方法之后),并且在構造方法前執行,可以把多個構造方法的共同代碼放到一起,用于對對象進行初始化
5)靜態代碼塊:在類中方法外(類中的成員位置)出現,并加上static修飾,即static{…};一般用于給類進行初始化,在加載時就進行,并且只進行一次
執行順序5、4、構造方法,與實際順序無關
4、繼承
1)定義:多個類(子類、派生類)中存在相同屬性和行為時,將這些內容抽取到單獨一個類中,只需繼承那個類(被稱為父類、基類或超類)即可
2)通過extends關鍵字可以實現類與類的繼承
class 子類名 extends 父類名{};
3) 提高代碼的復用性、提高代碼的維護性、使類與類間產生了關系,是多態的前提
4)弊端:類的耦合性增強,我們需要低耦合高內聚
5)特點:①JAVA中只支持單繼承,不支持多繼承,但它支持多層繼承
6)注意事項:
①子類只能繼承父類所有的非私有的成員(方法及變量)
②不要為了部分功能去繼承一個類
③子類不能繼承父類的構造方法,但是可以通過super關鍵字去訪問父類構造方法
7)使用繼承的時機
8)成員變量的關系:
①在子類方法中訪問一個變量的查找順序:首先在子類的局部范圍內查找,有就使用;接著在子類的成員范圍找,有就使用;最后,在父類的成員(變量)內尋找(僅考慮單繼承的情況,其余同理類推)
②this和super的區別
%訪問成員變量:
this/super.成員變量
調用本類的成員變量/調用父類的成員變量
%調用構造方法:
this(…) 調用本類的構造方法
super(…) 調用父類的構造方法
%調用成員方法:
this.成員方法名 調用本類的成員方法
super.成員方法名 調用父類的成員方法
③繼承中構造方法的關系:子類中所有的構造方法默認都會訪問父類的無參構造方法
原因:因為子類會繼承父類中的數據,可能還會使用父類的數據。所以,子類初始化之前一定要先完成父類數據的初始化
子類的每一個構造方法的第一條語句默認為super();
④繼承中構造方法的注意事項:
如果父類中沒有無參構造(即已給有參構造方法)方法,系統調用子類的構造方法將報錯
解決方法:解決方法:在子類構造方法最前面加
super(參數列表);
來調用父類其他的帶參構造方法即可
或者用子類通過this調用本類的其他構造方法來間接調用父類的帶參構造方法
super(…)和this(…)必須放在第一句否則就會出現父類數據多次初始化的情況
⑤一個類的初始化的過程:默認初始化、顯示初始化、構造方法初始化
@例題3:看程序寫結果
class Father{
static{System.out.println("靜態代碼塊Father");
}
{System.out.println("構造代碼塊Father");
}
public Father(){
System.out.println("構造方法Father");
}
}
class Son extends Father{
static{System.out.println("靜態代碼塊Son");
}
{System.out.println("構造代碼塊Son");
}
public Father(){
System.out.println("構造方法Son");
}
}
class Demo{
Son s = new Son();
}
執行結果為:
靜態代碼塊Father
靜態代碼塊Son//加載類時執行
構造代碼塊Father
構造方法Father
構造代碼塊Son
構造方法Son