黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

Java面向?qū)ο?/div>
Java異常
Java數(shù)組
Java常用類
Java集合
Java IO流
Java線程
Java反射
Socket編程
Java注解開發(fā)
Java GoF設(shè)計模式
HashMap
Java內(nèi)存模型
Java線性表

Java Object類

Object類是所有類的根父類, Java中的類要么直接繼承Object要么間接繼承Object

Java中的繼承是可傳遞的, 所以O(shè)bject類的方法所有的類都能繼承到

Java中Object類的方法

protected Object:clone() 對象的克隆

boolean:equals(Object obj) 判斷對象的內(nèi)容是否一樣.

protected void:finalize() 當(dāng)垃圾回收器回收這個對象時,會調(diào)用該方法

Class<?>:getClass() 返回對象的運行時類.

int:hashCode() 返回對象的哈希碼.

void:notify() 喚醒等待中的線程

void:notifyAll() 

String:toString() 把對象轉(zhuǎn)換為字符串.

void:wait() 線程等待

● clone()

對象克隆, 是在堆中再創(chuàng)建一個完全一樣的對象

● finalize()

當(dāng)一個對象沒有變量引用它時, 垃圾回收器就會把這個對象釋放, 回收該對象時會調(diào)用對象的finalize()方法, 垃圾回收器在什么時候回收這個對象不確定, finalize()方法的執(zhí)行時間不確定, 該方法一般不用

● wait()/notify()

線程等待/喚醒線程

● getClass()

返回對象的運行時類對象

把所有小狗可以抽象為Dog類, 把所有小貓抽象為Cat類,把所有人抽象為Person類, 把Dog/Cat/Person/String/System等所有的類進一步抽象為Class類. Class類描述的是所有類的相同的特征

getClass()方法返回當(dāng)前對象對應(yīng)的Class對象

當(dāng)前前可以簡單的把getClass()方法理解為返回對象的類, 或者理解為返回對象對應(yīng)的類的字節(jié)碼文件, 可以利用這個方法判斷兩個對象的類是否是同一個類

Person ?p1 = new Person();

Person ?p2 ?= ?new Person();

if( ?p1.getClass() == p2.getClass() ?){

p1和p2是同一個類型的對象

}

● toString()

作用是把對象轉(zhuǎn)換為字符串

當(dāng)使用Sytem.out.println(obj)打印對象時,會調(diào)用obj對象的toString()方法

toString()默認(rèn)顯示完整類名@十六進制數(shù), 如果想要打印obj對象的各個字段值, 需要重寫toString()

使用Sytem.out.println(obj)打印對象時,如果顯示的內(nèi)容不是完整類名@哈希碼十六進制形式時, obj的類或者父類肯定重寫過toString()方法

package com.bjpowernode.chapter01.demo03;

import java.util.ArrayList;

/**
 * 測試toString()方法
 * @author Administrator
 *
 */
public class Test01 {

	public static void main(String[] args) {
		//創(chuàng)建Person對象
		Person lisi = new Person("lisi", 18, "男");
		//在屏幕上打印lisi
		System.out.println( lisi );
		/*
		 * 輸出結(jié)果:
		 * 		com.bjpowernode.chapter01.demo03.Person@15db9742
		 * 			完整類名 @ 十六進制數(shù)	
		 * 分析:
		 * 		1) 在使用System.out.println()打印一個對象時, 在println()方法體中,先把對象轉(zhuǎn)換為字符串再打印
		 * 			調(diào)用了String類的valueOf()方法
		 * 		2)在String類的valueOf()方法中,調(diào)用了對象的toString()方法
		 * 			toString()方法是從Object類繼承來的
		 * 		3)在Object類中, toString()方法返回以下內(nèi)容:
		 * 			getClass().getName() + "@" + Integer.toHexString(hashCode())
		 * 			運行時類的完整類名 + "@" + 哈希碼的十六進制
		 * 結(jié)論:
		 * 		當(dāng)使用System.out.println()打印一個對象時, 會調(diào)用對象的toString()方法
		 * 需求:
		 * 		當(dāng)使用System.out.println()打印一個對象時, 顯示該對象的各個字段值(各個成員變量值)
		 */
		//上面一行,相當(dāng)于下面這一行,
		System.out.println( lisi.toString() );
		//toString()是從Object繼承來的,默認(rèn)顯示完整類名 , 想要顯示各個字段值 ,需要在子類中重寫toString()
		//當(dāng)子類從父類繼承的方法,滿足不了子類需求時,需要重寫該方法
		
		String s1 = "feifei";
		System.out.println( s1 ); 	//feifei, 顯示不是完整類名,String類應(yīng)該重寫了toString()方法
		Integer num = new Integer(456);
		System.out.println( num ); 	//456
		ArrayList list = new ArrayList<>();
		System.out.println( list ); //[], ArrayList的爺爺類AbstractCollection重寫了toString()
		
		
	}

}
package com.bjpowernode.chapter01.demo03;

public class Person {
	String name;
	int age;
	String gender; 			//性別  
	
	public Person() {
	}
	public Person( String name, int age, String gender){
		this.age = age;
		this.name = name;
		this.gender = gender;
	}
	
	//重寫toString()方法
	@Override						//注解,驗證重寫是否正確
	public String toString() {
		return "name:" + name + ",age:" + age + ",gender:" + gender;
	}
}

● equals()

使用關(guān)系運算符 == 判斷兩個引用是否指向堆中的同一個對象

用equals()方法判斷兩個對象的內(nèi)容是否一樣,即各個字段值是否相等

如果兩個類需要使用equals()判斷兩個對象是否一樣時,需要重寫equals()方法

就像之前判斷兩個字符串是否一樣時,需要調(diào)用equals()方法, String類已經(jīng)重寫過equals()方法了

package com.bjpowernode.chapter01.demo03;

public class Book {
	String name;
	String author;
	String press;
	double price;
	
	public Book( String name, String author, String press, double price) {
		this.author = author;
		this.name = name;
		this.press = press;
		this.price = price;
	}
	
	//重寫equals()方法
	@Override
	public boolean equals(Object obj) {
		// 依次判斷兩個對象的內(nèi)容, 如果一個不相同的就返回false, 如果都相同就返回true
		//1)兩個變量引用同一個對象, 返回true
		if ( this == obj ) {
			return true;
		}
		//2)參數(shù)為null, 返回false
		if ( obj == null ) {
			return false;
		}
		//3) 如果參數(shù)對象和當(dāng)前對象不是同一個類型,返回false
		if ( this.getClass() != obj.getClass() ) {
			return false;
		}
		//4) 當(dāng)前對象與參數(shù)對象類型一樣, 如果有一個字段的值不相等,就返回false
		//先把obj對象轉(zhuǎn)換為Book類型
		Book other = (Book) obj;
		//判斷書名, 如果書名不一樣就返回false
		if ( this.name == null ) {
			if ( other.name != null ) {
				return false; 			//當(dāng)前書名為null,參數(shù)對象書名不為null返回false
			}			
		}else if ( !this.name.equals(other.name) ) {   //當(dāng)前書名不為null, 與參數(shù)對象的書名不一樣 返回false
			return false;
		}
		//判斷作者, 如果作者不一樣就返回false
		if ( this.author == null ){
			if (other.author != null) {
				return false;
			}
		}else if ( !this.author.equals(other.author)) {
			return false;
		}
		//判斷出版社
		if (this.press == null ) {
			if (other.press != null) {
				return false;
			}
		}else if ( !this.press.equals(other.press)) {
			return false;
		}
		//判斷價格,price字段是一個小數(shù), 在計算機 中小數(shù)采用近似值保存,不準(zhǔn)確, 不能直接 使用== 判斷
		//可以比較兩個小數(shù)的差值, 根據(jù)差值是否小于指定的閾值,來判斷兩個小數(shù)是否相等
		if ( this.price - other.price > 0.01 || other.price - this.price > 0.01 ) {
			return false; 		//兩本書的差值大于 0.01元就認(rèn)為不相等
		}
				
		return true;
	}
	
}
package com.bjpowernode.chapter01.demo03;
/**
 * 測試equals()方法
 * @author Administrator
 *
 */
public class Test02 {

	public static void main(String[] args) {
		Book myBook1 = new Book("java入門", "勇哥", "動力節(jié)點", 66.6);
		Book myBook2 = new Book("java入門", "勇哥", "動力節(jié)點", 66.6);
		
		System.out.println( myBook1 == myBook2 ); 		//false
		/*
		 * 關(guān)系運算符==, 判斷兩個變量的值是否相等  ,
		 * myBook1變量存儲堆中的一個對象的引用, myBook2變量存儲另外一個對象的引用
		 */
		
		//需求: 判斷堆中兩個對象的內(nèi)容是否一樣,可以調(diào)用equals()方法,該方法是從Object類繼承的, Object類中equals()根據(jù)==判斷是否相等
		System.out.println( myBook1.equals(myBook2) ); 
		
		Book myBook3 = myBook1;			//兩個變量引用堆中同一個對象
		System.out.println( myBook1.equals(myBook3));  		//true
		
		Book mybook4 = null;
		System.out.println( myBook1.equals(mybook4));    	//false
		
		Person  lisi = new Person();
		System.out.println( myBook1.equals(lisi));  		//false
		
		Book myBook5 = new Book("java入門", "勇哥", "動力節(jié)點", 66.6);
		System.out.println( myBook1.equals(myBook5));  		//true
		
		
	}

}

● hashCode()

根據(jù)哈希約定, 如果兩個對象equals()相等, 這兩個對象的哈希碼也應(yīng)該相等

在重寫equals()方法時,必須同時重寫hashCode()

主站蜘蛛池模板: 成人网18免费下 | 国产黄色在线播放 | 人人人干 | 91最新免费地址入口 | 欧美专区在线播放 | 黄网免费看| 欧美xxxx三人交性视频 | 国产欧美精品一区aⅴ影院 国产欧美成人一区二区三区 | 国产高清天干天天美女 | 成人欧美一区二区三区在线 | 成年视频xxxxx在线入口 | 伊人热人久久中文字幕 | 国产黑丝美女 | 欧美日韩免费在线视频 | 天天躁日日躁狠狠躁黑人躁 | 日韩区 | 高清中国一级毛片免费 | 精品无码一区在线观看 | 最新国产三级 | 久久精品网址 | 国内一级片 | 久久综合九色综合97飘花 | 免费色黄网站 | 欧美激情视频一区二区三区 | 麻豆国产人免费人成免费视频 | www.黄色网.com| 伊人色综合琪琪久久社区 | 免费观看日皮视频 | 午夜嘿嘿| 人人添人人澡人人澡人人人人 | 免费观看国产精品 | 亚洲经典激情春色另类 | 女人牲交视频一级毛片 | 久久合| 国产一区二区不卡 | 国内视频一区二区三区 | 成人a免费α片在线视频网站 | 性欧美videos粗暴 | 免费一级片视频 | 日日日插插插 | 欧美性天天影院欧美狂野 |