五种创建Java对象的方法,你知道几种呢?

关注“Java架构栈”微信公众号,回复暗号【Java面试题】即可获取大厂面试题

最近有小伙伴出去面试,被面试官问到了 “Java创建对象有哪些方式” 这个问题。这个小伙伴自然就非常迅速地说出了new的方式,结果面试官又继续追问还有哪些别的方式,他就支支吾吾半天不知道了。那么这个问题到底难不难呢?今天波哥就来给大家总结一下Java中创建对象的方式都有哪些,速来围观吧。

 创建对象的方式

1.new关键字

对于这种方式,想必大家肯定都非常熟悉,我们可以直接通过new关键字去创建一个对象,通过这个方法我们可以去调用无参构造器或者有参构造器,实例代码如下:

public class Test {
    public static void main(String[] args) {
        User user1 = new User();
        User user2 = new User("张三", "123456");
    }
 }

2. 反序列化

如果我们想要反序列化创建一个对象,必须先将这个对象给序列化。那什么是序列化呢?说白了就是将Java对象转化为字节流或者字符流的过程。而反序列化则是将字节流或者字符流对象转化为Java对象的过程。

一个还没序列化的文件就是空的,如下图所示:

public class Test {
    public static void main(String[] args) throws Exception {
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("D:\\Test\\userFile.txt"));
        User user = new User("张三","123456");
        objectOutputStream.writeObject(user);
        objectOutputStream.close();
    }
}

而当我们运行了上面的代码后,在userFile.txt中就会出现以下的东西:

此时如果我们再来执行以下代码:

public class Test {
    public static void main(String[] args) throws Exception {
        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("D:\\Test01\\userFile.txt"));
        User user = (User) objectInputStream.readObject();
        System.out.println(user.username()+","+user.password());
        objectInputStream.close();
    }
}

就可以得到以下内容:

由此我们就可以知道,这个User对象就是从之前的userFile.txt文件中获取到的。

3. 调用newInstance方法

在class类中有一个newInstance方法,该方法会调用类中公开的无参构造方法,当我们利用该方法创建对象时,实例代码如下:

public class Test {
    public static void main(String[] args) throws Exception {
        User user = (User) Class.forName("User").newInstance();
    }
}

4. Constructor.newInstance

另外在Constructor类中,也有一个newInstance方法帮助我们来创造对象,通过这个方法我们可以调用有参的构造或私有的构造方法,示例代码如下:

public class Test {
    public static void main(String[] args) throws Exception {
        Constructor<User> userConstructor = User.class.getConstructor();
        User user = userConstructor.newInstance();
    }
}

5. Clone方法

最后我们还可以使用clone()方法创建一个新对象。但是大家要注意,使用该方法的前提是,我们必须先让类实现Cloneable接口,并重写Object的clone方法(因为Object中的这个方法是protected的,若不重写,外部也调用不了)。实例代码如下:

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

public class Test {
    public static void main(String[] args) throws Exception {
        User user1 = new User();
        User user2 = user1.clone();
    }
}

 结语

以上就是波哥为小伙伴们介绍的五种创建对象的方法,现在你知道都有哪些创建Java对象的方式了吗?以后如果面试官再问你Java中创建对象的方式,你就可以把这些方式告诉他哦。关注Java架构栈,干货天天都不断!

猜你喜欢

转载自blog.csdn.net/weixin_41692221/article/details/131415190