java開發者阿里巴巴面試官:“請優雅的打印一個類給我看”

前言

跳槽時時刻刻都在發生,但是我建議大家跳槽之前,**先想清楚為什麼要跳槽。**切不可跟風,看到同事一個個都走了,自己也盲目的開始面試起來(期間也沒有準備充分),

到底是因為技術原因(影響自己的發展,偏移自己規劃的軌跡),還是錢給少了,不受重視。

準備不充分的面試,完全是浪費時間,更是對自己的不負責(如果title很高,當我沒說)。


java開發者阿里巴巴面試官:“請優雅的打印一個類給我看”


你見過面試一個不懂技術的人事總監叫你打印一個類嗎?

打印一個類還不簡單嗎?縱觀老夫馳剎風雲10年間什麼樣的面試官沒有見過,什麼奇葩的面試題沒有見過。

要打印一個類只需把類放進Println()裡面就行。

於是隨手就寫出了一行

把打印的類先定義:

public class User {

private String name;

private int age;

public User() {

}

public void SetName(String _name) {

this.name=_name;

}

public void SetAge(int _age) {

this.age=_age;

}


}


接著打印:

public class sadsa {

public static void main(String[] args) {

// TODO Auto-generated method stub

var user=new User();

user.SetName("消化");

user.SetAge(18);

System.out.println(user);

}

}

於是i很順利的輸出

aa.User@2d363fb3


java開發者阿里巴巴面試官:“請優雅的打印一個類給我看”

什麼你說這樣不美觀?what!!!你又不是美術總監還懂得欣賞代碼的美觀?

好吧好吧,我滿足你的要求還不行嗎!!!

重寫toString()

public String toString() {

return this.getClass().getSimpleName()+"@"+"name="+this.name+"age="+this.age;

}


java開發者阿里巴巴面試官:“請優雅的打印一個類給我看”

打印:


User@name=消化age=18


這回美觀了吧。


為什麼會有重寫toString()

所有的 Java 對象都默認附帶了一個 toString() 的方法,當我們嘗試打印這個對象的時候,該方法就會被調用。

toString() 方法由 Object 類(所有 Java 對象的超類)定義,該方法會返回一個看起來晦澀難懂的字符串:

1)Class 名,由包名和類名組成,比如 com.Cmower;

2)@ 連接符;

3)十六進制的哈希碼。

來看一下它醜陋的面容

public String toString() {

return getClass().getName() + "@" + Integer.toHexString(hashCode());

}

如果想在打印的時候輸出自己希望預期的結果,那麼就必須在類中重寫 toString() 方法

java中重寫toString()方法的意義,百分之80的程序員都不懂。

Object 類的 toString 方法返回一個字符串,該字符串由類名(對象是該類的一個實例)、at 標記符“@”和此對象哈希碼的無符號十六進制表示組成。換句話說,該方法返回一個字符串,它的值等於:

getClass().getName() + '@' + Integer.toHexString(hashCode())

我們為什麼要重寫它呢?

當我們需要調試一個類的時候,或者初始化的時候想知道這個類的成員變量有沒有正確賦值,因為在產生一個類的時候往往需要經過複雜的運算,這時如果我們想知道這個類的全部或某一個成員變量是不是得到正確的賦值就會選擇重寫ToString(),最後打印這個類就行。


java開發者阿里巴巴面試官:“請優雅的打印一個類給我看”



分享到:


相關文章: