最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java中的println輸入和toString方法的重寫問題

 更新時間:2022年04月22日 14:39:03   作者:是小魚兒哈  
這篇文章主要介紹了Java中的println輸入和toString方法的重寫,一個對象數(shù)組在調(diào)用Arrays.toString打印時,相當(dāng)于遍歷數(shù)組,然后打印里邊每個對象,這再打印對象就調(diào)用對象自己的toString了,需要的朋友可以參考下

println()直接打印

我們都知道println()如果打印的是基本數(shù)據(jù)類型的話直接打印出來的就是值,你如果是引用數(shù)據(jù)類型呢?

916a11449a3e1757f28a248eb07ff780.png

??除掉這四類八種基本類型,其它的都是對象,也就是引用類型,包括數(shù)組。

讓我們來測試一下

public class test1 {
    public static void main(String[] args) {
        int[] ret = {1, 2, 3, 4}; 
        System.out.println(ret); // 括號里是一個引用數(shù)據(jù)類型
    }
}

??這是個什么東東,是地址嗎?

讓我們扒開println的源碼看看,在IDEA中只需鼠標(biāo)放到println的位置,然后ctrl + 鼠標(biāo)左鍵點過去就行了,就能看到println的源碼了

??然后我們來到了valueof方法內(nèi)部

??最后來到了object類中的toString方法內(nèi)部

??再來看看剛才我們的輸出:

好像,我們用println()打印出來的就是上面toString方法里的內(nèi)容,

而:

toString()方法是在Object類里面的方法,它返回的是String型的數(shù)據(jù):類名+@+哈希值的16進(jìn)制形式

??其實具體Object類中的toString方法干了什么我們不用弄得太清楚,我們只要知道println()在打印引用數(shù)據(jù)類型的時候打印的是Object類中的toString內(nèi)容就好了。

但對于這個Object類,我們得說道說道。

Object 是Java類庫中的一個特殊類,也是所有類的父類。也就是說,Java 允許把任何類型的對象賦給 Object 類型的變量。當(dāng)一個類被定義后,如果沒有指定繼承的父類,那么默認(rèn)父類就是 Object 類。

toString的使用

??先看看這個栗子

class Student1 {
    private String name;
    private int score;
    public Student1(String name, int score) {
        this.name = name;
        this.score = score;
    }
}
public class test2 {
    public String author = "what!!!";
    public static void main(String[] args) {
        // 我們自定義了一個學(xué)生對象student1
        Student1 student1 = new Student1("張三", 42); 
        System.out.println(student1);
    }
}

那我們該怎樣輸出引用類型的值呢?

我們上面不是說了嗎?Object是所有類的父類,既然在打印引用變量的時候調(diào)用了Object類的toString方法,我們可以可以在object的子類重寫toString方法

??那么我們就可以在我們自定義的學(xué)生類里重寫父類toString的方法

??同時告訴大家一個好消息,在IDEA里有相應(yīng)的快捷方式,可以幫助我們重寫父類的方法toString

??然后我們的代碼就變成了這樣

class Student1 {
    private String name;
    private int score;
    public Student1(String name, int score) {
        this.name = name;
        this.score = score;
    }
     //在我們自定義的子類里重寫toString方法
    @Override
    public String toString() {
        return "Student1{" +
                "name='" + name + '\'' +
                ", score=" + score +
                '}';
}
public class test2 {
    public static void main(String[] args) {
        // 我們自定義了一個學(xué)生對象student1
        Student1 student1 = new Student1("張三", 42);
        System.out.println(student1);

?? 這樣的話,我們就在自己的類中重寫了Object的toString方法,那么println()調(diào)用的就是我們重寫的toString方法,自然就打印出來了值。

其他的一些情況

??如果我們想打印一個數(shù)組呢?

public class test2 {
    public static void main(String[] args) {
        int[] ret = new int[]{1, 2, 3};
        System.out.println(ret);
    }
}

??如果是一個數(shù)組,我們想重寫toString方法都不知道應(yīng)該在哪個地方重寫。這時候我們該怎么辦呢?別急在Arrays類中專門提供了一個打印數(shù)組類型的方法——toString

??(不要誤會,這是Arrays自己的toString方法,不是從父類Object繼承的那個toString方法,他們只是名字重合了而已。千萬不要把他當(dāng)成是對父類Object的toString方法的重寫,因為他們的參數(shù)列表都不一樣)

public class test2 {
    public static void main(String[] args) {
        int[] ret = new int[]{1, 2, 3};
        System.out.println(Arrays.toString(ret));
    }
}

??為啥會這樣呢?我們扒拉toString的源碼就知道了---》按住ctrl,然后鼠標(biāo)放在Arrays.toString的上面,點進(jìn)去。

于是上面那個整形數(shù)組就按照Arrays類中toString方法成功打印出來了。

??提醒一下,Arrays就是一個數(shù)組工具類呀!

??????????????????????????????

??再來看看這段代碼:

public class test2 {
    public static void main(String[] args) {
        String name = "小魚兒";
        System.out.println(name);
    }
}

??因為String本身就是一個類,String類重寫了父類Object的toString方法??,所以在println調(diào)用Object的toString時,調(diào)用的其實是String類重寫的toString方法。

而 String類重寫的toString()方法返回它本身,自然就直接打印出來了

??既然可以直接打一個對象的引用,那么如果我們想打印一個數(shù)組,數(shù)組里每個元素都是一個對象的引用呢?

class Student1 {
    private String name;
    private int score;
    public Student1(String name, int score) {
        this.name = name;
        this.score = score;
    }
}
public class test2 {
    public String author = "what!!!";
    public static void main(String[] args) {
        Student1[] students = new Student1[]{
                new Student1("張三", 95),
                new Student1("李四", 96),
                new Student1("王五", 97),
                new Student1("趙六", 92),
        };
        // 如果我們要打印的這個數(shù)組的每一個元素都是對象的引用呢?
        // 因為是數(shù)組,所以要用的我們的數(shù)組工具類Aarrys對每一個數(shù)組元素進(jìn)行操作
        System.out.println(Arrays.toString(students));
    }
}

為啥呢?再看看Arrays類的toString方法是怎樣處理每個對象引用就知道了

??讓我們鼠標(biāo)放在Arrays的toString方法上,按住ctrl然后鼠標(biāo)點進(jìn)去

??下面就是是String類的valueOf方法

??看來Arrays類toStirng方法對數(shù)組的每個元素都調(diào)用了父類Object的toString方法了呀!但問題此時我們沒有重寫父類的Object的toString方法呀!

你可能會說,Arrays類不是重寫了嗎?兄弟?。?!Arrays類的toString是人家自己的方法,和父類Object的toString方法沒有一點關(guān)系,人家只碰巧名字相同罷了。并且Arrays的toString方法是有參的,而Object的是沒參數(shù)的,怎么可能構(gòu)成重寫呢?

??既然這樣那么就讓我們在自己定義的學(xué)生類中重寫一下toString方法后,再調(diào)用Arrays.toString吧!

class Student1 {
    private String name;
    private int score;
    public Student1(String name, int score) {
        this.name = name;
        this.score = score;
    }
    // 在我們自定義的子類里重寫toString方法,然后再用Arrays類中的重寫的toString方法
 
    @Override
    public String toString() {
        return "Student1{" +
                "name='" + name + '\'' +
                ", score=" + score +
                '}';
    }
}
public class test2 {
    public String author = "what!!!";
    public static void main(String[] args) {
        Student1[] students = new Student1[]{
                new Student1("張三", 95),
                new Student1("李四", 96),
                new Student1("王五", 97),
                new Student1("趙六", 92),
        };
        // 如果我們要打印的這個數(shù)組的每一個元素都是對象的引用呢?
        System.out.println(Arrays.toString(students));
    }
}

看來還是得自己再重寫一下toString方法??

??總結(jié)一下就是:

一個對象數(shù)組在調(diào)用Arrays.toString打印時,相當(dāng)于遍歷數(shù)組,然后打印里邊每個對象,這再打印對象就調(diào)用對象自己的toString了

到此這篇關(guān)于Java中的println輸入和toString方法的重寫的文章就介紹到這了,更多相關(guān)java println輸入和toString方法重寫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot如何使用AOP做訪問請求日志

    springboot如何使用AOP做訪問請求日志

    這篇文章主要介紹了springboot如何使用AOP做訪問請求日志,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Springboot jpa @Column命名大小寫問題及解決

    Springboot jpa @Column命名大小寫問題及解決

    這篇文章主要介紹了Springboot jpa @Column命名大小寫問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java使用正則表達(dá)為數(shù)字添加千位符的簡單方法

    java使用正則表達(dá)為數(shù)字添加千位符的簡單方法

    這篇文章主要介紹了java使用正則表達(dá)為數(shù)字添加千位符的簡單方法,需要的朋友可以參考下
    2014-04-04
  • shiro編碼和加密代碼詳解

    shiro編碼和加密代碼詳解

    Shiro提供了base64和16進(jìn)制字符串編碼/解碼的API支持,方便一些編碼解碼操作。下面通過實例代碼給大家詳解shiro編碼和加密知識,感興趣的朋友一起看看吧
    2017-09-09
  • Java調(diào)用CXF WebService接口的兩種方式實例

    Java調(diào)用CXF WebService接口的兩種方式實例

    今天小編就為大家分享一篇關(guān)于Java調(diào)用CXF WebService接口的兩種方式實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 如何解決報錯:java.net.BindException:無法指定被請求的地址問題

    如何解決報錯:java.net.BindException:無法指定被請求的地址問題

    在Linux虛擬機上安裝并啟動Tomcat時遇到啟動失敗的問題,通過檢查端口及配置文件未發(fā)現(xiàn)異常,后發(fā)現(xiàn)/etc/hosts文件中缺少localhost的映射,添加后重啟Tomcat成功,Tomcat啟動時會檢查localhost的IP映射,缺失或錯誤都可能導(dǎo)致啟動失敗
    2024-10-10
  • Spring Boot系列教程之死信隊列詳解

    Spring Boot系列教程之死信隊列詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot系列教程之死信隊列的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • 使用nacos命名空間namespace用法,測試時做實例隔離

    使用nacos命名空間namespace用法,測試時做實例隔離

    Nacos命名空間用于管理多套不同環(huán)境的服務(wù)器,增加一個命名空間的概念,可以用一套Nacos注冊中心管理多套不同的環(huán)境
    2024-12-12
  • Mybatis優(yōu)化檢索的方法詳解

    Mybatis優(yōu)化檢索的方法詳解

    MyBatis是一款優(yōu)秀的基于Java的持久層框架,它可以將 SQL 語句和數(shù)據(jù)庫中的記錄映射成為 Java 對象,并且支持靈活的 SQL 查詢語句,在Mybatis中,可以使用動態(tài)SQL來靈活構(gòu)造SQL語句,從而滿足各種不同的檢索需求,本文介紹Mybatis如何優(yōu)化檢索,需要的朋友可以參考下
    2024-05-05
  • Java JDBC基本使用方法詳解

    Java JDBC基本使用方法詳解

    這篇文章主要介紹了Java JDBC基本使用方法,結(jié)合實例形式詳細(xì)分析了java JDBC基本原理、用法及操作注意事項,需要的朋友可以參考下
    2020-04-04

最新評論

漠河县| 弥勒县| 霍州市| 稻城县| 宝应县| 衡东县| 白河县| 商河县| 西充县| 镇宁| 抚宁县| 南漳县| 拉孜县| 建昌县| 丹凤县| 金阳县| 文成县| 城固县| 沛县| 扎赉特旗| 枣强县| 吉隆县| 庆元县| 大余县| 开阳县| 师宗县| 揭西县| 平遥县| 德钦县| 务川| 郓城县| 沾化县| 舟曲县| 双柏县| 枝江市| 南开区| 永定县| 卓资县| 陕西省| 嘉荫县| 通城县|