欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java?Object類中常用API分享

 更新時間:2023年10月07日 10:31:08   作者:閑不住的碼  
Object類是java中所有類的祖宗類,因此java中所有的類的對象都可以直接使用Object類中提供的一些方法,下面小編為大家整理了Object類中常用API,希望對大家有所幫助

java常用API-Object

Object類是java中所有類的祖宗類,因此,java中所有的類的對象都可以直接使用Object類中提供的一些方法

Clone-對象克隆

clone 就是復(fù)制 , 在Java語言中, clone方法被對象調(diào)用,所以會復(fù)制對象。所謂的復(fù)制對象,首先要分配一個和源對象同樣大小的空間,在這個空間中創(chuàng)建一個新的對象。

這和new 也是大同小異的:

new與clone創(chuàng)建對象的區(qū)別

new操作符的本意是分配內(nèi)存。程序執(zhí)行到new操作符時, 首先去看new操作符后面的類型,根據(jù)類型分配內(nèi)存,再調(diào)用構(gòu)造函數(shù),填充對象的各個域,這一步就叫對象的初始化。初始化完畢后,可以把他的引用(地址)發(fā)布到外部,在外部就可以通過引用操縱這個對象。 clone在第一步是和new相似的,都是分配內(nèi)存,調(diào)用clone方法時,分配的內(nèi)存和源對象一樣,然后再使用源對象中對應(yīng)的各個域,填充新對象的域。同樣可以可以把這個新對象的引用發(fā)布到外部 。

基本使用

本次就用users這個類來做實(shí)驗(yàn)

當(dāng)然要注意的是在使用clone的時候,需要對象重寫clone方法,對象才可以使用,并且要實(shí)現(xiàn)Cloneable這個接口

public class Users implements Cloneable {
 ? ?private String name;
 ? ?private String address;
 ? ?private int age;
 ? ?private char sex;
 ? ?private String[] obj;
?
 ? ?public Users() {
 ?  }
?
 ? ?public Users(String name, String address, int age, char sex, String[] obj) {
 ? ? ? ?this.name = name;
 ? ? ? ?this.address = address;
 ? ? ? ?this.age = age;
 ? ? ? ?this.sex = sex;
 ? ? ? ?this.obj = obj;
 ?  }
?
 ? ?public String getName() {
 ? ? ? ?return name;
 ?  }
?
 ? ?public void setName(String name) {
 ? ? ? ?this.name = name;
 ?  }
?
 ? ?public String getAddress() {
 ? ? ? ?return address;
 ?  }
?
 ? ?public void setAddress(String address) {
 ? ? ? ?this.address = address;
 ?  }
?
 ? ?public int getAge() {
 ? ? ? ?return age;
 ?  }
?
 ? ?public void setAge(int age) {
 ? ? ? ?this.age = age;
 ?  }
?
 ? ?public char getSex() {
 ? ? ? ?return sex;
 ?  }
?
 ? ?public void setSex(char sex) {
 ? ? ? ?this.sex = sex;
 ?  }
?
 ? ?public String[] getObj() {
 ? ? ? ?return obj;
 ?  }
?
 ? ?public void setObj(String[] obj) {
 ? ? ? ?this.obj = obj;
 ?  }
?
 ?// 重寫clone方法
 ? @Override
 ? ?protected Object clone() throws CloneNotSupportedException {
 ? ? ? ?return super.clone();
 ?  }
}

然后就可以進(jìn)行簡單的克隆了

public class ObjectDemo1 {
 ? ?public static void main(String[] args) throws CloneNotSupportedException {
 ? ? ? ?String[] s1={"hh","feig"};
 ? ? ? ?String[] s2={"hh","feiwg"};
 ? ? ? ?Users users=new Users("張三","重慶市",19,'男',s1);
 ? ? ? ?Users users1=new Users("張三","重慶市",19,'男',s2);
 ? ? ? ?Users clone = (Users) users.clone();
 ? ? ? ?System.out.println(clone);
 ? ? ? ?// 如果相等說明是同一個對象,就是淺拷貝
 ? ? ? System.out.println(clone);//Users{name='張三', address='重慶市', age=19, sex=男, obj=[hh, feig]}
?
 ?  }
}

淺拷貝和深拷貝

上面age是基本數(shù)據(jù)類型, 對它的拷貝直接將一個4字節(jié)的整數(shù)值拷貝過來就行。但name是String類型的, 只是一個引用, 指向一個真正的String對象,對它的拷貝有兩種:

  • 淺拷貝: 直接將源對象中的name的引用值拷貝給新對象的name字段;
  • 深拷貝: 根據(jù)User源對象中的name指向的字符串對象創(chuàng)建一個新的相同的字符串對象,將這個新字符串對象的引用賦給新拷貝的User對象的name字段。

Java中的clone方法是淺拷貝。

public class ObjectDemo1 {
 ? ?public static void main(String[] args) throws CloneNotSupportedException {
 ? ? ? ?String[] s1={"hh","feig"};
 ? ? ? ?String[] s2={"hh","feiwg"};
 ? ? ? ?Users users=new Users("張三","重慶市",19,'男',s1);
 ? ? ? ?Users users1=new Users("張三","重慶市",19,'男',s2);
 ? ? ? ?Users clone = (Users) users.clone();
 ? ? ? ?System.out.println(clone);
 ? ? ? ?// 如果相等說明是同一個對象,就是淺拷貝
 ? ? ? ?System.out.println(clone.getObj() == users.getObj());// true 
?
 ?  }
}

== 如果兩方是對象,那么比較的就是地址,所有上面克隆的對象和源對象的數(shù)組是指向的同一個地址,所以是淺拷貝

如果想要實(shí)現(xiàn)深拷貝, 可以通過覆蓋重寫Object中的clone方法的方式。 要在clone對象時進(jìn)行深拷貝,就要implements Clonable接口,覆蓋并實(shí)現(xiàn)clone方法,除了調(diào)用父類中的clone方法得到新的對象, 還要將該類中的引用變量也clone出來。如果只是用Object中默認(rèn)的clone方法,是淺拷貝的。

public class ObjectDemo1 {
 ? ?public static void main(String[] args) throws CloneNotSupportedException {
 ? ? ? ?String[] s1={"hh","feig"};
 ? ? ? ?String[] s2={"hh","feiwg"};
 ? ? ? ?Users users=new Users("張三","重慶市",19,'男',s1);
 ? ? ? ?Users users1=new Users("張三","重慶市",19,'男',s2);
 ? ? ? ?Users clone = (Users) users.clone();
 ? ? ? ?System.out.println(clone);
 ? ? ? ?// 如果相等說明是同一個對象,就是淺拷貝
 ? ? ? ?System.out.println(clone.getObj() == users.getObj());// false
?
 ?  }
}

toString-返回對象的字符串形式

一般都是讓對象重寫的方法,如果不重寫那么返回的就是一個地址

主要作用:就是方便返回子類對象的內(nèi)容

public class ObjectDemo1 {
 ? ?public static void main(String[] args) throws CloneNotSupportedException {
 ? ? ? ?String[] s1={"hh","feig"};
 ? ? ? ?String[] s2={"hh","feiwg"};
 ? ? ? ?Users users=new Users("張三","重慶市",19,'男',s1);
 ? ? ? ?Users users1=new Users("張三","重慶市",19,'男',s2);
 ? ? ? ?//沒有重寫toString 方法
 ? ? ? ? // System.out.println(users.toString());  直接打印是一個地址
 ? ? ? ?System.out.println(users.toString()); //常用API2.Users@cbdc0179
 ?  }
}

當(dāng)我們在對象中重寫了toString 方法后:

返回的數(shù)據(jù)的樣式是可以根據(jù)自己的需求來進(jìn)行修改的

@Override
public String toString() {
 ? ?return "Users{" +
 ? ? ? ? ? ?"name='" + name + ''' +
 ? ? ? ? ? ?", address='" + address + ''' +
 ? ? ? ? ? ?", age=" + age +
 ? ? ? ? ? ?", sex=" + sex +
 ? ? ? ? ? ?", obj=" + Arrays.toString(obj) +
 ? ? ? ? ? ?'}';
}
public class ObjectDemo1 {
 ? ?public static void main(String[] args) throws CloneNotSupportedException {
 ? ? ? ?String[] s1={"hh","feig"};
 ? ? ? ?String[] s2={"hh","feiwg"};
 ? ? ? ?Users users=new Users("張三","重慶市",19,'男',s1);
 ? ? ? ?Users users1=new Users("張三","重慶市",19,'男',s2);
 ? ? ? ?//沒有重寫toString 方法
 ? ? ? ? // System.out.println(users.toString());  直接打印是一個地址
 ? ? ? ?System.out.println(users.toString()); //  //Users{name='張三', address='重慶市', age=19, sex=男, obj=[hh, feig]}
 ?  }
}

equals(Object o )-判斷兩個對象是否相等

一般都是讓對象重寫的方法,如果不重寫那么就是基礎(chǔ)的‘’==‘’ 判斷,主要比較的就是兩個對象的地址

public boolean equals(Object obj) {
 ? ?return (this == obj);
}

主要作用:就是方便對象中特定內(nèi)容的值是否相等

public class ObjectDemo1 {
 ? ?public static void main(String[] args) throws CloneNotSupportedException {
 ? ? ? ?String[] s1={"hh","feig"};
 ? ? ? ?String[] s2={"hh","feiwg"};
 ? ? ? ?Users users=new Users("張三","重慶市",19,'男',s1);
 ? ? ? ?Users users1=new Users("張三","重慶市",19,'男',s2);\
 ? ? ? ?//是兩個不同的對象,地址是不相同的
 ? ? ? System.out.println(users.equals(users1)); //false
 ?  }
}

當(dāng)我們在對象中重寫了equals 方法后,就可以根據(jù)需要來比較對象里面的值

比如只比較age,或者sex等等

@Override
public boolean equals(Object o) {
 ? ?if (this == o) return true;
 ? ?if (o == null || getClass() != o.getClass()) return false;
 ? ?Users users = (Users) o;
 ? ?return age == users.age && sex == users.sex && Objects.equals(name, users.name) && Objects.equals(address, users.address) && Arrays.equals(obj, users.obj);
}
public class ObjectDemo1 {
 ? ?public static void main(String[] args) throws CloneNotSupportedException {
 ? ? ? ?String[] s1={"hh","feig"};
 ? ? ? ?String[] s2={"hh","feiwg"};
 ? ? ? ?Users users=new Users("張三","重慶市",19,'男',s1);
 ? ? ? ?Users users1=new Users("張三","重慶市",19,'男',s2);\
 ? ? ? ?//是兩個不同的對象,地址是不相同的
 ? ? ? System.out.println(users.equals(users1)); //false
 ?  }
}

toString存在的意義: toString()方法存在的意義就是為了被子類重寫,以便返回對象具體的內(nèi)容。

equals存在的意義:直接比較兩個對象的地址是否相同完全可以用“==”替代equals,equals存在的意義就是為了被子類重寫,以便子類自己來定制比較規(guī)則(比如比較對象內(nèi)容)。

到此這篇關(guān)于java Object類中常用API分享的文章就介紹到這了,更多相關(guān)java object API內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot Redis實(shí)現(xiàn)接口冪等性校驗(yàn)方法詳細(xì)講解

    SpringBoot Redis實(shí)現(xiàn)接口冪等性校驗(yàn)方法詳細(xì)講解

    這篇文章主要介紹了SpringBoot Redis實(shí)現(xiàn)接口冪等性校驗(yàn)方法,近期一個老項(xiàng)目出現(xiàn)了接口冪等性校驗(yàn)問題,前端加了按鈕置灰,依然被人拉著接口參數(shù)一頓輸出,還是重復(fù)調(diào)用了接口,通過復(fù)制粘貼,完成了后端接口冪等性調(diào)用校驗(yàn)
    2022-11-11
  • Java實(shí)現(xiàn)獲取cpu、內(nèi)存、硬盤、網(wǎng)絡(luò)等信息的方法示例

    Java實(shí)現(xiàn)獲取cpu、內(nèi)存、硬盤、網(wǎng)絡(luò)等信息的方法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)獲取cpu、內(nèi)存、硬盤、網(wǎng)絡(luò)等信息的方法,涉及java使用第三方j(luò)ar包針對本機(jī)硬件的cpu、內(nèi)存、硬盤、網(wǎng)絡(luò)信息等的讀取相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • SpringBoot內(nèi)置tomcat啟動原理詳解

    SpringBoot內(nèi)置tomcat啟動原理詳解

    這篇文章主要介紹了SpringBoot內(nèi)置tomcat啟動原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • SpringBoot?+DynamicDataSource切換多數(shù)據(jù)源的全過程

    SpringBoot?+DynamicDataSource切換多數(shù)據(jù)源的全過程

    這篇文章主要介紹了SpringBoot?+DynamicDataSource切換多數(shù)據(jù)源的全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 字節(jié)二面SpringBoot可以同時處理多少請求

    字節(jié)二面SpringBoot可以同時處理多少請求

    這篇文章主要為大家介紹了字節(jié)二面之SpringBoot可以同時處理多少請求面試分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 手寫redis@Cacheable注解?參數(shù)java對象作為key值詳解

    手寫redis@Cacheable注解?參數(shù)java對象作為key值詳解

    這篇文章主要介紹了手寫redis@Cacheable注解?參數(shù)java對象作為key值詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 解決@JsonInclude(JsonInclude.Include.NON_NULL)不起作用問題

    解決@JsonInclude(JsonInclude.Include.NON_NULL)不起作用問題

    這篇文章主要介紹了解決@JsonInclude(JsonInclude.Include.NON_NULL)不起作用問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • java中ArrayList 、LinkList的區(qū)別分析

    java中ArrayList 、LinkList的區(qū)別分析

    java中ArrayList 、LinkList的區(qū)別分析,需要的朋友可以參考一下
    2013-05-05
  • 使用@Autowired注解警告Field injection is not recommended的解決

    使用@Autowired注解警告Field injection is not recommended的解決

    這篇文章主要介紹了使用@Autowired注解警告Field injection is not recommended的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 將Java項(xiàng)目打包成可執(zhí)行的jar包

    將Java項(xiàng)目打包成可執(zhí)行的jar包

    這篇文章主要介紹了將Java項(xiàng)目打包成可執(zhí)行的jar包,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評論