欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-05 19:10:13
 java 实例化类的方法   java中,类的实例化方法有四种途径: 1)使用new操作符 2)调用class对象的newinstance()方法 3)...

 java 实例化类的方法

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

1)使用new操作符

2)调用class对象的newinstance()方法

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

4)通过objectinputstream的readobject()方法反序列化类

1.classinstance.java

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

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.输出结果

有参类的实例化
测试...01
无参类的实例化
测试...
测试...01
测试...01
-------------------额外测试--------------------
有参类的实例化
测试...05

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

public class classinstance{
  public classinstance(){
  }
  public classinstance getinstance(){
    return new classinstance();
  }
}

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

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