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
  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实例化类的方法
标题网址:http://www.shufengxianlan.com/qtweb/news23/535723.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联