Java——Object

1.Object萬類之祖

1.1 Object類型的概述

  • Object類是所有類型的頂層父類,所有類型的直接或者間接的父類;所有的類型中都含有Object類中的所有方法。

  • 隨意定義一個類型,不手動顯式定義其父類,那么這個類的父類就是Object類

  • public Object() {

    }

  • Object類的構造方法:Object()

    • 可以自己創建對象

    • 讓子類訪問,所有子類都會直接或者間接的訪問到這個頂層父類的構造方法

    • Object類在執行構造方法時,不去訪問自己的父類,因為沒有父類了

1.2 getClass()

  • 返回當前對象的運行時類

    • 目前記住其中Class類型中有一個getName,可以返回當前類型的全類名

  • 示例

  • public class Demo {public static void main(String[] args) {Demo demo = new Demo();System.out.println(demo.getClass().getName());}
    }

1.3 hashCode()

  • 根據對象的情況,生成的一個整數,就是哈希碼值。生成數字的方法就是hashCode方法,它是一個特征值。

  • 示例:

  • public class Demo {public static void main(String[] args) {Demo demo = new Demo();System.out.println(demo.hashCode());demo = new Demo();System.out.println(demo.hashCode());}
    }

1.4 toString方法

  • 返回當前對象的字符串表示

  • 對象返回一個地址值的字符串,沒有什么意義

  • 最終操作:不需要手動重寫,可以直接使用快捷鍵生成:Alt+Insert

  • 使用打印語句打印一個對象,其實打印的就是這個對象的toString內容

1.5 equals

  • 用于比較兩個對象是否相等的方法,比較的就是“調用者”和“參數”這兩個對象

  • boolean equals(Object obj)

  • 在Object類型中,是比較兩個對象的地址值是否相同。

  • 實際生活中,比較兩個對象的內存地址,沒有什么意義。因此在自定義的子類中,都要重寫這個方法。

    • 按照自定義的方式比較兩個對象是否相同

  • 重寫原則:

    • 一般比較兩個對象中的所有屬性,是否全部相同

    • <比如兩個對象的name值相同,那么兩個對象就相同>

  • 代碼實例

  • public class Simple01 {public static void main(String[] args) {Cat cat1 = new Cat("咪咪");Cat cat2 = new Cat("咪咪");boolean bool = cat1.equals(cat2);System.out.println(bool);// 表示獲取全類名 包 +類名System.out.println(cat1.getClass());}
    }class Cat {private String name;public String getName() {return name;}public Cat(String name) {this.name = name;}public void setName(String name) {this.name = name;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Cat cat = (Cat) o;return this.getName().equals(cat.getName());}
    }

1.6 ==和equals方法的區別

  • 相同點

    • ==和equals都是用于比較數據是否相等的方式

  • 不同點:

    • 比較內容的不同:

      • ==可以比較任意數據類型,既可以比較基本數據類型,也可以比較引用數據類型

      • equals方法只能比較引用數據類型

    • 比較規則不同:

      • ==在比較基本類型的時候,比較的是數據的值;比較引用類型時,比較的是地址值

      • equals方法在重寫之前,比較的是兩個對象的地址值;在重寫之后,比較的屬性值也就是類里面的屬性值的大小。

2.內部類

2.1內部類的概述

  • 定義在內部的類,就是內部類。可以定義在類的內部,可以定義在方法的內部。

  • 根據定義的位置不同,可以分為:

  • 成員內部類

    • 普通的成員內部類

    • 私有的成員內部類

    • 靜態的成員內部類

  • 局部內部類

  • 匿名內部類

2.2普通的成員內部類

  • 定義在成員位置上的類,就是成員內部類

  • 定義格式:

  • class 內部類類名 {
    ? ? ?? ??? ??? ?內部類成員
    ?? ??? ?}

  • 成員內部類的說明:

    • 內部類可以直接訪問外部類的所有成員,包括私有成員

    • 外部類訪問內部類的成員,必須先創建內部類的對象

    • 在外部類以外,創建內部類的對象的格式:

      • 外部類名.內部類名 內部類對象名 = new 外部類名().new 內部類名();

  • 代碼實例:

  • /*** 普通成員內部類*/
    public class Simple02 {public static void main(String[] args) {Body.Heart heart = new Body().new Heart();heart.show();}
    }//類嵌套類\
    class Body {private double height = 1.74;class Heart {int beats = 90;public void show() {System.out.println("身高是" + height + ",心跳每分鐘" + beats);}}}

2.3私有的成員內部類

  • 也是一個成員內部類,在成員內部類前面加上一個private關鍵字

  • 訪問方式說明:

    • 在外部類以外,不能直接訪問外部類中的私有成員內部類

    • 可以在外部類中,定義一個訪問私有內部類的公有方法,讓外界可以調用公有方法,間接的訪問外部類中的私有成員內部類。

  • 代碼示例:

  • public class Simple02 {public static void main(String[] args) {Body body = new Body();body.test();}
    }//類嵌套類\
    class Body {private double height = 1.79;private class Heart {int beats = 90;public void show() {System.out.println("身高是" + height + ",心跳每分鐘" + beats);}}public void test() {Heart hh = new Heart();hh.show();}
    }

2.4 靜態的成員內部類

  • 也是一個成員內部類,在成員內部類前面加上一個static關鍵字

  • 訪問特點:

    • 靜態內部類中的非靜態成員,需要將所在的內部類對象創建出來之后,才能被調用。

    • 靜態內部類中的靜態成員,可以通過外部類名.內部類名的方式直接訪問,而不需要創建外部類的對象

    • 總結:一個類是否需要創建對象,不取決于該類本身是否是靜態,而取決于要訪問的成員是否是靜態

    • 靜態成員內部類的對象創建格式:

    • 外部類名.內部類名 內部類對象名 = new 外部類名.內部類名();

    • 代碼實例

    • public class Simple03 {public static void main(String[] args) {// 方式一:外部類名.內部類名 內部類對象名 = new 外部類名.內部類名();Body2.Liver liver = new Body2.Liver();liver.show();// 方式二:外部類名.內部類名的方式直接訪問System.out.println(Body2.Liver.FUNC);}}class Body2 {private double weight = 180;static class Liver {String color = "black";static final String FUNC = "解毒";void show() {System.out.println("肝都變成" + color + "色了,少整點吧!");}}
      }

2.5局部內部類

  • 定義在方法中的內部類

  • 說明:

    • 問題:屬于方法中的局部變量,外界都沒有辦法訪問到

    • 解決方式:在方法內部定義調用方式

    • 代碼示例:

    • public class Simple3 {public static void main(String[] args) {new Body2().methodTest();}}class Body2 {void methodTest () {class SeaFood {void eat () {System.out.println("喝酒不能吃海鮮");}}new SeaFood().eat();}}

2.6 匿名內部類【常用】

  • 沒有名字的內部類

  • 匿名內部類的使用前提:

    • 匿名類:繼承一個類

    • 匿名類:實現一個接口

  • 格式:

  • new 父類類名或者接口名() {
    ? ? ?? ?父類方法的重寫或者是接口內容的實現
    }

  • 本質:創建了一個類的子類對象、接口的實現類對象

  • 示例代碼

  • public class Simple04 {public static void main(String[] args) {// 父 new 子Games games = new MyGames();games.play("LOL");// 匿名內部類new Games() {@Overridepublic void play(String name) {System.out.println("會玩" + name);}}.play("王者榮耀");// 拉姆達表達式Games games1 = (name) -> System.out.println("會玩" + name);games1.play("三國殺");}
    }interface Games {void play(String name);
    }class MyGames implements Games {@Overridepublic void play(String name) {System.out.println("會玩" + name);}
    }

3.String

3.1概述

  • String就是字符串類型,屬于java.lang包,不需要導包

  • 所有的字符串常量"Hello World","abc"都屬于String類型的對象

  • 字符串字面值屬于常量,存儲在方法區的常量池中。

  • String類型是一個常量,在創建之后就無法更改(是一個不可變的字符序列)。

  • 不可變的原因是String類型只提供了構造方法,沒有提供set方法,因此只能在創建對象的時候,初始化成員變量,將來對象創建完成之后,無法通過方法來修改。

  • 代碼示例:

  • public class Simple05 {public static void main(String[] args) {String str2 = "abc";System.out.println(str2);//abcstr2 = "xyz";System.out.println(str2);//xyz}
    }

3.2 String類型的構造方法

  • String():創建一個空字符串

  • String(String original):創建參數字符串的一個副本(字符串是在常量池中,構造方法創建的字符串是在堆內存中)

  • String(byte[] arr):將一個字節數組轉成一個字符串,將我們不認識的字節數組,轉成了我們認識的字符串,過程叫做【解碼】查詢的是當前平臺默認的編碼表

  • String(byte[] arr, int offset, int length):將字節數組的一部分轉成字符串

  • String(char[] arr):將字符數組轉成字符串

    • 既不是編碼,也不是解碼,只不過是把字符串成了串

  • String(char[] arr, int offset, int length):將字符數組的一部分轉成字符串

  • 代碼示例:

  • public class Simple06 {public static void main(String[] args) {//test1_空參構造();//test2_原始字符串轉換();//test3_字節數組轉字符串();test4_字符數組轉成字符串();}private static void test4_字符數組轉成字符串() {char[] arr = {'a', 'b', 'X', 'Y'};String str1 = new String(arr);System.out.println(str1);//abXY  只是組成字符串而已//將字符 數組的一部分轉成字符串,String str2 = new String(arr, 1, 2);System.out.println(str2);//bX}private static void test3_字節數組轉字符串() {//將整個字節數組轉成了字符串byte[] bytes = {99, 111, 100, 105, 110, 103, 45, 102, 117, 116, 117, 114, 101};String s = new String(bytes);System.out.println(s);/*將字節數組的一部分轉成字符串,* 其中offset是從哪個索引開始,length表示要將多少個字節是轉成字符串*/byte[] arr = {99, 111, 100, 105, 110, 103, 45, 102, 117, 116, 117, 114, 101};String str2 = new String(arr, 1, 4);System.out.println(str2);}private static void test2_原始字符串轉換() {String str = new String("abc");//這個對象,在堆內存中//"abc"常量,在方法區的常量池//new String("abc")這個對象,在堆內存中//str指向了堆內存中的對象System.out.println(str);//abcSystem.out.println(str == "abc");//falseSystem.out.println("abc" == "abc");//true}public static void test1_空參構造() {String str = new String();System.out.println(str);}
    }

3.3 String類型的判斷功能

  • equals(Object obj):判斷調用者和參數對象描述的字符串內容是否相同

  • equalsIgnoreCase(String otherStr):忽略大小寫判斷兩個字符串內容是否相同

  • contains(String str):判斷調用者是否包含了str這個子串

  • startsWith(String prefix):判斷調用者是否以prefix開頭

  • endsWith(String suffix):判斷調用者是否以suffix結尾

  • isEmpty():判斷調用者是否是空串

  • 代碼示例

  • public class Simple07 {public static void main(String[] args) {
    //        test1_equals();
    //        test2_equalsIgnoreCase();
    //        test3_包含();
    //        test4_5_判斷開始和結束();
    //        test6_判斷為空();}private static void test6_判斷為空() {String str = "abc";System.out.println(str.isEmpty());//false  字符串不為null}private static void test4_5_判斷開始和結束() {String str = "abcdefg";System.out.println(str.startsWith("abc"));//trueSystem.out.println(str.startsWith("abd"));//fasleSystem.out.println(str.startsWith("cde"));//falseSystem.out.println(str.endsWith("efg"));//true}private static void test3_包含() {String str1 = "abcdefg";System.out.println(str1.contains("abc"));//trueSystem.out.println(str1.contains("efg"));//trueSystem.out.println(str1.contains("cde"));//trueSystem.out.println(str1.contains("ace"));//false 必須是連續的}private static void test2_equalsIgnoreCase() {String str1 = "abcDEF";String str2 = "abcdef";System.out.println(str1.equals(str2));//false 字符串不相等//忽略大小寫判斷兩個字符串內容是否相同System.out.println(str1.equalsIgnoreCase(str2));//true}private static void test1_equals() {String str1 = new String("abc");//在堆中String str2 = new String("abc");System.out.println(str1 == str2);//false 兩個對象地址不一樣 new了兩次System.out.println(str1.equals(str2));//true  指向同一個對象}
    }

3.4 String類型的獲取功能

  • length():獲取字符串字符的個數

  • charAt(index):返回調用者字符串中索引為index的字符(和length方法結合之后可以遍歷字符串)

  • substring(int beginIndex):獲取一個字符串,內容是從當前字符串的beginIndex索引開始,一直到最后一個字符機截止

  • substring(int beginIndex, int endIndex):獲取一個指定索引范圍的子串

    • 注意事項:1、包含頭不包含尾,返回的結果中,不包含endIndex索引指向的字符;2、所有的方法都無法修改字符串對象本身,一般都是返回一個新的字符串對象

  • indexOf家族:

    • indexOf(int ch):返回ch字符在當前調用者字符串中,第一次出現的索引

    • indexOf(int ch, int fromIndex):從fromIndex索引開始尋找,找到ch字符在當前字符串中第一次出現的索引

    • indexOf(String str):返回的是str這個字符串在調用者字符串中第一次出現的索引

    • indexOf(String str, int fromIndex):從fromIndex索引開始尋找,找到str字符串在當前字符串中第一次出現的索引(注意:無論從哪個位置開始找,所有字符的索引都不會變化)

  • lastIndexOf家族:

    • 和IndexOf基本一樣,只不過是從后往前找,所有字符和字符串的索引也都不會發生變化

  • 示例代碼

  • public class Simple08 {public static void main(String[] args) {test1_length();test2_charAt();test3_字符串遍歷();test4_獲取子串();test5_indexOf();test6_lastIndexOf();}private static void test6_lastIndexOf() {String str = "abcdabcd";System.out.println(str.lastIndexOf('c'));System.out.println(str.lastIndexOf('c', 5));System.out.println(str.lastIndexOf("cd"));System.out.println(str.lastIndexOf("cd", 5));}private static void test5_indexOf() {String str = "abcdabcd";//返回第一個c出現的索引System.out.println(str.indexOf('c'));System.out.println(str.indexOf('c', 3));System.out.println(str.indexOf("cd"));//2System.out.println(str.indexOf("cd", 3));}private static void test4_獲取子串() {String str = "abcdefg";String result = str.substring(3);//str本身不會變化,因為字符串對象是一個不可變的字符序列System.out.println(str);//substring可以返回一個新的字符串對象System.out.println(result);//通過兩個參數的substring獲取子串System.out.println(str.substring(2, 5));}private static void test3_字符串遍歷() {String str = "abcdefg";//遍歷字符串for (int i = 0; i < str.length(); i++) {System.out.println(str.charAt(i));}}private static void test2_charAt() {String str = "abcdefg";char c = str.charAt(3);System.out.println(c);}private static void test1_length() {String str = "abcdefg";System.out.println(str.length());}
    }

3.5 String類型的轉換功能

  • byte[] getBytes():將當前字符串,轉成字節數組(編碼)

  • char[] toCharArray():將當前的字符串,轉成字符數組

  • toUpperCase():將當前的字符串,轉成全大寫形式

  • toLowerCase():將當前的字符串,轉成全小寫形式

  • concat(String str):將當前調用者,和參數str進行拼接,返回拼接后的長字符串(不常用,因為更多使用的是運算符+)

  • valueOf家族:可以將任意數據類型的數據,轉換成字符串 (靜態方法)

  • 代碼示例:

  • public class Simple09 {public static void main(String[] args) {test1_getBytes();test2_toCharArray();test3_upperAndLower();test4_concat();test5_valueOf();}private static void test5_valueOf(){//可以將任意數據類型的數據,轉換成字符串System.out.println(String.valueOf(false));System.out.println(String.valueOf('x'));System.out.println(String.valueOf(new char[] {'a', 'b'}));System.out.println(String.valueOf(100));Object obj = null;System.out.println(String.valueOf(obj));}private static void test4_concat() {String str = "abc";String result = str.concat("xyz");System.out.println(result);System.out.println(str + "xyz");//將當前調用者,和參數str進行拼接,返回拼接后的長字符串(不常用,因為更多使用的是運算符+)}private static void test3_upperAndLower() {String str = "aBCdEfG";String upper = str.toUpperCase();//:將當前的字符串,轉成全大寫形式System.out.println(str);System.out.println(upper);String lower = str.toLowerCase();//:將當前的字符串,轉成全小寫形式System.out.println(lower);}private static void test2_toCharArray() {String str = "abcdefg";char[] arr = str.toCharArray();//將當前的字符串,轉成字符數組for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + "\t");}System.out.println();}private static void test1_getBytes() {String str = "abc";byte[] arr = str.getBytes();//將當前字符串,轉成字節數組(編碼)for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}
    }

3.6 String類型的其他方法

  • replace(String oldStr, String newStr):將調用者中的老串替換成新串

  • trim():去掉字符串左右兩邊的空格、制表符

  • split:

    • split(String regex, int limit):字符串按照某個字符串進行分割,返回字符串數組,且限制返回元素個數。

    • split():不限制返回元素個數。

    • String str = "Hello,World!com.coding-future";
      ? ? ? ?String[] s = str.split("[,!.-]");
      ? ? ? ?System.out.println(Arrays.toString(s));
      ? ?}

    • format

    • String str = ?String.format("我是%s人,我愛%s","中國","中國");

    • 代碼示例

    • public class Simple10 {public static void main(String[] args) {test2_trim();test1_replace();}//去掉字符串左右兩邊的空格、制表符private static void test2_trim() {String str = "  I love java,  java is good ";String result = str.trim();System.out.println(str);System.out.println(result);}//將調用者中的老串替換成新串private static void test1_replace() {String str = "I love java, java is good";String result = str.replace("java", "study");System.out.println(str);System.out.println(result);}
      }

4. StringBuffer && StringBuilder

4.1概述

  • 內存理解:

  • public class Simple11 {public static void main(String[] args) {String[] strArr = {"java", "javascript", "html", "css", "nodejs"};String s1 = "我會的技能有:";for (String s : strArr) {s1 += s;s1 += ",";}System.out.println(s1);}
    }

  • StringBuilder是一個可變的字符序列,因為在類中提供了修改私有成員變量的方法

    • 常用的方法是append和insert,就是在StringBuilder對象本身上,進行修改操作

  • String類型和StringBuilder的關系:都是用于描述字符串

    • String是不可變的字符序列,沒有提供修改私有成員的方法;StringBuilder是可變的字符序列,因為提供了修改成員變量的方法;

    • String長度本身也不可以變化,StringBuilder長度可以變化,可以認為StringBuilder就像一個可以伸縮的容器,用于存儲字符

4.2構造方法

  • 構造方法作用:創建當前對象、將其他類型的數據,轉換成當前類型

  • StringBuilder的構造方法:

    • StringBuilder():創建一個生成器,初始容量為16個字符

    • StringBuilder(int capacity):創建一個生成器,初始容量為capacity大小

    • StringBuilder(String str):創建一個生成器,初始值就是str這些字符,初始大小是str+16

  • 獲取容積的方法:

    • capacity():獲取當前生成器的容器大小

    • length():獲取當前生成器中的字符個數

  • 代碼示例

  • public class Simple12 {public static void main(String[] args) {StringBuilder sb1 = new StringBuilder();System.out.println(sb1.capacity());//16StringBuilder sb2 = new StringBuilder(10);System.out.println(sb2.capacity());//10StringBuilder sb3 = new StringBuilder("Hello");System.out.println(sb3.capacity());//21System.out.println(sb3.length());//字符個數是5}
    }

4.3添加功能

  • append(任意類型):可以將任意數據類型,轉成字符,添加到生成器中

  • insert(int index, 任意數據類型):可以將任意數據類型,添加到指定的位置

    • index的范圍是0~當前緩沖區的大小

    • 插入數據之后,數據本身的索引就是參數中指定的index

  • 實例代碼

  • private static void test1insert() {StringBuilder sb1 = new StringBuilder();//"1"sb1.insert(0, "a");System.out.println(sb1);//1sb1.insert(0, "b");System.out.println(sb1);//basb1.insert(1, "xyz");System.out.println(sb1);//bxyza}

4.4刪除功能

  • deleteCharAt(int index) :刪除指定索引的字符

  • delete(int start, int end):刪除指定范圍的字符,被刪除的部分包含頭不包含尾

  • 實例代碼

  • public class Simple13 {public static void main(String[] args) {//test1_deleteCharAt();test2_delete();}private static void test2_delete() {StringBuilder sb1 = new StringBuilder("abcdef");//刪除cdsb1.delete(2, 4);System.out.println(sb1);//abef}private static void test1_deleteCharAt() {StringBuilder sb1 = new StringBuilder("abcdefg");sb1.deleteCharAt(2);System.out.println(sb1);//abdefg  刪除指定索引的字符sb1.deleteCharAt(6);//String索引越界異常System.out.println(sb1);}
    }

4.5替換和反轉功能

  • replace(int start, int end ,String str):

    • 將字符串緩沖區中的從start開始到end-1這部分內容,替換成str

  • reverse():將原有字符序列進行反轉

  • 示例代碼

  • public class Simple14 {public static void main(String[] args) {test1_replace();test2_reverse();}private static void test2_reverse() {StringBuilder sb1 = new StringBuilder("abcdefg");sb1.reverse();System.out.println(sb1);}private static void test1_replace() {StringBuilder sb1 = new StringBuilder("abcdefg");sb1.replace(2, 5, "qq");System.out.println(sb1);}
    }

4.6.StringBuffer和StringBuilder的區別

  • 共同點:

    • 都是字符串的緩沖區,都是字符串的生成器,都是可變的字符序列

  • 不同點:

    • 出現版本不同:

      • StringBuffer在jdk1.0出現的

      • StringBuilder在jdk1.5出現的

    • 線程安全性不同:

      • StringBuffer是線程安全的,在多線程環境下仍然保證數據安全

      • StringBuilder是線程不安全,在多線程環境下無法保證數據安全

    • 效率不同:

      • StringBuffer效率低

      • StringBuilder效率高

5.包裝類

5.1概述

class Test {String str = "50";int a = (int) str; //此方式是否可以將str轉成int類型int age = null; // 是否可以這樣操作?
}

  • 基本數據類型有八種,都是非常簡單的數據類型

  • 在這些類型中,只能表示簡單的數據,不能包含一些操作數據的方法,沒有辦法存儲描述這些數據的內容。需要準備一個引用數據類型,能將基本數據類型進行包裝,提供一些操作基本類型的方法,定義一些描述數據的數據。

  • 基本類型的包裝類:

    • byte Byte
      short Short
      int Integer類型
      long Long
      float Float
      double Double
      char Character
      boolean Boolean
  • 各種包裝類型的方法、特點基本相同,只要學習一個Integer類型,其他的也觸類旁通。

  • Integer類型的對象中,維護了一個私有的成員變量,是一個int類型的字段(成員變量、屬性),用于表示這個Integer對象要表示的數字。

  • 提供了在int、Integer、String類型之間相互轉換的方法

5.2 Integer的構造方法

  • Integer(int i):將一個基本類型的int數,轉換成Integer類型的對象使用i給Integer對象中的成員變量賦值

  • Integer(String s):將一個字符串類型的數字,轉換成Integer類型的對象轉換的作用

  • 示例代碼

  • public class Simple15 {public static void main(String[] args) {//將一個基本類型的int數,轉換成Integer類型的對象使用i給Integer對象中的成員變量賦值Integer it = new Integer(100);System.out.println(it);//將一個字符串類型的數字,轉換成Integer類型的對象轉換的作用Integer it1 = new Integer("100");System.out.println(it1 + 10);}
    }

5.3 Integer、int、String類型互相轉換的總結

  • Integer轉換成int類型

    • intValue()

  • int轉換成Integer類型

    • 構造方法Integer(int i)

  • Integer到String的轉換

    • toString方法即可

  • String到Integer的轉換

    • Integer.valueOf(String str)

  • int轉換成String類型:

    • Integer.toString(int i)

  • String轉換成int類型

    • Integer.parseInt(String str)

    • public class Simple16 {public static void main(String[] args) {Integer it2 = 10;int i = it2.intValue(); // i 沒有操作方法Integer it3 = new Integer(20);System.out.println(it3);// it3有操作方法String s = it3.toString();System.out.println(s);// 字符串Integer it4 = Integer.valueOf(s);System.out.println(it4); // IntegerString s1 = Integer.toString(i);System.out.println(s1);// 字符串int i1 = Integer.parseInt(s1);System.out.println(i1);// int 類型}
      }

5.4 自動裝箱和拆箱

  • 裝箱和拆箱:

    • 裝箱:將基本數據類型,封裝成包裝類型的對象(引用類型),這個過程就是裝箱,使用構造方法即可

    • 拆箱:從包裝類型的對象中,將其包裝的基本類型的數據取出,這個過程就是拆箱,使用intValue方法即可

  • 自動裝箱和拆箱

    • 自動裝箱:可以直接使用基本類型的數據,給引用類型的變量賦值

    • 自動拆箱:可以直接使用包裝類對象,給基本類型的變量賦值:包裝類對象直接進行算數運算

  • 示例代碼

  • public class Simple17 {public static void main(String[] args) {Integer it = 100;//自動裝箱,100基本數據類型給integer包裝類型賦值int i = it;//自動拆箱,System.out.println(it + 1);//自動拆箱  變成基本類型 然后運算Integer inte = 100; // 先裝箱inte = inte + 1;//先自動拆箱,計算,最后自動裝箱}private static void test1_裝箱和拆箱() {int i = 100;Integer it = new Integer(i);//裝箱int j = it.intValue();//拆箱}
    }

    6. 包(package)

  • 包:用于分類存放類文件(.class)的文件夾,在out/production目錄下存放.class

  • 作用:

    • 包幫助管理大型軟件系統:將功能相近的類劃分到同一個包中。比如:MVC的設計模式

    • 包可以包含類和子包,劃分項目層次,便于管理

    • 使用package聲明類或接口所屬的包,聲明在源文件的首行

    • 解決類命名沖突的問題,同一個包下,不能命名相同的類和接口,不同的包下,可以命名同名的類和接口。

    • 每"."一次,就代表一層文件目錄。

  • 命名:域名倒著寫:com.xxxx.www(全球唯一)

  • 包的聲明:使用package的關鍵字,聲明當前的類是屬于指定的包的。

  • 效果:

    • 編譯的這個類,就會進入到一個指定的文件夾中。

    • 當前的類,名稱也發生了變化,類名變成了【包名 + 類名】

  • 簡化:

    每次使用其他包的類的時候,都需要寫很長一串全類名,所以非常麻煩,需要簡化. 使用import語句進行簡化,在類的聲明上,寫一個import語句,將這個類的全類名導入進來,在該類中,就可以直接使用這個類的簡寫形式了。

  • 注意事項:

    • 在源文件中使用import顯式的導入指定包下的類或接口

    • 聲明在包的聲明和類的聲明之間。

    • 如果導入的類或接口是java.lang包下的,或者是當前包下的,則可以省略此import語句。 System, String...

    • 如果需要導入多個類或接口,那么就并列顯式多個import語句即可

    • 可以使用java.util.*的方式,一次性導入util包下所有的類或接口,不建議使用import *,使用import到類名。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712271.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712271.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712271.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C語言】指針初階2.0版本

這篇博文我們來繼續學習指針的其他內容 指針2.0 傳值調用與傳址調用傳值調用傳址調用 一維數組與指針理解數組名使用指針深入理解一維數組 二級指針指針數組二維數組與指針 傳值調用與傳址調用 在開始之前&#xff0c;我們需要先了解這個概念&#xff0c;后面才能夠正常的學習…

利用 Python 抓取數據探索汽車市場趨勢

一、引言 隨著全球對環境保護意識的增強和技術的進步&#xff0c;新能源汽車作為一種環保、高效的交通工具&#xff0c;正逐漸受到人們的關注和青睞。在這個背景下&#xff0c;對汽車市場的數據進行分析和研究顯得尤為重要。 本文將介紹如何利用 Python 編程語言&#xff0c;結…

VSCode上搭建C/C++開發環境(vscode配置c/c++環境)Windows系統---保姆級教程

引言勸退 VSCode&#xff0c;全稱為Visual Studio Code&#xff0c;是由微軟開發的一款輕量級&#xff0c;跨平臺的代碼編輯器。大家能來搜用VSCode配置c/c&#xff0c;想必也知道VSCode的強大&#xff0c;可以手握一個VSCode同時編寫如C&#xff0c;C&#xff0c;C#&#xff…

微服務day02-Ribbon負載均衡與Nacos安裝與入門

一.Ribbon負載均衡 在上一節中&#xff0c;我們通過在RestTemplte實例中加上了注解 LoadBalanced,表示將來由RestTemplate發起的請求會被Ribbon攔截和處理&#xff0c;實現了訪問服務時的負載均衡&#xff0c;那么他是如何實現的呢&#xff1f; 1.1 Ribbon負載均衡的原理 Rib…

鏈表的歸并排序-LeetCode(Python版)

雙指針歸并排序&#xff01;圖解排序鏈表&#xff01;-知乎 class ListNode(object):def __init__(self, val0, nextNone):self.val valself.next nextclass Solution(object):def find_mid(self, head): # 快慢指針slow, fast head, headwhile fast.next and fast.next.n…

linux 硬盤存儲剩余容量自動化監控+報警通知

linux 硬盤存儲剩余容量自動化監控報警通知 編寫shell腳本 #!/bin/bash# 獲取系統存儲大小&#xff08;單位為GB&#xff09; storage_size$(df -h / | awk NR2 {print $4} | sed s/G//)# 閾值&#xff08;小于10GB觸發報警&#xff09; threshold10# 釘釘機器人 Webhook UR…

LabVIEW非接觸式電阻抗層析成像系統

LabVIEW非接觸式電阻抗層析成像系統 非接觸式電阻抗層析成像&#xff08;NEIT&#xff09;技術以其無輻射、非接觸、響應速度快的特點&#xff0c;為實時監測提供了新的解決方案。基于LabVIEW的電阻抗層析成像系統&#xff0c;實現了數據的在線采集及實時成像&#xff0c;提高…

代碼隨想錄算法訓練營第四十四天|139.單詞拆分、56.攜帶礦石資源

139.單詞拆分 思路&#xff1a;將字符串s看作為背包容量&#xff0c;從字符串中獲取物品&#xff0c;剛好滿足背包容量的過程&#xff0c;因為可以從字符串中多次取值&#xff0c;相當于物品的數量是不限制&#xff0c;這就是一個完全背包的問題&#xff01;這個題有個關鍵點&a…

Python中的windows路徑問題

在Python中處理Windows路徑時,經常會遇到一些特殊的問題。這主要是因為Windows和大多數其他操作系統(如Linux和macOS)使用不同的路徑分隔符。在Windows中,路徑使用反斜杠(\)作為分隔符,而在其他操作系統中,路徑使用正斜杠(/)作為分隔符。 以下是在Python中處理Windo…

Java SE:多線程(Thread)

1. 線程兩個基本概念 并發&#xff1a;即線程交替運行多個指令并行&#xff1a;即多個線程同時運行指令 并發并行不矛盾&#xff0c;兩者可同時發生&#xff0c;即多個線程交替運行指令 2. 多線程3種實現方式 2.1 直接創建線程對象 /*** 方式1&#xff1a;* 1. 創建thread類的…

mybatis plus 深入學習 【Base Mapper】的方法 【IService】的方法

mybatis plus 深入學習 常見注解 1.TableName 描述&#xff1a;表名注解&#xff0c;標識實體類對應的表使用位置&#xff1a;實體類 TableName("sys_user") public class User {private Long id;private String name;private Integer age;private String email;…

【Linux系統化學習】信號的保存

目錄 阻塞信號 信號處理常見方式概覽 信號的其他相關概念 在內核中的表示 sigset_t 信號集操作函數 sigprocmask函數 sigpending函數 信號的捕捉 內核如何實現信號的捕捉 sigaction函數 可重入函數 volatile 阻塞信號 信號處理常見方式概覽 當信號來臨時&#x…

c++算法入門教程(2)

C是一種功能強大且廣泛應用的編程語言&#xff0c;對于想要深入學習編程和算法的人來說&#xff0c;掌握C是一個重要的里程碑。本文將帶你逐步了解C編程的基礎知識&#xff0c;并介紹一些常見的算法和編程技巧幫你入門c算法。 ?在c算法入門教程(1) 中&#xff0c;我講解了什么…

GEE:使用Sigmoid激活函數對單波段圖像進行變換(以NDVI為例)

作者:CSDN @ _養樂多_ 本文將介紹在 Google Earth Engine (GEE)平臺上,對任意單波段影像進行 Sigmoid 變換的代碼。并以對 NDVI 影像像素值的變換為例。 文章目錄 一、Sigmoid激活函數1.1 什么是 Sigmoid 激活函數1.2 用到遙感圖像上有什么用?二、代碼鏈接三、完整代碼一…

查詢每個會話使用內存大小(DM8達夢數據庫)

DM8達夢數據庫查詢每個會話使用內存大小 1 環境介紹2 查詢每個sql會話使用內存大小3 達夢數據庫學習使用列表 1 環境介紹 在某些環境數據庫內存增長到服務器內存用完,發生OOM事件,可以分析sql會話使用內存大小; 2 查詢每個sql會話使用內存大小 --創建SQL會話占用內存記錄表 …

共享棧的C語言實現

共享棧&#xff1a;所謂共享棧就是為了節省空間&#xff0c;讓兩個棧共享一片連續的存儲空間&#xff0c;兩個棧從這片連續的共享空間的兩端向中間擴充自己的存儲空間&#xff0c;設這片存儲空間的大小為maxSize&#xff0c;采用棧頂指針始終指向當前棧頂元素的方式來實現共享棧…

簡單認識算法的復雜度

時間復雜度與空間復雜度 1.算法的復雜度 ? 算法在編寫成可執行程序后&#xff0c;運行時需要耗費時間資源和空間(內存)資源 。因此衡量一個算法的好壞&#xff0c;一般是從時間和空間兩個維度來衡量的&#xff0c;即時間復雜度和空間復雜度。 ? 時間復雜度主要衡量一個算法…

MYSQL02高級_目錄結構、默認數據庫、表文件、系統獨立表空間

文章目錄 ①. MySQL目錄結構②. 查看默認數據庫③. MYSQL5.7和8表文件③. 系統、獨立表空間 ①. MySQL目錄結構 ①. 如何查看關聯mysql目錄 [rootmysql8 ~]# find / -name mysql /var/lib/mysql /var/lib/mysql/mysql /etc/selinux/targeted/tmp/modules/100/mysql /etc/seli…

前端src中圖片img標簽資源的幾種寫法?

在 Vue 項目中引用圖片路徑有幾種不同的方法&#xff0c;具體取決于你的項目結構和配置。以下是幾種常見的方式&#xff1a; 1. 靜態資源目錄 (Public) 如果你的圖片放在了項目的 public 目錄下&#xff08;例如&#xff0c;Vite 和 Create Vue App 腳手架工具通常使用這個目…

05 OpenCV圖像混合技術

文章目錄 理論算子示例 理論 其中 的取值范圍為0~1之間 算子 addWeighted CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2, double beta,double gamma, OutputArray dst, int dtype -1 ); 參數1&#xff1a;輸入圖像Mat …