Java深海拾遗系列(7)--- Java 创建对象的不同姿势

 

使用new关键字     

     使用new关键字是创建对象的最基本方法。这是在java中创建对象的最常见方法。几乎99%的对象都是用这种方式创建的。通过使用这个方法,我们可以调用任何想要调用的构造函数(没有参数或参数化的构造函数)。

package org.cfj.objcreate;

public class NewKeywordEx {
    String name="NewKeyCreateObj";

    public static void main(String[] args) {
         NewKeywordEx newKeywordEx=new NewKeywordEx();
        System.out.println(newKeywordEx.name);
    }
}

使用New Instance

      使用new instance:如果我们知道类的名称,并且它具有公共默认构造函数,则可以创建一个对象–Class.forName。 我们可以使用它来创建类的对象。 实际上,Class.forName使用Java加载了Class,但没有创建任何Object。 要创建该类的对象,您必须使用该类的新实例方法。

package org.cfj.objcreate;

public class NewInstanceEx {
    String name = "newInstanceEx";
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
        Class cl = Class.forName("org.cfj.objcreate.NewInstanceEx");
        NewInstanceEx newInstanceEx = (NewInstanceEx) cl.newInstance();
        System.out.println(newInstanceEx.name);

    }
}

使用Clone

   每当在任何对象上调用clone()时,JVM实际上会创建一个新对象,并将前一个对象的所有内容复制到其中。使用克隆方法创建对象不会调用任何构造函数。要在对象上使用clone()方法,我们需要实现Cloneable并在其中定义clone()方法。

package org.cfj.objcreate;

public class cloneEx implements Cloneable {
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    private String name = "cloneEx";
    CloneExModel cloneExModel = new CloneExModel("张三", "123");

    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, CloneNotSupportedException {
        cloneEx cloneEx = new cloneEx();
        cloneEx cloneEx1 = (cloneEx) cloneEx.clone();
        cloneEx1.name = "cloneEx1";
        System.out.println(cloneEx.name); //输出:cloneEx
        System.out.println(cloneEx1.name); //输出:cloneEx1
        System.out.println(cloneEx == cloneEx1); //输出:false
        cloneEx1.cloneExModel.setUserName("张三clone");
        System.out.println(cloneEx.cloneExModel.getUserName());//输出:张三
        System.out.println(cloneEx1.cloneExModel.getUserName());//输出:张三
    }
}

Note:

  •  这里我们创建的是现有对象的克隆,而不是任何新对象。
  •  类需要实现Cloneable接口,否则将抛出CloneNotSupportedException。

使用反序列化

     无论何时序列化和反序列化一个对象,JVM都会创建一个单独的对象。在反序列化中,JVM不使用任何构造函数来创建对象.为了反序列化对象,我们需要在类中实现Serializable接口。 

package org.cfj.objcreate;

import java.io.*;

public class DeserializationEx implements Serializable {
    private String name;

    DeserializationEx(String name) {
        this.name = name;
    }

    public static void main(String[] args) throws IOException {
        /*
      //  使用writeObject()方法序列化反序列化示例类的对象,并将其写入file.txt文件

        DeserializationEx d =
                new DeserializationEx("DeserializationEx");
        FileOutputStream f = new FileOutputStream("file.txt");
        ObjectOutputStream oos = new ObjectOutputStream(f);
        oos.writeObject(d);
        oos.close();
        f.close();
*/

        try
        {
            DeserializationEx d1;
            FileInputStream f1 = new FileInputStream("file.txt");
            ObjectInputStream oos1 = new ObjectInputStream(f1);
            d1 = (DeserializationEx)oos1.readObject();
            System.out.println(d1.name); //DeserializationEx
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

}

用Constructor类的 newInstance()

    java.lang.reflect.Constructor类中有一个newInstance()方法,可用于创建对象。 通过使用此newInstance()方法,它还可以调用参数化构造函数和私有构造函数。

package org.cfj.objcreate;

import java.lang.reflect.Constructor;

public class ReflectionEx {
    private String name;
    ReflectionEx()
    {
    }
    public void setName(String name)
    {
        this.name = name;
    }
    public static void main(String[] args)
    {
        try
        {
            Constructor<ReflectionEx> constructor
                    = ReflectionEx.class.getDeclaredConstructor();
            ReflectionEx r = constructor.newInstance();
            r.setName("ReflectionEx");
            System.out.println(r.name);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
项目描述:建立购物小商城平台. 实现了前台页面系统。 技术描述:通过Spring 主框架来管理Struts2和Hibernate 框架搭建的电商小平台,用MySQL数据库并创建了表有用户表,订单表,商品表,商品分类表,商品内容表,购物车表等来存储数据。用到hibernate….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值