標籤:屬性 bcd har cte scan main方法 util [] this
JAVA10Eclipse快速鍵補充
l 選中類Ctrl T 繼承樹
l Ctrl 或者f3 查看源碼 多態會跳轉到調用父類中
l Java中lang包中的所有類 不需要導包 直接用 例如 System String
l Ecplise 中的Jre System Library是預設的eclipse依賴jre的類庫 在該位置可以尋找到平常使用的String 類 Random類 Math類
l Jdk 包括 jre和開發工具,jre包括jvm 和運行時所需要的核心類庫
l 運行 helloworld 運行了本類的同時還運行了System類等核心類庫
rt裝了平時用到的核心類的.class檔案
java中的文檔注釋和製作
- 為了讓使用者能夠明白程式的意思
- 文檔注釋
- /** 斷行符號鍵 類的文檔注釋
作者
類的功能
@標記作者 版本
- 方法的文檔注釋
/** 斷行符號
功能
參數
傳回值
- 注釋在源碼中 class檔案沒有注釋 需要使用工具把注釋變為說明書
- Javadoc.exe
- Eclipse中的用法
Export—java—Javadoc—選中要需要打說明書的包—finsh
找到index 點擊
注釋必須寫在自動產生的下邊或者上面
產生jar包
- 怎麼用一個類或多個類
- 打成 jar包
- Jar.exe
- Export—java—JAR File –選中需要打的包—finish
- 裡面只有.class檔案
- 之前都是直接在path中改 不好操作 容易改錯
- 建立系統變數 JAVA_HOME
- 路徑為 jdk的目錄
- Path中添加%JAVA_HOME%\bin;
JAVA_HOME配置
%%表示引用
匯入jar包
l 命令列匯入
l 設定classpath 告知jvm去哪個路徑下找可以啟動並執行class
l set classpath
l eclipse怎麼匯入jar包
new—floder—lib—拷貝jar包到lib中——右鍵buildpath—add to buildpath
和使用命令列設定一樣
類中的許可權修飾符
l public 公用訪問 修飾類 方法成員變數
l protected 受保護訪問子類中訪問 方法 成員變數
l 預設 什麼也不寫 預設訪問 類 方法 成員變數
l Private 私人訪問 方法 成員變數
l Static 靜態修飾符 方法成員變數
l Final 最終修飾符 類 方法 成員變數 局部變數
l Abstract 抽象修飾符 類 方法
l Abstract 和private不能同時用
l Abstract 和static 不能同時使用
l Abstract 和final不能同時使用
l 修飾類 最常見是public
l 修飾成員變數 最常見的是private
l 構造方法 最常見的是 public
l 成員方法 最常見得是 public static abstract
局部變數和成員變數設計解析
l 如果是屬於事物的屬性就用成員變數 計算長方形的面積和周長
l 如果是屬於事物功能方法的屬性就用局部變數 計算兩個數的乘積和求和
l 如果沒有使用非靜態變數就定義靜態方法
類作為方法的參數和傳回值
l 作為方法的參數
- 寫在方法的參數列表中
- 利用類的引用變數用來調用方法
- 一個對象有兩個變數來指向 一般對象最為參數
- 匿名對象作為參數
l 作為方法的傳回值
- 一般對象作為參數
- 匿名對象作為參數
抽象類別型作為方法的參數和傳回值
l 作為方法的參數
- 抽象類別作為參數 沒有對象
- 實際傳遞的是子類的對象執行個體
- 調用的的方法是子類實現的方法
- 可以傳遞多種子類對象 多態調用的擴充性
l 作為方法的傳回值
- 抽象類別作為傳回值 void改為是抽象類別
- 沒有對象 只能返回子類的對象
- 接收的類型應該為 抽象類別類型
- 但缺點是 不知道返回的是哪一個子類對象
- 可以在方法中加參數 再加入if條件句等用來選擇返回哪一個子類對象
介面作為方法的參數和傳回值
l 作為方法的參數
- 傳遞的還是實作類別的對象執行個體
- 調用的也是實作類別的實現方法
- 多態傳遞子類對象也可以
- 調用介面中的常量
a) 可以直接用介面名調用
l 作為方法的傳回值
- 返回的也是實作類別的對象 多態的調用
- 接收的也還是介面的類型
- 調用的實作類別的方法
- API中很多介面對象都是用get來獲得的,而不是用new出來的
- 對於調用者來講簡化了代碼
- 日曆類
抽象類別作為方法的傳回值案例
a) 是一個抽象類別
b) 導包 util
c) 已知子類 重新抽象方法
d) 非抽象方法 直接繼承使用
e) 靜態get方法 獲得Calendar子類對象
f)
g)
h) 不需要知道子類是什麼
五星酒店案例
- 介紹
a) 酒店中多名員工 一名經理(特有獎金) 一名廚師 兩名服務員
b) VIP服務
c) 調用員工功能
d) 調用VIP服務
l 分析
- 員工類 共性 父類
- 廚師 服務員 經理(特有獎金) 各有的特性 子類
- VIP服務 額外方法 介面
- 酒店 使用者 測試類別
總結
l 修飾符
定義的時候用的
類 public
內部類可以當做一個成員來講
這裡類常指外部類
成員 private
方法 public
l 自訂資料類型作為傳回值和參數
類
抽象類別
介面
API引入
- SUN公司做好的
- 一般不需要知道怎麼實現的
- 知道怎麼使用就行
- src.zip 源碼檔案
- 可以查看源碼
- API文檔
- 尋找方式
軟體包 String java.lang
顯示按鈕 索引
Object類 常用類
- 所有類都是他的子類
- 構造方法 Object();
- 介面是否繼承object
否
介面沒有構造器沒有訪問object類的構造器
equals()方法
a) Object類中的方法之一
b) 用來進行比較是否與此對象相等
c) 方法形式參數是object類型 因此所有的類型都可以作為實參
d) 所有類都繼承Object類 所以 任何類的對象都可以來調用equals方法來使用
e) 非靜態方法
f) 傳回值是布爾值
g) 比較記憶體配置圖
i. this 是方法調用者
ii. obj 表示被比較的對象
iii. Object 類是頂層類 其引用變數可以指向任意類的執行個體對象的記憶體位址
iv. == 比較兩個對象記憶體的地址
v. 結果為false返回給方法調用
vi. 沒有意義 因為兩個對象記憶體位址肯定不一樣 沒有可比性
l 重寫equals
- 比較對象成員變數
- this 改為 this.age
- obj不能直接調用傳過來對象的特有屬性
因為Object obj=另一個對象 是多態上轉型,父類不能調用子類特有屬性
- 所以需要改為 向下轉型為另一個對象的類型才可以調用
- 弊端:
只能傳遞相應的對象 如果傳遞其他類型比如數組就會拋出異常或出錯
- 所以需要進行判斷是否為對應的物件類型 instanceof
- 另外還需要進行非空判斷 返回false 和同一個對象判斷 返回true
ToString方法
l 傳回值是String類型
l 輸出語句中輸出的是對象時預設調用對象的toString方法
l System.out.println(對象p); 和System.out.println(對象p.toString);相同 輸出對象的記憶體位址
l 重寫方法toString
- 返回對象的成員變數
- 列印Random類的對象是地址 列印Scanner類的的對象不是地址
- 因為Scanner重寫了ToString方法
- 概念和特性
- 特點
String類
一切皆對象
字串是一個事物也是一個對象
類是描述事物的 String類就是描述字串的
- 有很多方法來操作字串
- 所有“ ”都是一個String類對象
- String str =”ddd”
String 類名
Str 參考型別的變數
“ ”是對象執行個體
不用new
列印str 也沒有列印出地址 因為也是String類對toString重寫了
- String 常量
- 字串是一個常量 不可更改
- 字串對象不變 而不是參考型別變數不變 參考型別變數可以重複賦值
- 記憶體配置圖
字串是一個對象
啟動並執行時候在堆記憶體
本質是一個字元的數組
“abcd”相當於char value[]={a,,b,c,d}
String 類中是 private final char value [];
所以是常量
- 記憶體配置圖
- Main方法進棧
- 定義Str 常量 abcd
- 退記憶體中有常量池
- 常量池中有很多常量
字元型常量有52個
需要一個itacat時從常量池中拿出來用
本質是一個字元數組 str指向字元數組空間地址 由於重寫了toString方法 就輸出了itcast
如果又建立了一個str變數=abcde 那麼就會重新開闢一個char數組記憶體,重新指向一個新數組記憶體位址, 輸出就會改變
- 建立方式
- String str1=new String(“abc”);
- String str2=new String(“abc”);
- str1==str2
- str1.equal(str2)
- 記憶體配置圖
- String str1=new String(“abc”);
建立了兩個對象
一個是 new String();
一個是 字元數組 value[]
New String 儲存的是 value[]的記憶體位址
所以輸出的是abc
- String str2=new String(“abc”);
檢測是否有abc數組 檢測到有 則直接指向value數組的記憶體位址
所以輸出 str1==str2 因為地址相同所以 輸出 true
而 .equals 因為父類String重寫了equals方法 用來比較字串中的每個字元是否相同,而不是比較地址
- String類構造方法
- String(byte[ ] bytes)
a) 通過使用平台的預設字元集指定byte數組,構造一個新的String
b) 中文作業系統 預設編碼錶是 GBK
c) 將定義的byte數組中的元素在編碼錶中進行查詢 然後構造出來一個全新的字串
d) 如果是負數 查詢GBK 兩個位元組一個漢字
- String(byte[] bytes,int offset,int length)
a) 前面是一個位元組數組 後面的截取的範圍 一個int表示起始索引 一個表示 截取個數
- String(char[] value){};
a) 將字元數組轉為字串 字元數組的參數 不查詢編碼錶
- String(char[] value,int offset.int count)
a) 前面是一個字元數組 後面的截取的範圍 一個int表示起始索引 一個表示 截取個數
- String(””)
- String類的尋找功能
- length(); 返回int 字串的長度
- 擷取部分字串
a) substring(int beginIndex,int endindex)
b) 開始索引 和 結束索引 包含頭部不包含尾部
c) 返回一個新的字串 需要重新用變數接收
d) 前面索引必須大於後面索引
e) substring(int beginIndex); 包含頭部 後面的全要
- startwith(String prefix);
測試字串是否以指定的前置詞字元串開始
返回一個布爾值
- endwith(String prefix);
測試字串是否是一個字串的尾碼
返回一個布爾值
- contains(String xxx)
判斷一個字串中,是否包含另一個字串
- indexof(char ch)
尋找一個字元,在另一個字元中第一次出現的索引
返回 -1表示沒有包含
- getBytes()
將字串轉成位元組數組
功能和構造方法相反
返回一個位元組數組
數組裡面是對應的查詢編碼錶
- chartAt(int index)
返回索引上的字元
- toCharArray()
將字串轉成字元數組
功能和構造方法相反
返回一個字元數組
不查詢編碼錶
- equals()
是否相同
equalsIgnorecase(String s)
是否相同忽略大小寫
- 練習
StringBuffer類
1.概念
- 字串緩衝區 提高字串效率
- 內部是可變數組 類的父類內部定義了個位元組數組char數組 沒有final
- 預設容量是16個字元
- String不可變 一個“”就代表一個數組 相加之後又是一個新數組 消耗資源
- StringBuffer 可以擴容
- 預設容量 由構造器調用父類構造方法傳遞16建立預設數組
2.方法
- append(類型 變數名)
a) 可以添加任何類型變數
b) 傳回值是StringBuffer
StringBuffer buffer=new StringBuffer();
buffer.append(6);
System.out.println(buffer);
c) Append 方法源碼是返回this;
誰調用append就返回誰
buffer.append(6).append("2522");
方法調用鏈
- delete(int start,int end)
a) 刪除指定索引區間的字元 包頭不包尾
b) 返回StringBuffer
c) 刪除全部 0 到length
- Insert(int index,任意類型)
添加任意類型資料到指定位置
a) 可以多一位不可以多兩位
- replace(int start,int end,String str)
替換範圍內的字串 包頭不包尾
- reverse();
將緩衝區內的字元翻轉
- toString
繼承Object類重寫的toString方法
將可變的緩衝區對象轉換為不可變String對象
StringBuilder
l 提供一個和StringBuffer相容的API
l 不同
StringBuilder線程不安全 運行快
StringBuffer安全執行緒 運行慢
所以在使用單線程時使用StringBuilder比較好
練習
改變數組輸出格式為【2,1,2】
java自學之路-day10