java 实例化类详解及简单实例

2025-05-29 0 48

Java 实例化类的方法

  Java中,类的实例化方法有四种途径:

1)使用new操作符

2)调用Class对象的newInstance()方法

3)调用clone()方法,对现有实例的拷贝

4)通过ObjectInputStream的readObject()方法反序列化类

1.ClassInstance.java

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18
import java.io.*;

class ClassInstance implements Cloneable, Serializable {

private String str = "测试...";

public void fun(){

System.out.println(str);

}

public ClassInstance(String str){

System.out.println("有参类的实例化");

this.str += str;

}

public ClassInstance(){

System.out.println("无参类的实例化");

}

public Object clone(){

return this;

}

}

2.ClassInstanceTest.java

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49
import java.io.*;

import java.lang.reflect.*;

public class ClassInstanceTest{

public static void main(String[] args) throws ClassNotFoundException, InstantiationException,

IllegalAccessException, IOException,InvocationTargetException, NoSuchMethodException{

//第一种类的实例化方式

ClassInstance ci01 = new ClassInstance("01");

ci01.fun();

//第二种类的实例化方式

ClassInstance ci02 = (ClassInstance) Class.forName("ClassInstance").newInstance();

ci02.fun();

//第三种类的实例化方式

ClassInstance ci03 = (ClassInstance) ci01.clone();

ci03.fun();

//第四种类的实例化方式

FileOutputStream fos = new FileOutputStream("ci.tmp");

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(ci01);

oos.close();

fos.close();

FileInputStream fis = new FileInputStream("ci.tmp");

ObjectInputStream ois = new ObjectInputStream(fis);

ClassInstance ci04 = (ClassInstance) ois.readObject();

ois.close();

fis.close();

ci04.fun();

System.out.println("--------------------额外测试--------------------");

ClassInstance ci05 = null;

//额外的思考 在第二种类实例化的方式中有没有一种方法实现有参数的构造方式

//获得类的构造信息

Constructor[] ctor = Class.forName("ClassInstance").getDeclaredConstructors();

//找到我们需要的构造方法

for(int i=0;i<ctor.length;i++ ){

Class[] cl = ctor[i].getParameterTypes();

if(cl.length == 1){

//实例化对象

ci05 = (ClassInstance) Class.forName("ClassInstance").getConstructor(cl).newInstance(new Object[]{"05"});

}

}

ci05.fun();

}

}

3.输出结果

?

1

2

3

4

5

6

7

8

9
有参类的实例化

测试...01

无参类的实例化

测试...

测试...01

测试...01

-------------------额外测试--------------------

有参类的实例化

测试...05

  除了这几种情况可以实例化一个Java类对象外,隐式调用实例化也是利用了已上集中情况。例如常见的方法:

?

1

2

3

4

5

6

7
public class ClassInstance{

  public ClassInstance(){

  }

public ClassInstance getInstance(){

    return new ClassInstance();

  }

}

    通过观察结果,我们发现无论哪一种方式必须经过的一步—调用构造方法。无论怎样构造函数作为初始化类的意义怎样都不会改变。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:http://www.cnblogs.com/localhost/archive/2012/05/19/2508440.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 java 实例化类详解及简单实例 https://www.kuaiidc.com/118607.html

相关文章

发表评论
暂无评论