赞
踩
最近有小伙伴出去面试,被面试官问到了 “Java创建对象有哪些方式” 这个问题。这个小伙伴自然就非常迅速地说出了new的方式,结果面试官又继续追问还有哪些别的方式,他就支支吾吾半天不知道了。那么这个问题到底难不难呢?今天波哥就来给大家总结一下Java中创建对象的方式都有哪些,速来围观吧。
创建对象的方式
对于这种方式,想必大家肯定都非常熟悉,我们可以直接通过new关键字去创建一个对象,通过这个方法我们可以去调用无参构造器或者有参构造器,实例代码如下:
- public class Test {
- public static void main(String[] args) {
- User user1 = new User();
- User user2 = new User("张三", "123456");
- }
- }
如果我们想要反序列化创建一个对象,必须先将这个对象给序列化。那什么是序列化呢?说白了就是将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文件中获取到的。
在class类中有一个newInstance方法,该方法会调用类中公开的无参构造方法,当我们利用该方法创建对象时,实例代码如下:
- public class Test {
- public static void main(String[] args) throws Exception {
- User user = (User) Class.forName("User").newInstance();
- }
- }
另外在Constructor类中,也有一个newInstance方法帮助我们来创造对象,通过这个方法我们可以调用有参的构造或私有的构造方法,示例代码如下:
- public class Test {
- public static void main(String[] args) throws Exception {
- Constructor<User> userConstructor = User.class.getConstructor();
- User user = userConstructor.newInstance();
- }
- }
最后我们还可以使用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架构栈,干货天天都不断!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。