服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - java 实例化类详解及简单实例

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

2020-08-25 10:46梦码人 Java教程

这篇文章主要介绍了java 实例化类详解及简单实例的相关资料,需要的朋友可以参考下

 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

延伸 · 阅读

精彩推荐