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

Java实例化的几种方法总结

程序员文章站 2024-03-31 13:33:46
java实例化的几种方法总结 java创建有四种方式: (1)用new 语句创建对象,这是最常用的创建对象方法。 (2)运用反射手段,调用java.lang.cl...

java实例化的几种方法总结

java创建有四种方式:

(1)用new 语句创建对象,这是最常用的创建对象方法。
(2)运用反射手段,调用java.lang.class或者java.lang.reflect.constructor类的newinstance()实例方法。
(3)调用对象的clone()方法
(4)运用反序列化手段,调用java.io.objectinputstream对象的readobject()方法。

1.用new语句创建对象

user user = new user();

2.运用反射机制

根据依赖倒转原则,实际编码过程中要针对接口编程而不是具体类编程。在面向接口编程的模式中,经常用此方法来动态创建实例。如从xml配置文件中获取具体子类的类名字符串subclassname,然后根据获得的类名字符串进行实例化:

class c = class.forname(subclassname);

(1)java.lang.class.newinstance()

user user = (user)c.newinstance();// 不带参数

(2)java.lang.reflect.constructor类的newinstance()

  constructor con = c.getconstructor(string.class);
user user = (user) con.newinstance("name");
public object getnewobject(string classname) throws classnotfoundexception, instantiationexception, illegalaccessexception { 
    //class.forname(类的全路径)、实例对象.class(属性)、实例对象getclass(),这三种方式都能得到class 
    class tclass=class.forname(classname); 
    object tobject=tclass.newinstance(); 
    return tobject; 
     
  } 

3.调用对象的clone()方法

clone指克隆

user user1 = new user(1,"dan");
  user user2 = null;
  user2 = (user) user1.clone();

4.运用反序列化手段

序列化:将对象状态转化为可保持或传输的格式的过程,被序列化的对象必须implments serializable

反序列化:将流转化成对象的过程

当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个java对象转换为字节序列,即java对象序列,才能在网络上传送,即序列化过程;接收方则需要把字节序列再恢复为java对象,即反序列化。

import java.io.objectoutputstream;   
import java.io.objectinputstream;   
import java.io.fileinputstream;   
import java.io.fileoutputstream;   
import java.util.date;   
import java.lang.management.*;   
public class test {   
  
  
  
  //序列化对象到文件   
  public static void serialize(string filename){   
    try  
    {   
      //创建一个对象输出流,讲对象输出到文件   
      objectoutputstream out=new objectoutputstream(new fileoutputstream(filename));   
  
      userinfo user=new userinfo("renyanwei","888888",20);   
      out.writeobject(user); //序列化一个会员对象   
  
      out.close();   
    }   
    catch (exception x)   
    {   
      system.out.println(x.tostring());   
    }   
       
  }   
  //从文件反序列化到对象   
  public static void deserialize(string filename){   
    try  
    {   
      //创建一个对象输入流,从文件读取对象   
      objectinputstream in=new objectinputstream(new fileinputstream(filename));   
  
      //读取userinfo对象并调用它的tostring()方法   
      userinfo user=(userinfo)(in.readobject());        
      system.out.println(user.tostring());   
  
      in.close();   
    }   
    catch (exception x)   
    {   
      system.out.println(x.tostring());   
    }   
       
  }   
  
  public static void main(string[] args) {     
  
    serialize("d:\\test.txt");   
    system.out.println("序列化完毕");   
       
    deserialize("d:\\test.txt");   
    system.out.println("反序列化完毕");   
  }   
  
}  

(1)和(2)都会明确的显式的调用构造函数 ;(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;(4)是从文件中还原类的对象,也不会调用构造函数。

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