ToB企服应用市场:ToB评测及商务社交产业平台

标题: 面试Tip--java创建对象的四种方式 [打印本页]

作者: 火影    时间: 2024-6-24 03:29
标题: 面试Tip--java创建对象的四种方式
       java创建对象一共有四种方式,但是我们在写代码的时候用的new 关键字偏多,像一些接口对接则是序列化创建对象偏多,本日我们来简朴介绍下利用场景以及各个方式
1. 利用 new 关键字

        这是最常见的创建对象的方式。
  1. public class Example {
  2.     private String message;
  3.     public Example(String message) {
  4.         this.message = message;
  5.     }
  6.     public String getMessage() {
  7.         return message;
  8.     }
  9.     public static void main(String[] args) {
  10.         Example example = new Example("Hello, World!");
  11.         System.out.println(example.getMessage());
  12.     }
  13. }
复制代码
2. 利用反射机制

        反射机制允许在运行时动态地创建对象、调用方法和访问字段。它通常用于框架和库中,提供高度的灵活性。
优点

缺点

利用场景
        ORM框架,SpringMVC利用@RequestBody这类的注解等等
示例
  1. import java.lang.reflect.Constructor;
  2. import java.lang.reflect.Field;
  3. import java.lang.reflect.Method;
  4. public class ReflectionExample {
  5.     private String message;
  6.     public ReflectionExample(String message) {
  7.         this.message = message;
  8.     }
  9.     public String getMessage() {
  10.         return message;
  11.     }
  12.     public static void main(String[] args) {
  13.         try {
  14.             Class<?> clazz = Class.forName("ReflectionExample");
  15.             Constructor<?> constructor = clazz.getConstructor(String.class);
  16.             Object instance = constructor.newInstance("Hello, Reflection!");
  17.             Method getMessageMethod = clazz.getMethod("getMessage");
  18.             String message = (String) getMessageMethod.invoke(instance);
  19.             System.out.println("Message: " + message);
  20.             Field messageField = clazz.getDeclaredField("message");
  21.             messageField.setAccessible(true);
  22.             messageField.set(instance, "New Message via Reflection");
  23.             System.out.println("Updated Message: " + getMessageMethod.invoke(instance));
  24.         } catch (Exception e) {
  25.             e.printStackTrace();
  26.         }
  27.     }
  28. }
复制代码
3. 利用 clone() 方法

通过 clone() 方法可以创建一个对象的副本。需要实现 Cloneable 接口并重写 clone() 方法。
  1. public class Example implements Cloneable {
  2.     private String message;
  3.     public Example(String message) {
  4.         this.message = message;
  5.     }
  6.     public String getMessage() {
  7.         return message;
  8.     }
  9.     @Override
  10.     protected Object clone() throws CloneNotSupportedException {
  11.         return super.clone();
  12.     }
  13.     public static void main(String[] args) {
  14.         try {
  15.             Example original = new Example("Hello, World!");
  16.             Example clone = (Example) original.clone();
  17.             System.out.println(clone.getMessage());
  18.         } catch (CloneNotSupportedException e) {
  19.             e.printStackTrace();
  20.         }
  21.     }
  22. }
复制代码
4. 利用序列化与反序列化

        通过将对象序列化为字节省,然后再从字节省中反序列化,可以创建对象。这通常用于对象的持久化和传输。
优点

缺点

利用场景

示例、
  1. import java.io.*;
  2. public class SerializationExample implements Serializable {
  3.     private static final long serialVersionUID = 1L;
  4.     private String message;
  5.     public SerializationExample(String message) {
  6.         this.message = message;
  7.     }
  8.     public String getMessage() {
  9.         return message;
  10.     }
  11.     public static void main(String[] args) {
  12.         SerializationExample original = new SerializationExample("Hello, Serialization!");
  13.         // 序列化
  14.         try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.dat"))) {
  15.             oos.writeObject(original);
  16.         } catch (IOException e) {
  17.             e.printStackTrace();
  18.         }
  19.         // 反序列化
  20.         try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.dat"))) {
  21.             SerializationExample deserialized = (SerializationExample) ois.readObject();
  22.             System.out.println("Deserialized Message: " + deserialized.getMessage());
  23.         } catch (IOException | ClassNotFoundException e) {
  24.             e.printStackTrace();
  25.         }
  26.     }
  27. }
复制代码
 4.1利用 JSON 反序列化

通过 JSON 反序列化,可以将 JSON 数据转换为 Java 对象,常用的库有 Jackson 和 Gson。
  1. import com.fasterxml.jackson.databind.ObjectMapper;
  2. import java.io.IOException;
  3. public class User {
  4.     private String name;
  5.     private int age;
  6.     private String email;
  7.     // Getters and Setters
  8.     public static void main(String[] args) {
  9.         String jsonString = "{"name":"John","age":30,"email":"john@example.com"}";
  10.         ObjectMapper objectMapper = new ObjectMapper();
  11.         try {
  12.             User user = objectMapper.readValue(jsonString, User.class);
  13.             System.out.println("Name: " + user.getName());
  14.             System.out.println("Age: " + user.getAge());
  15.             System.out.println("Email: " + user.getEmail());
  16.         } catch (IOException e) {
  17.             e.printStackTrace();
  18.         }
  19.     }
  20.     public String getName() {
  21.         return name;
  22.     }
  23.     public void setName(String name) {
  24.         this.name = name;
  25.     }
  26.     public int getAge() {
  27.         return age;
  28.     }
  29.     public void setAge(int age) {
  30.         this.age = age;
  31.     }
  32.     public String getEmail() {
  33.         return email;
  34.     }
  35.     public void setEmail(String email) {
  36.         this.email = email;
  37.     }
  38. }
复制代码
·通过上面的例子,这样我们在创建对象的时候就会更加清楚了


点个关注再走吧!!!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4