API的概念理解:java為我們封裝好的類
Pragma mark — NO.1 Object類
#最頂層的類,所有類的超類乓诽,所有對象都實現(xiàn)這個類的方法
1.構造方法: Object()
2.哈希方法: hashCode()
Object obj1 = new Object();
//調用hashCode方法,返回int值
//hashCode就是當前對象的地址值
int hashcode = obj1.hashCode();
System.out.println(hashcode);
3.getClass() :
Students s = new Students("張三",18);
Class clazz = s.getClass(); //獲取該對象的字節(jié)碼文件
//獲取到這個s對應的字節(jié)碼文件賦值給Class這個類逮壁,我們就可以調用其中的方法了
String name = clazz.getName();//返回此class對象所表示的實體(類,接口,基本類等)的名稱 System.out.println(name);//打印出來是該類的名稱
4.toString():返回對象的字符串表示形式(并且將hashCode值轉為16進制表示的) 子類中重寫后粮宛,可以更加方便的顯示屬性值
Students s = new Students("張三",18);
String result = s.toString();
System.out.println(result);
//toString()方法的源碼:
/*
* public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
*觀看源碼我們知道toString方法中到底怎么做的
*分析這個我們沒見過的這個Integer.toHexString()方法
* 首先我們分析Integer是個類巍杈,類調用了一個需要參數(shù)的toHexString方法,
* 這就是一個靜態(tài)方法
* toHexString就是一個將int型轉為String類型的方法
* */
//這個方法意義不大词裤,但是我們可以在子類中重寫這個toString()方法鳖宾,為我們做一些事情
//重寫這個Object類中toString方法
public String toString(){
return "我的姓名是:" + name + ",我的年齡是:"+age;
}
#System.out.println(s); — 重要技巧
//有個技巧鼎文,我們直接打印某個對象的引用,會默認調用這個toString()方法
//所以有時我們?yōu)榱烁玫娘@示某個類拇惋,可以重寫toString方法
5. boolean equals(Object obj):指示一些其他對象是否等與此
Students s = new Students("張三",18);
Students s1 = s;
boolean result = s.equals(s1);//比較的是地址值
System.out.println(result);
//看了源碼撑帖,可以直接這樣寫
System.out.println(s == s1);
/*
* Object中的equals方法是比較對象的地址值的胡嘿,沒有什么意義
* 我們需要重寫這個方法:
* 因為在開發(fā)中,我們通常比較的是兩個對象的屬性,我們認為兩個對象的屬性相等
* 那么他們倆就相等
//重寫equals方法
public boolean equals(Object obj) {
//做成屬性相比較
//首先做一個向下轉型(Object obj 和傳入的student類相當于父類引用指向了子類對象,是向上轉型)
Students s = (Students)obj;
//再調用字符串本身的比較方法來比較這兩個類的屬性值是否相等
if (this.name.equals(s.name) && this.age == this.age){
return true;
}else{
return false;
}
}
/*
* ==號和equals方法的區(qū)別:
* ==:既可以比較基本數(shù)據(jù)類型也可以比較引用數(shù)據(jù)類型箍土,基本數(shù)據(jù)類型比較的是值吴藻,引用數(shù)據(jù)類型比較的是地址
* equals:只能比較引用數(shù)據(jù)類型弓柱,比較的是地址(底層還是依賴的==號),但是沒有意義的矢空,我們需要重寫
*
* */