经验之谈丨Java 中创建对象的3种方式 - 行业资讯 - 校园动态 - 牛耳教育 

经验之谈丨Java 中创建对象的3种方式

发布日间:2017-04-23   浏览次数:728

   Java 是面向对象的语言,不可避免的,“对象”这个概念是 Java 语言的核心部分,这里来简单讨论一下在 Java 中创建一般对象的方法。

总结下来有以下4种创建对象的方法:

使用 new 关键字调用对象的构造器;

使用 Java 反射的 newInstance() 方法;

使用 Object 类的 clone() 方法;

使用对象流 ObjectInputStream 的 readObject() 方法读取序列化对象;


1.  使用 new 关键字

最常见的 Java 对象的构造方法,通过调用类提供的构造器创建对象。


2.  使用 newInstance() 方法

Java 反射中有一个 newInstance() 方法,可以创建对象,步骤如下:


获取要创建的类的 Class 对象。

如果只需要调用这个类的访问权限为 public 无参构造器,直接使用 Class 类的实例方法 newInstance()。

获取 Class 对象的构造器对象,通过调用 Class 类的实例方法 getDeclaredConstractors() 来获取构造器对象的数组。(获取所有构造器,无视访问权限的限制,数组顺序按照代码中的顺序决定)

如果调用的构造器是 private 的,需要调用 Constractor 类的父类 AccessibleObject 类的实例方法 setAccessible(true) 来打破访问限制。

使用 Constractor 类的实例方法 newInstance()。

 

示例代码:


public class MethodNewInstance {

2

3     public static void main(String[] args) throws Exception {

4

5         // 得到类对象

6         Class<?> clazz = Class.forName("com.gerrard.create.method_newInstance.ObjectToCreate");

7         // 类对象的 newInstance() 方法,只能调用公有的无参构造器

8         clazz.newInstance();

9

10         // 得到构造器对象数组(不管是私有还是公有的构造器)

11         Constructor<?>[] cons = clazz.getDeclaredConstructors();

12         cons[1].newInstance();

13         cons[2].newInstance("Gerrard");

14         // 先打破私有构造器不可访问的限制

15         cons[0].setAccessible(true);

16         cons[0].newInstance("Gerrard", "Info");

17     }

18 }


备注:


获取 Class 对象的方法有3个,此处不多赘述。

获取 Constractor 对象的方法有4个,此处不多赘述。


3.  使用 clone() 方法

Object 类是所有类的直接或间接父类,Object 类中提供了 实例方法 native(),在给定对象的基础上,创建一个完全相同的对象。步骤如下:

想要使用 clone() 方法创建对象的类,实现 Cloneable 接口。

在类的内部,重写 Object 类的 clone() 方法。


示例代码:

1 public class ObjectToCreate implements Cloneable {

2

3     // 重写 Object 类的 clone() 方法(native 方法)

4     public ObjectToCreate clone() {

5         ObjectToCreate obj = null;

6         try {

7             obj = (ObjectToCreate) super.clone();

8         } catch (CloneNotSupportedException e) {

9             // 没有实现 Cloneable 接口就会抛出这个异常

10             e.printStackTrace();

11         }

12         return obj;

13     }

14 }


备注:


没有实现 Cloneable 接口,会抛出 CloneNotSupportedException 异常。

Object 类提供的 clone() 方法,访问权限是 protected,所以如果不重写 clone() 方法,是没有权限调用的。

Object 类的 clone() 方法,是 native 方法。

 

 


温馨提示:牛耳教育春季招生火热进行中!为了让更多的人有机会接触互联网行业,进入学习,改变命运,

只要>>点击了解<<进入牛耳教育官方网站或拨打我们官方热线即可咨询最新开班信息!

招生名额有限,抢先报名,学习快人一步!

学校总部地址:湖南省五一广场文运街15号湖南省电化教育馆3楼牛耳教育
官方网站:www.neweredu.cn 官方微信:csneweredu
咨询热线:0731-83861632 咨询QQ:4000731835

点击了解牛耳 TEL:400-0731-835
相关新闻
经验之谈丨不来牛耳读书的骚年都不是好工程师 !2017-04-23
经验之谈丨你之所以不就业,因为你选的学校不叫牛耳2017-04-23
经验之谈丨学Java是自学好还是培训好2017-04-23
趣味IT丨有趣的IT词组,快来认识吧!2017-04-23
相关新闻
经验之谈丨提高java培训学习效率的6个小计划2017-04-23
经验之谈丨Java线程面试题及相关解答2017-04-23
经验之谈丨Java 中创建对象的3种方式2017-04-23
经验之谈丨Java四大核心技术思想之Java API2017-04-23