Java/Ui培训
南京达内IT培训

400-111-8989

Java学习中类的实例化的方法


我们在学习java语言的过程中,会慢慢体会到类在java中占据一个非常重要的位置,类是java程序的组织单位,任何的java语句,都要写在类文件里面,本文南京java培训达内培训带领大家学习类的实例化方法。

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

1)使用new操作符

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

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

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

1.ClassInstance.java

 1 import java.io.*;
 2
 3 class ClassInstance implements Cloneable, Serializable {
 4     private String str = "测试...";
 5     public void fun(){
 6         System.out.println(str);
 7     }
 8     public ClassInstance(String str){
 9         System.out.println("有参类的实例化");
10         this.str += str;
11     }
12     public ClassInstance(){
13         System.out.println("无参类的实例化");
14     }
15     public Object clone(){
16         return this;
17     }
18 }

2.ClassInstanceTest.java

 1 import java.io.*;
 2 import java.lang.reflect.*;
 3
 4 public class ClassInstanceTest{
 5     public static void main(String[] args) throws ClassNotFoundException, InstantiationException,
 6            IllegalAccessException, IOException,InvocationTargetException, NoSuchMethodException{
 7 //第一种类的实例化方式
 8 ClassInstance ci01 = new ClassInstance("01");
 9 ci01.fun();
10
11 //第二种类的实例化方式
12 ClassInstance ci02 = (ClassInstance) Class.forName("ClassInstance").newInstance();
13 ci02.fun();
14
15 //第三种类的实例化方式
16 ClassInstance ci03 = (ClassInstance) ci01.clone();
17 ci03.fun();
18
19 //第四种类的实例化方式
20 FileOutputStream fos = new FileOutputStream("ci.tmp");
21 ObjectOutputStream oos = new ObjectOutputStream(fos);
22 oos.writeObject(ci01);
23 oos.close();
24 fos.close();
25         
26 FileInputStream fis = new FileInputStream("ci.tmp");
27 ObjectInputStream ois = new ObjectInputStream(fis);
28         
29 ClassInstance ci04  = (ClassInstance) ois.readObject();
30 ois.close();
31 fis.close();
32         
33 ci04.fun();
34 System.out.println("--------------------额外测试--------------------");
35 ClassInstance ci05 = null;
36 //额外的思考 在第二种类实例化的方式中有没有一种方法实现有参数的构造方式
37 //获得类的构造信息
38 Constructor[] ctor = Class.forName("ClassInstance").getDeclaredConstructors();
39 //找到我们需要的构造方法
40 for(int i=0;i<ctor.length;i++ ){
41 Class[] cl = ctor[i].getParameterTypes();
42 if(cl.length == 1){
43 //实例化对象
44 ci05 = (ClassInstance) Class.forName("ClassInstance").getConstructor(cl).newInstance(new Object[]{"05"});
45    }
46  }
47 ci05.fun();
48    }
49 }

3.输出结果

1 有参类的实例化
2 测试...01
3 无参类的实例化
4 测试...
5 测试...01
6 测试...01
7 -------------------额外测试--------------------
8 有参类的实例化
9 测试...05

除了这几种情况可以实例化一个Java类对象外,隐式调用实例化也是利用了已上集中情况。例如常见的方法:
1 public class ClassInstance{
2 public ClassInstance(){
3 }
4     public ClassInstance getInstance(){
5 return new ClassInstance();
6 }
7 }

通过观察结果,我们发现无论哪一种方式必须经过的一步---调用构造方法。无论怎样构造函数作为初始化类的意义怎样都不会改变。虽然说学习java是一个比较刻苦的过程,但是没有刻苦学习,哪会有以后java开发工程师的你,来到南京达内培训了java培训课程,相信你的java学习之路会略微轻松的多。

预约申请免费试听课

怕钱不够?就业挣钱后再付学费!    怕学不会?从入学起,达内定制课程!     担心就业?达内多家实践企业供你挑选 !

【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与联系我们,我们会予以更改或删除相关文章,以保证您的权益!"
上一篇:java中StringBuffer几种常用方法
下一篇:判断 Java 线程并发的安全性

Java组件实现原理时,该可以从哪些角度回答?

大厂Java工程师真实面试题

Web前端工程师面试有什么技巧?

ui面试问题及答案(1)

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

  • 搜索抖音号

    搜索抖音号:1821685962

    免费领取达内课程视频学习资料

Copyright © 2021 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
江西省

贵州省

广西省

海南省