欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

Java中创建对象的6种方式

时间:2022-09-07 09:59:55|栏目:JAVA代码|点击:

背景

本文教你创建对象的 6 种方式,从低端到高端,各种创建方式,总有一个适合你,没有对象的自己生成一个吧!

创建对象的 6 种方式

假设有个女朋友类:

@Data
@NoArgsConstructor
@AllArgsConstructor
class GirlFriend {
 
 private String name;
 
}

注解使用的是 Lombok 框架注解,方便快速开发

方法1:new 一个对象

没对象就 new 一个吧,没错,使用 new 关键字,这也是 Java 创建对象最简单直接的方式了。

示例代码:

@Test
public void girlFriend1() {
    GirlFriend girlFriend = new GirlFriend("new一个对象");
    System.out.println(girlFriend);
}

输出结果:

GirlFriend(name=new一个对象)

方法2:克隆一个对象

朋友有女朋友,你没有,如果可以,把别人的女朋友克隆一个吧?

让女朋友类先实现 Cloneable 接口,并且实现其 clone() 方法:

@Data
@NoArgsConstructor
@AllArgsConstructor
class GirlFriend implements Cloneable {
 
 private String name;
 
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
    
}

注意:这里演示默认使用的是浅拷贝,即只克隆基本类型的字段,引用类型的需要再重写 clone() 方法手动赋下引用字段的值。

现在克隆一个对象,示例代码:

@Test
public void girlFriend2() throws CloneNotSupportedException {
    GirlFriend girlFriend1 = new GirlFriend("克隆一个对象");
    GirlFriend girlFriend2 = (GirlFriend) girlFriend1.clone();
    System.out.println(girlFriend2);
}

输出结果:

GirlFriend(name=克隆一个对象)

使用克隆的好处就是可以快速创建一个和原对象值一样的对象,对象的字段值一样,但是两个不同的引用。

方法3:类派发一个对象(反射)

直接使用女朋友类派发一个吧:

@Test
public void girlFriend3() throws InstantiationException, IllegalAccessException {
    GirlFriend girlFriend = GirlFriend.class.newInstance();
    girlFriend.setName("类派发一个对象");
    System.out.println(girlFriend);
}

输出结果:

GirlFriend(name=类派发一个对象)

方法4:动态加载一个对象(反射)

知道女朋友类在哪里(类全路径),但却没有被加载,那就反射一个对象吧:

@Test
public void girlFriend4() throws InstantiationException, IllegalAccessException, ClassNotFoundException {
    GirlFriend girlFriend = (GirlFriend) Class.forName("cn.javastack.test.jdk.core.GirlFriend").newInstance();
    girlFriend.setName("反射一个对象");
    System.out.println(girlFriend);
}

输出结果:

GirlFriend(name=反射一个对象)

方法5:构造一个对象(反射)

知道女朋友类的构造,就可以调用构造器构造一个对象:

@Test
public void girlFriend5() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
    GirlFriend girlFriend = GirlFriend.class.getConstructor().newInstance();
    girlFriend.setName("构造一个对象");
    System.out.println(girlFriend);
}

输出结果:

GirlFriend(name=构造一个对象)

这里也可以同时结合类全路径构造一个对象。

方法6:反序列化一个对象

这个和克隆的作用类似,假如以前序列化(保存)了一个女朋友在磁盘上,现在就可以反序列化出来。

首先让女朋友可序列化,实现 Serializable 接口:

@Data
@NoArgsConstructor
@AllArgsConstructor
class GirlFriend implements Cloneable, Serializable {
 
    private static final long serialVersionUID = 1L;
    
    private String name;
 
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
 
}

序列化/反序列化对象示例代码:

@Test
public void girlFriend6() throws IOException, ClassNotFoundException {
    GirlFriend girlFriend1 = new GirlFriend("反序列化一个对象");
 
    // 序列化一个女朋友
    ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("gf.obj"));
    objectOutputStream.writeObject(girlFriend1);
    objectOutputStream.close();
 
    // 反序列化出来
    ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("gf.obj"));
    GirlFriend girlFriend2 = (GirlFriend) objectInputStream.readObject();
    objectInputStream.close();
 
    System.out.println(girlFriend2);
}

输出结果:

GirlFriend(name=反序列化一个对象)

总结

上一篇:Spring中@Transactional(rollbackFor=Exception.class)属性用法介绍

栏    目:JAVA代码

下一篇:JVM的类加载器和双亲委派模式你了解吗

本文标题:Java中创建对象的6种方式

本文地址:http://www.codeinn.net/misctech/213042.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有