最近有小伙伴出去面试,被面试官问到了 “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中创建对象的方式,你就可以把这些方式告诉他哦。