亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java之不通過(guò)構(gòu)造函數(shù)創(chuàng)建一個(gè)對(duì)象問(wèn)題

 更新時(shí)間:2024年03月25日 10:11:46   作者:楊·戩  
這篇文章主要介紹了Java之不通過(guò)構(gòu)造函數(shù)創(chuàng)建一個(gè)對(duì)象問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1.調(diào)用對(duì)象的clone方法,實(shí)現(xiàn)一個(gè)對(duì)象的創(chuàng)建 

先來(lái)看一個(gè)接口

也就是說(shuō)想要實(shí)現(xiàn)類對(duì)象的克隆,該類就必須實(shí)現(xiàn)這個(gè)Cloneable這個(gè)接口,才表明調(diào)用Object對(duì)象中的clone(0方法是有效的

下面直接上代碼

Demo2.java

package pxx;
 
public class Demo2 {
    public static void main(String[] args) throws CloneNotSupportedException {
        //利用構(gòu)造創(chuàng)建了一個(gè)對(duì)象,這里會(huì)調(diào)用一下無(wú)參構(gòu)造
        TestDemo2 testDemo1 = new TestDemo2();
        //利用clone()方法創(chuàng)建了一個(gè)對(duì)象,沒(méi)有構(gòu)造方法調(diào)用
        TestDemo2 testDemo2 = (TestDemo2) testDemo1.clone();
        testDemo2.setName("周杰倫");
        System.out.println(testDemo1.getName());
        System.out.println(testDemo2.getName());
    }
}
 
class TestDemo2 implements  Cloneable{
    private String  name = "孫悟空";
 
    public TestDemo2() {
        System.out.println("該類無(wú)參構(gòu)造方法");
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    //在這個(gè)方法里面克隆對(duì)象
    @Override
    protected Object clone() throws CloneNotSupportedException {
       Object o = null;
       //調(diào)用父類的clone方法,返回這個(gè)對(duì)象
        o = (TestDemo2)super.clone();
        return o;
    }
}

運(yùn)行結(jié)果:

然后有同學(xué)會(huì)想到通過(guò)反射去實(shí)現(xiàn)一個(gè)對(duì)象也可以,其實(shí)他也是調(diào)用了對(duì)象的構(gòu)造方法,下面我們來(lái)說(shuō)一下吧

2.利用反射機(jī)制來(lái)創(chuàng)建一個(gè)對(duì)象

反射類里面有一個(gè)Constructor類,通過(guò)里面的newInstance方法可以創(chuàng)建一個(gè)對(duì)象

先來(lái)看一個(gè)對(duì)象類 

Person.java

package domain;
 
public class Person {
    private String name;
    private int age;
 
    public String a;
    protected String b;
    String c;
    private String d;
 
 
    public Person() {
        System.out.println("無(wú)參構(gòu)造調(diào)用了");
    }
 
    public Person(String name, int age) {
 
        this.name = name;
        this.age = age;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", a='" + a + '\'' +
                ", b='" + b + '\'' +
                ", c='" + c + '\'' +
                ", d='" + d + '\'' +
                '}';
    }
 
    public  void eat(){
        System.out.println("eat...");
    }
 
    public void eat(String food){
        System.out.println("eat..."+food);
    }
}

下面利用反射來(lái)獲取一個(gè)對(duì)象

Reflect4.java

package reflect;
 
import domain.Person;
 
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
 
public class Reflect4 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
 
        //獲得class類對(duì)象,類文件
        Class  person = Class.forName("domain.Person");
        //利用反射構(gòu)造一個(gè)對(duì)象,這里是拿到無(wú)參構(gòu)造函數(shù)
        Constructor cons1 = person.getConstructor();
        Object obj = cons1.newInstance();//其實(shí)這里還是調(diào)用了構(gòu)造方法
        Person p1 = (Person)obj;
        p1.setName("張三");
        System.out.println(p1.getName());
    }
 
}

運(yùn)行結(jié)果:

很明顯無(wú)參方法被調(diào)用了。

3.我們可以通過(guò)反序列化去創(chuàng)建一個(gè)對(duì)象

要通過(guò)反序列化一個(gè)對(duì)象創(chuàng)建一個(gè)對(duì)象,必須在硬盤上存在一個(gè)序列化文件.ser

下面我在D盤中就存在一個(gè)關(guān)于下面Person類的序列化文件

看我們要通過(guò)反序列化創(chuàng)建的這個(gè)Person類

package domain;
 
import java.io.Serializable;
import java.util.Date;
 
public class Person implements Serializable {
    String name;
    int age;
    String gender;
    //添加了一個(gè)短暫屬性,表明這個(gè)字段不可別序列化
    transient Date birthday;
 
    public Date getBirthday() {
        return birthday;
    }
 
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    public String getGender() {
        return gender;
    }
 
    public void setGender(String gender) {
        this.gender = gender;
    }
}

然后看我們看一下飯序列代碼DeserializeTest1.java

package test;
 
import domain.Person;
 
import java.io.*;
 
public class DeserializeTest1 {
    public static void main(String[] args)  {
        //將文件進(jìn)行反序列化
        Person p = null;
        //建立一個(gè)反序列化對(duì)象
        //這里是.ser序列化的文件
        FileInputStream fis = null;
        ObjectInputStream objectInputStream = null;
        try {
            fis = new FileInputStream("D:/w.ser");
            objectInputStream = new ObjectInputStream(fis);
            p = (Person) objectInputStream.readObject();
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                objectInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
 
        //上面就會(huì)反序列化之前我們?cè)谖募写娣诺膶?duì)象
        //然后訪問(wèn)一下之前創(chuàng)建的對(duì)象
        System.out.println("Name: " + p.getName());
        System.out.println("age: " + p.getAge());
        System.out.println("gender: " + p.getGender());
        System.out.println("birthday: " + p.getBirthday());
    }
}

運(yùn)行結(jié)果:

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java利用redis實(shí)現(xiàn)防止接口重復(fù)提交

    Java利用redis實(shí)現(xiàn)防止接口重復(fù)提交

    本文主要為大家詳細(xì)介紹了Java如何利用redis實(shí)現(xiàn)防止接口重復(fù)提交,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-11-11
  • Java反射(Class類,Class對(duì)象獲取)

    Java反射(Class類,Class對(duì)象獲取)

    下面是對(duì)Java反射機(jī)制是在程序的運(yùn)行過(guò)程中,Java語(yǔ)言的反射機(jī)制的超詳細(xì)解說(shuō),點(diǎn)進(jìn)來(lái)的小伙伴不要錯(cuò)過(guò)奧
    2021-08-08
  • SpringBoot中shiro過(guò)濾器的重寫與配置詳解

    SpringBoot中shiro過(guò)濾器的重寫與配置詳解

    在前后端分離跨域訪問(wèn)的項(xiàng)目中shiro進(jìn)行權(quán)限攔截失效 (即使有正確權(quán)限的訪問(wèn)也會(huì)被攔截) 時(shí)造成302重定向錯(cuò)誤等問(wèn)題,為解決這個(gè)問(wèn)題,就需要進(jìn)行shiro過(guò)濾器的重寫以及配置。本文詳細(xì)介紹了解決方法,需要的可以參考一下
    2022-04-04
  • 總結(jié)一下Java回調(diào)機(jī)制的相關(guān)知識(shí)

    總結(jié)一下Java回調(diào)機(jī)制的相關(guān)知識(shí)

    今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著Java回調(diào)機(jī)制展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • java學(xué)習(xí)之利用TCP實(shí)現(xiàn)的簡(jiǎn)單聊天示例代碼

    java學(xué)習(xí)之利用TCP實(shí)現(xiàn)的簡(jiǎn)單聊天示例代碼

    這篇文章主要給大家介紹了關(guān)于java學(xué)習(xí)筆記之利用TCP實(shí)現(xiàn)的簡(jiǎn)單聊天的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Java如何實(shí)現(xiàn)Word文檔分欄效果

    Java如何實(shí)現(xiàn)Word文檔分欄效果

    這篇文章主要介紹了Java如何實(shí)現(xiàn)Word文檔分欄效果,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 深入解析java HashMap實(shí)現(xiàn)原理

    深入解析java HashMap實(shí)現(xiàn)原理

    這篇文章主要介紹了深入解析java HashMap實(shí)現(xiàn)原理的相關(guān)資料,需要的朋友可以參考下
    2015-09-09
  • Java使用JXLS導(dǎo)出Excel詳解

    Java使用JXLS導(dǎo)出Excel詳解

    jxls是一個(gè)輕量級(jí)的Java庫(kù),用于基于模板的Excel報(bào)表生成,這篇文章主要為大家介紹了Java如何使用JXLS導(dǎo)出Excel,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • maven項(xiàng)目下solr和spring的整合配置詳解

    maven項(xiàng)目下solr和spring的整合配置詳解

    這篇文章主要介紹了maven項(xiàng)目下solr和spring的整合配置詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • IDEA 集成log4j將SQL語(yǔ)句打印在控制臺(tái)上的實(shí)現(xiàn)操作

    IDEA 集成log4j將SQL語(yǔ)句打印在控制臺(tái)上的實(shí)現(xiàn)操作

    這篇文章主要介紹了IDEA 集成log4j將SQL語(yǔ)句打印在控制臺(tái)上的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02

最新評(píng)論