Java基础知识复习(二)
對最近java基礎(chǔ)知識理解不足的方面進行了鞏固,寫個博客記錄一下!😁
基本數(shù)據(jù)類型相關(guān)知識點
| byte | 1 | 0 |
| short | 2 | 0 |
| int | 4 | 0 |
| long | 8 | 0 |
| float | 4 | 0.0 |
| double | 8 | 0.0 |
| char | 2 | ‘\u0000’ |
| boolean | - | false |
注意:
- java中使用的是十六進制的UNICODE編碼,該編碼可以保存漢字。(每一個中文在java中都存在對應(yīng)的unicode編碼)
- double保存的數(shù)據(jù)長度最長。
- 大寫字母的ASCII碼范圍:65 ~ 90 ;小寫字母的ASCII碼范圍:97~122(大寫字母+32轉(zhuǎn)化為小寫字母)
- java中不允許使用0或1來填充布爾型變量的內(nèi)容,boolean的取值范圍只能是true和false二選一
- byte可表示的數(shù)據(jù)范圍是-128 ~ 127,char可表示的數(shù)據(jù)范圍是0 ~ 255
那么我們在定義變量的時候具體該怎么選擇數(shù)據(jù)類型呢?
方法的重載
方法的名稱相同,參數(shù)的類型或個數(shù)不同,調(diào)用的時候會按照傳遞的參數(shù)類型和個數(shù)完成不同方法體的執(zhí)行。
建議:所有重載后的方法使用同一種返回值類型。
返回值類型對方法的重載沒有大的影響作用,方法重載的重點是根據(jù)參數(shù)類型及個數(shù)來區(qū)分不同的方法而不是依靠返回值的不同來確定的。
那么如果編寫兩個參數(shù)類型和個數(shù)完全一樣但是返回值類型不同的方法,調(diào)用的時候會調(diào)用哪一個呢?
在主類中定義兵器人由主方法可以直接調(diào)用的方法必須加上static。
實例化對象的時候堆內(nèi)存和棧內(nèi)存的作用
堆內(nèi)存:保存對象的真正數(shù)據(jù),即對象的屬性內(nèi)容。
棧內(nèi)存:保存的是一塊堆內(nèi)存的空間地址,為了方便理解,可以將棧內(nèi)存中保存的數(shù)據(jù)理解為對象的名稱。
如:
Book bk = new Book(“java寶典”,90);
那么就可以說bk是對象的引用,保存在棧內(nèi)存中。堆內(nèi)存中保存的是屬性內(nèi)容"java寶典",90。
new表示開辟堆內(nèi)存空間。
使用了沒有進行實例化的對象會出現(xiàn)空指針異常。
引用傳遞(重點)
一個堆內(nèi)存空間可以同時被多個棧內(nèi)存共同指向(引用數(shù)據(jù)類型都可以使用引用傳遞)
public class TestBook {public static void main(String[] args) {Book bk1 = new Book("java開發(fā)",38.5);Book bk2 =null;bk2 = bk1;System.out.println(bk2 == bk1); //true} }
引用傳遞可以這么理解:因為對象的引用保存在棧內(nèi)存中,如果別的對象指向該對象那么相當于將該對象的引用所指向的堆內(nèi)存空間傳遞給了指向該對象的引用。如下圖這么理解更為清晰一點:
封裝
為什么要封裝?
沒有封裝的類對象在訪問屬性的時候可以直接通過對象.屬性進行賦值操作,沒有進行檢驗所賦值是否合理,就直接將值賦給了屬性,這樣肯定不可避免很多錯誤。
標準做法:
所有在類中定義的屬性都要求使用private進行封裝,將類中的屬性進行私有化的操作。然后在類中定義getter和setter方法。
setter方法主要是設(shè)置內(nèi)容,可以在setter方法中對所賦值進行合理化的檢驗。getter屬性是取得屬性的內(nèi)容。
構(gòu)造方法
方法名稱和類名稱相同,沒有返回值類型聲明,可以進行重載)
在Java中,即使用戶沒有定義構(gòu)造方法,也會在程序編譯之后自動為類增加一個無參的構(gòu)造方法。
在進行對象實例化操作的時候,就調(diào)用構(gòu)造方法。
如:
Book bk = new Book();(黃色字體部分調(diào)用了無參的構(gòu)造方法,可以不用定義)
Book bk = new Book(“java開發(fā)”,38.5);(黃色字體部分調(diào)用了有參的構(gòu)造方法,該構(gòu)造方法必須用戶自己定義,否則該語句會報錯)
public Book(String name, double price) {this.name = name;this.price = price;}構(gòu)造方法與普通方法的區(qū)別:
- 構(gòu)造方法是在實例化新對象(new)的時候只調(diào)用一次。
- 普通方法是在實例化對象之后,通過對象.方法調(diào)用多次。
- 程序的編譯是根據(jù)定義結(jié)構(gòu)來解析的,構(gòu)造方法沒有返回值類型聲明,普通方法有返回值類型聲明。
類中結(jié)構(gòu)的編寫順序: - 編寫屬性,要將屬性進行封裝并提供getter和setter方法。
- 再編寫構(gòu)造方法,如果在一個類中對構(gòu)造方法重載時,所有的重載方法按照參數(shù)的個數(shù)由多到少或由少到多進行編寫是規(guī)范的。
- 最后編寫普通方法。
匿名對象
沒有棧內(nèi)存指向的堆內(nèi)存空間就是一個匿名對象。
由于匿名對象沒有棧內(nèi)存指向,只能使用一次,使用一次之后就成為垃圾,等待被GC回收釋放。(一塊沒有任何棧內(nèi)存指向的堆內(nèi)存空間將成為垃圾,所有垃圾會不定期的被GC回收,回收后會被釋放掉其所占用的空間)
數(shù)組
定義(一維數(shù)組):
數(shù)組的動態(tài)初始化:先開辟數(shù)組空間,然后為數(shù)組中的元素賦值。
數(shù)據(jù)類型 [] 數(shù)組名稱 = new 數(shù)據(jù)類型[元素個數(shù)];
數(shù)組的靜態(tài)初始化:數(shù)組定義的同時進行賦值。
數(shù)據(jù)類型 [] 數(shù)組名稱 = new 數(shù)據(jù)類型[]{值,值,…}
數(shù)組的長度不能被改變。
常用的Java.util.Arrays中的方法
binarySearch使用二分搜索法來搜索指定數(shù)據(jù)類型數(shù)組,以獲得指定的值。
public static int binarySearch(數(shù)據(jù)類型[] a,int fromIndex,int toIndex,數(shù)據(jù)類型 key) 使用二分搜索法來搜索指定的數(shù)據(jù)類型數(shù)組的范圍,以獲得指定的值。必 須在進行此調(diào)用之前對范圍進行排序。如果沒有對范圍進行排序,則結(jié)果 是不確定的。如果范圍包含多個帶有指定值的元素,則無法保證找到的是 哪一個。此方法認為所有 NaN 值都是等效且相等的。 參數(shù): a - 要搜索的數(shù)組 fromIndex - 要搜索的第一個元素的索引(包括) toIndex - 要搜索的最后一個元素的索引(不包括) key - 要搜索的值 返回: 如果它包含在數(shù)組的指定范圍內(nèi),則返回搜索鍵的索引;否則返回 (-(插 入點) - 1)。 插入點 被定義為將鍵插入數(shù)組的那一點:即范圍中第一 個大于此鍵的元素索引,如果范圍中的所有元素都小于指定的鍵,則為 toIndex。注意,這保證了當且僅當此鍵被找到時,返回的值將 >= 0。 拋出: IllegalArgumentException - 如果 fromIndex > toIndex ArrayIndexOutOfBoundsException - 如果 fromIndex < 0 或 toIndex > a.lengthpublic static int binarySearch(數(shù)據(jù)類型[] a,數(shù)據(jù)類型 key) 使用二分搜索法來搜索指定的數(shù)據(jù)類型的數(shù)組,以獲得指定的值。必須 在進行此調(diào)用之前對數(shù)組進行排序(通過 sort(數(shù)據(jù)類型[]) 方法)。 如果沒有對數(shù)組進行排序,則結(jié)果是不確定的。如果數(shù)組包含多個帶有指 定值的元素,則無法保證找到的是哪一個。 參數(shù): a - 要搜索的數(shù)組 key - 要搜索的值 返回: 如果它包含在數(shù)組中,則返回搜索鍵的索引;否則返回 (-(插入點) - 1)。 插入點 被定義為將鍵插入數(shù)組的那一點:即第一個大于此鍵 的元素索引,如果數(shù)組中的所有元素都小于指定的鍵,則為 a.length。 注意,這保證了當且僅當此鍵被找到時,返回的值將 >= 0。copyOf復制指定的數(shù)組,截取或用 0 填充(如有必要),以使副本具有指定的長度。
public static 數(shù)據(jù)類型[] copyOf(數(shù)據(jù)類型[] original,int newLength) 復制指定的數(shù)組,截取或用 指定類型的默認值 填充(如有必要),以使 副本具有指定的長度。對于在原數(shù)組和副本中都有效的所有索引,這兩個 數(shù)組將包含相同的值。對于在副本中有效而在原數(shù)組無效的所有索引,副 本將包含0(指定類型0的表示形式)。當且僅當指定長度大于原數(shù)組的長度 時,這些索引存在。 參數(shù): original - 要復制的數(shù)組 newLength - 要返回的副本的長度 返回: 原數(shù)組的副本,截取或用 指定類型的默認值 填充以獲得指定的長度 拋出: NegativeArraySizeException - 如果 newLength 為負 NullPointerException - 如果 original 為 nullcopyRangeOf將指定數(shù)組的指定范圍復制到一個新數(shù)組。
public static 數(shù)據(jù)類型[] copyOfRange(數(shù)據(jù)類型[] original,int from,int to) 將指定數(shù)組的指定范圍復制到一個新數(shù)組。該范圍的初始索引 ( from) 必須位于 0 和 original.length(包括)之間。 original[from] 處的值放入副本的初始元素中(除非 from == original.length 或 from == to)。原數(shù)組中后續(xù)元素的值放入副本的后續(xù)元素。該范圍的 最后索引 ( to) (必須大于等于 from)可以大于 original.length,在這種情況下, 0(只當數(shù)據(jù)類型的默認值) 被放入索引大于等于 original.length - from 的副本的所有元素中。返回數(shù)組的長度為 to - from。 參數(shù): original - 將要從其復制一個范圍的數(shù)組 from - 要復制的范圍的初始索引(包括) to - 要復制的范圍的最后索引(不包括)。(此索引可能位于數(shù)組范圍 之外)。 返回: 包含取自原數(shù)組指定范圍的新數(shù)組,截取或用 指定類型的默認值 元素填 充以獲得所需長度 拋出: ArrayIndexOutOfBoundsException - 如果 from < 0 或 from > original.length() IllegalArgumentException - 如果 from > to NullPointerException - 如果 original 為 nullequals 如果兩個指定的 同類型數(shù)組彼此相等,則返回 true。
public static boolean equals(數(shù)據(jù)類型[] a,數(shù)據(jù)類型[] a2) 如果兩個指定的 同類型 數(shù)組彼此 相等,則返回 true。如果兩個數(shù)組 包含相同數(shù)量的元素,并且兩個數(shù)組中的所有相應(yīng)元素對都是相等的,則 認為這兩個數(shù)組是相等的。換句話說,如果兩個數(shù)組以相同順序包含相同 的元素,則兩個數(shù)組是相等的。此外,如果兩個數(shù)組引用都為 null,則 認為它們是相等的。 (與 == 操作符不同,此方法認為 NaN 等于它本身) 參數(shù): a - 將測試其相等性的一個數(shù)組 a2 - 將測試其相等性的另一個數(shù)組 返回: 如果兩個數(shù)組相等,則返回 truefill將指定的 數(shù)據(jù)類型的值分配給指定 數(shù)據(jù)類型數(shù)組(指定范圍中的)的每個元素。
public static void fill(數(shù)據(jù)類型[] a,數(shù)據(jù)類型 val) 將指定的 數(shù)據(jù)類型 值分配給指定 數(shù)據(jù)類型 數(shù)組的每個元素。 參數(shù): a - 要填充的數(shù)組 val - 要存儲在數(shù)組所有元素中的值 public static void fill(數(shù)據(jù)類型[] a,int fromIndex,int toIndex,數(shù)據(jù)類型 val) 將指定的 var 值分配給指定 數(shù)據(jù)類型 數(shù)組指定范圍中的每個元素。填 充的范圍從索引 fromIndex(包括)一直到索引 toIndex(不包括)。 (如果 fromIndex==toIndex,則填充范圍為空。) 參數(shù): a - 要填充的數(shù)組 fromIndex - 要使用指定值填充的第一個元素的索引(包括) toIndex - 要使用指定值填充的最后一個元素的索引(不包括) val - 要存儲在數(shù)組所有元素中的值 拋出: IllegalArgumentException - 如果 fromIndex > toIndex ArrayIndexOutOfBoundsException - 如果 fromIndex < 0 或 toIndex > a.lengthhashCode基于指定數(shù)組的內(nèi)容返回哈希碼。
public static int hashCode(數(shù)據(jù)類型[] a) 基于指定數(shù)組的內(nèi)容返回哈希碼。對于任何兩個滿足 Arrays.equals(a, b) 的 數(shù)據(jù)類型 型數(shù)組 a 和 b,也可用說 Arrays.hashCode(a) == Arrays.hashCode(b)。 此方法返回的值與在 List 上調(diào)用 hashCode 方法獲得的值相同,該 List 包含以相同順序表示 a 數(shù)組元素的 Byte 實例的序列。如果 a 為 null,則此方法返回 0。 參數(shù): a - 要計算其哈希值的數(shù)組 返回: a 數(shù)組基于內(nèi)容的哈希碼sort 對指定的 數(shù)據(jù)類型 型數(shù)組(的指定范圍)按數(shù)字升序進行排序。
public static void sort(數(shù)據(jù)類型[] a) 對指定的 long 型數(shù)組按數(shù)字升序進行排序。該排序算法是一個經(jīng)過調(diào)優(yōu)的快速排序法。 參數(shù): a - 要排序的數(shù)組 public static void sort(數(shù)據(jù)類型[] a,int fromIndex,int toIndex) 對指定 int 型數(shù)組的指定范圍按數(shù)字升序進行排序。排序的范圍從索引 fromIndex(包括)一直到索引 toIndex(不包括)。(如果 fromIndex==toIndex,則排序范圍為空。) 該排序算法是一個經(jīng)過調(diào)優(yōu)的快速排序法。參數(shù): a - 要排序的數(shù)組 fromIndex - 要排序的第一個元素的索引(包括) toIndex - 要排序的最后一個元素的索引(不包括) 拋出: IllegalArgumentException - 如果 fromIndex > toIndex ArrayIndexOutOfBoundsException - 如果 fromIndex < 0 或 toIndex > a.lengthtoString返回指定數(shù)組內(nèi)容的字符串表示形式。
public static String toString(數(shù)據(jù)類型[] a) 返回指定數(shù)組內(nèi)容的字符串表示形式。字符串表示形式由數(shù)組的元素列表 組成,括在方括號( "[]")中。相鄰元素用字符 ", "(逗號加空格) 分隔。這些元素通過 String.valueOf(數(shù)據(jù)類型) 轉(zhuǎn)換為字符串。如果 a 為 null,則返回 "null"。 參數(shù): a - 返回其字符串表示形式的數(shù)組 返回: a 的字符串表示形式總結(jié)
以上是生活随笔為你收集整理的Java基础知识复习(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第三次出舱!神十五“圆梦乘组”在轨满四月
- 下一篇: 华硕ROG游戏手机7真机曝光:无挖孔全面