企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 用 Java 创建对象的不同方法 > 原文: [https://javabeginnerstutorial.com/core-java-tutorial/different-ways-to-create-an-object-in-java/](https://javabeginnerstutorial.com/core-java-tutorial/different-ways-to-create-an-object-in-java/) 您必须知道使用`new`关键字创建类的对象,但这不是创建对象的唯一方法。 还有其他几种创建类对象的方法: * 使用`new`关键字 * 使用新实例(反射) * 使用克隆 * 使用反序列化 * 使用`ClassLoader` * …不知道了 🙂 ## 使用`new`关键字 使用`new`关键字是创建对象的最基本方法。 **`new`关键字可用于创建类的对象。** ```java public class ObjectCreationExample { public static void main(String[] args) { // Here we are creating Object of JBT using new keyword JBT obj = new JBT(); } } class JBT{ String Owner; } ``` ## 使用`newInstance`(反射) 您是否曾经尝试使用 Java 中的 JDBC 驱动程序连接到数据库? 如果您的回答是肯定的,那么您必须已经看到“`Class.forName`”。 我们还可以使用它来创建类的对象。 `Class.forName`实际上是在 Java 中加载该类,但未创建任何对象。 要创建对象,必须使用`Class`类的`newInstance`方法。 ```java /* * Here we will learn to create Object of a class without using new Operator. * But newInstance method of Class class. */ class CreateObject { public static void main(String[] args) { try { Class cls = Class.forName("JBTClass"); JBTClass obj = (JBTClass) cls.newInstance(); JBTClass obj1 = (JBTClass) cls.newInstance(); System.out.println(obj); System.out.println(obj1); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } class JBTClass { static int j = 10; JBTClass() { i = j++; } int i; @Override public String toString() { return "Value of i :" + i; } } ``` > 如果要以这种方式创建对象,则类需要具有公开的默认构造器。 ## 使用`Clone` 我们还可以使用`Clone()`方法创建现有对象的*副本*。 ```java /* * Here we will learn to create an Object of a class without using new Operator. * For this purpose we will use Clone Interface */ class CreateObjectWithClone { public static void main(String[] args) { JBTClassClone obj1 = new JBTClassClone(); System.out.println(obj1); try { JBTClassClone obj2 = (JBTClassClone) obj1.clone(); System.out.println(obj2); } catch (CloneNotSupportedException e) { e.printStackTrace(); } } } class JBTClassClone implements Cloneable { @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } int i; static int j = 10; JBTClassClone() { i = j++; } @Override public String toString() { return "Value of i :" + i; } } ``` **关于克隆**的其他说明 * 在这里,我们正在创建现有对象而不是任何新对象的克隆。 * 克隆方法在`Object`类中声明为受保护的。 因此,只能在子类或同一包中对其进行访问。 这就是为什么它在类上被覆盖的原因。 * 类需要实现`Cloneable`接口,否则它将引发`CloneNotSupportedException`。 ## 使用对象反序列化 对象反序列化也可以用于创建对象。 它产生与序列化对象相反的操作。 ## 使用`ClassLoader` 我们也可以使用`ClassLoader`创建类的对象。 这种方式与`Class.forName`选项相同。 ```java /* * Here we will learn to Create an Object using Class Loader */ public class CreateObjectWithClassLoader { public static void main(String[] args) { JBTClassLoader obj = null; try { obj = (JBTClassLoader) new CreateObjectWithClassLoader().getClass() .getClassLoader().loadClass("JBTClassLoader").newInstance(); // Fully qualified classname should be used. } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } System.out.println(obj); } } class JBTClassLoader { static int j = 10; JBTClassLoader() { i = j++; } int i; @Override public String toString() { return "Value of i :" + i; } } ``` ###### 下一篇文章