前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java中创建对象的几种方法

java中创建对象的几种方法

作者头像
MickyInvQ
发布2020-09-27 15:26:01
9480
发布2020-09-27 15:26:01
举报
文章被收录于专栏:InvQ的专栏InvQ的专栏

java中几种创建对象的方式 在java程序中,对象可以被显式地或者隐式地创建. 下面说说四种显式的创建对象的方式: ● 用new语句创建对象 ● 运用反射手段,调用java.lang.Class 或者 java.lang.reflect.Constructor 类的newInstance()实例方法 ● 调用对象的clone()方法 ● 运用序列化手段,调用java.io.ObjectInputStream 对象的 readObject()方法. 例子: package dgut.ke.javatest; public class Customer implements Cloneable { private String name; private int age; public Customer() { this("unknown",0); System.out.println("call default constructor"); } public Customer(String name,int age) { this.name = name; this.age = age; System.out.println("call second constructor"); } public Object clone() throws CloneNotSupportedException { return super.clone(); } public boolean equals(Object o) { if (this == o) return true; if (! (o instanceof Customer)) return false; final Customer other = (Customer) o; if (this.name.equals(other.name) && this.age == other.age) return true; else return false; } public String toString() { return "customer.name = "+name+" customer.age = "+age; } /** * @param args */ public static void main(String[] args) throws Exception{ // 运用反射手段创建Customer对象 Class objectClass = Class.forName("dgut.ke.javatest.Customer"); Customer c1 = (Customer) objectClass.newInstance(); System.out.println("c1 --> " + c1); //用new创建Customer对象 Customer c2 = new Customer("Tom",20); System.out.println("c2 --> " + c2); //运用克隆手段创建Customer对象 Customer c3 = (Customer) c2.clone(); System.out.println("c3 --> " + c3); System.out.println("c2 == c3 " + (c2==c3)); System.out.println("c2.equals(c3) " + c2.equals(c3)); } } Class类的forName方法public static Class<?> forName(String className) throws ClassNotFoundException 返回与带有给定字符串名的类或接口相关联的 Class 对象。调用此方法等效于: Class.forName(className, true, currentLoader) 其中 currentLoader 表示此类的定义类加载器。 例如,以下代码片段返回 java.lang.Thread 类的运行时 Class 描述符。 Class t = Class.forName("java.lang.Thread") 调用 forName("X") 将导致名为 X 的类被初始化。 参数: className - 所需类的完全限定名。 返回: 具有指定名的类的 Class 对象。 抛出: LinkageError - 如果链接失败 ExceptionInInitializerError - 如果此方法所激发的初始化失败 ClassNotFoundException - 如果找不到该类 Object类的clone()方法 protected Object clone() throws CloneNotSupportedException 创建并返回此对象的一个副本。“副本”的准确含义可能依赖于对象的类。一般来说,对于任何对象 x,如果表达式: x.clone() != x 是正确的,则表达式: x.clone().getClass() == x.getClass() 将为 true,但这些不是绝对条件。一般情况下是: x.clone().equals(x) 将为 true,但这不是绝对条件。 按照惯例,返回的对象应该通过调用 super.clone 获得。如果一个类及其所有的超类(Object 除外)都遵守此约定,则 x.clone().getClass() == x.getClass()。 按照惯例,此方法返回的对象应该独立于该对象(正被克隆的对象)。要获得此独立性,在 super.clone 返回对象之前,有必要对该对象的一个或多个字段进行修改。这通常意味着要复制包含正在被克隆对象的内部“深层结构”的所有可变对象,并使用对副本的引用替换对这些对象的引用。如果一个类只包含基本字段或对不变对象的引用,那么通常不需要修改 super.clone 返回的对象中的字段。 Object 类的 clone 方法执行特定的克隆操作。首先,如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException。注意:所有的数组都被视为实现接口 Cloneable。否则,此方法会创建此对象的类的一个新实例,并像通过分配那样,严格使用此对象相应字段的内容初始化该对象的所有字段;这些字段的内容没有被自我克隆。所以,此方法执行的是该对象的“浅表复制”,而不“深层复制”操作。 Object 类本身不实现接口 Cloneable,所以在类为 Object 的对象上调用 clone 方法将会导致在运行时抛出异常。 返回: 此实例的一个克隆。 抛出: CloneNotSupportedException - 如果对象的类不支持 Cloneable 接口,则重写 clone 方法的子类也会抛出此异常,以指示无法克隆某个实例。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-07-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档