不用new新建对象的方式有哪些?

解决方案 »

  1.   

    Student student=(Student)class.forname("com.model.student");
    我目前知道两种
    再一个就是new了,或者就是到工厂里面取得了?(工厂模式)
      

  2.   

     可以通过class类
    public T newInstance()
                  throws InstantiationException,
                         IllegalAccessException创建此 Class 对象所表示的类的一个新实例。如同用一个带有一个空参数列表的 new 表达式实例化该类。如果该类尚未初始化,则初始化之。 
    注意,此方法传播 nullary 构造方法所抛出的任何异常,包括已检查的异常。使用此方法可以有效地绕过编译时的异常检查,而在其他情况下编译器都会执行该检查。 Constructor.newInstance 方法将该构造方法所抛出的任何异常包装在一个(已检查的)InvocationTargetException 中,从而避免了这一问题。 
    返回:
    此对象所表示的类的一个新分配的实例。 
    抛出: 
    IllegalAccessException - 如果此类或其 nullary 构造方法是不可访问的。 
    InstantiationException - 如果此 Class 表示一个抽象类、接口、数组类、基本类型或 void; 或者该类没有 nullary 构造方法; 或者由于某种其他原因导致实例化过程失败。 
    ExceptionInInitializerError - 如果该方法引发的初始化失败。 
    SecurityException - 如果存在安全管理器 s,并满足下列任一条件: 
    调用 s.checkMemberAccess(this, Member.PUBLIC) 拒绝创建该类的新实例 
    调用方的类加载器不同于也不是该类的类加载器的一个祖先,并且对 s.checkPackageAccess() 的调用拒绝访问该类的包 
      

  3.   

    还有个反序列化 ObjectInputStream
      

  4.   

    目前就两种吧?new 和 反射!
    工厂方法之类的其本质还是new一个出来,
    ObjectInputStream本质还是反射...
      

  5.   

    还有另外两种方法创建对象,从网上找到的。
    2.clone若程序写成如下,则可以根据当前对象(this)建立一个新实例对象(没有调用构造函数).
    Java代码   1. public class Something implements Cloneable{  
       2.     private Something obj;  
       3.     public Something cloneSomething()  
       4.     {  
       5.         try {  
       6.             obj = (Something)this.clone();  
       7. //          obj = (Something)clone();  
       8.         } catch (CloneNotSupportedException e) {  
       9.             e.printStackTrace();  
      10.         }  
      11.         return obj;  
      12.           
      13.     }  
      14. }  public class Something implements Cloneable{
    private Something obj;
    public Something cloneSomething()
    {
    try {
    obj = (Something)this.clone();
    // obj = (Something)clone();
    } catch (CloneNotSupportedException e) {
    e.printStackTrace();
    }
    return obj;

    }
    } 如果需要复制上面的那个obj指向的对象实例时,调用somethingNew.cloneSomething()方法就ok了。但是为什么不直接使用somethingNew.clone()呢?JDK中Object# clone()方法的原型是:
    protected native Object clone() throws CloneNotSupportedException;方法修饰符是protected,而不是public。这种访问的不可见性使得我们对Object#clone()方法不可见。所以,必需重写Object的clone方法后才能使用。
    Java代码   1. public Object clone()throws CloneNotSupportedException  
       2. {  
       3.     Something obj;  
       4.     obj= (Something)super.clone();  
       5.     return obj;  
       6. }  public Object clone()throws CloneNotSupportedException
    {
    Something obj;
    obj= (Something)super.clone();
    return obj;
    } 值得注意的是 :如果需要使用clone方法,必需实现java.lang.Cloneable接口,否则会抛出java.lang.CloneNotSupportedException。另外clone方法所做的的操作是直接复制字段的内容,换句话说,这个操作并不管该字段对应的对象实例内容。像这样字段对字段的拷贝(field to field copy)就成为"浅拷贝",clone方法所做的正是"浅拷贝". 3.newInstance利用java.lang.Class类的newInstance方法,则可根据Class对象的实例,建立该Class所表示的类的对象实例。创建Something类的对象实例可以使用下面的语句(这样需要一个已经存在的对象实例)。
    Java代码   1. somethingNew.getClass().newInstance().   somethingNew.getClass().newInstance(). 或者使用下面的语句(只需要存在相应的.class文件即可)
    Java代码   1. Something instance = (Something) Class.forName("cn.softkid.test.Something").newInstance();  Something instance = (Something) Class.forName("cn.softkid.test.Something").newInstance(); 如果包下不存在相应.class文件,则会抛出ClassNotFoundException。注意 :newInstance创建对象实例的时候会调用无参的构造函数,所以必需确保类中有无参数的构造函数,否则将会抛出java.lang.InstantiationException异常。无法进行实例化。
      

  6.   

    反射机制      Student student=(Student)class.forname("com.model.student"); 
    静态的类就不用new  了 直接可以调用方法
      

  7.   

    java.lang.String可以这么来:
    java.lang.String str = "string" ;一些如Integer之类的可以这么来:
    Long l = 12L;哈哈哈
      

  8.   

    1.clone
    2.Class或者java.lang.reflect.Constructor对象的newInstance()
    3.java.io.ObjectInputStream类的getObject()反序列化具体的可以看8楼,讲得挺清楚
      

  9.   

    1.clone 
    2.Class或者java.lang.reflect.Constructor对象的newInstance() 
    3.java.io.ObjectInputStream类的getObject()反序列化 
    4,用自定义的classloader从.class文件中load二进制数据,得到Class定义,然后再通过newInstance实例化.container就是这样做的,比如servlet的初始化.
      

  10.   

    java中一共有4种显示地创建对象的方式:
    1,用new
    2,运用放射的手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法
    3,调用对象的clone()方法
    4,运用反序列化的手段,调用java.io.ObjectInputStream对象的readObject()方法。
      

  11.   

    哦 单子模式吧~~
       package class7_3;public class Singleton {
      /**
       * 单子模式  【Singleton】
       * 创建一个类,要满足:
       * 
       * 1.构造器私有。
       * 2.用一个私有、静态变量引用实例。
       * 3.提供一个共有、静态方法获得实例。
       */

       //way 1.构造器私有。
       private Singleton(){
       r = java.lang.Math.random();
       }
       
       //way 2.定义一个私有、静态的引用变量。
       private static Singleton s;
       
       //way 3.提供一个共有、静态方法获得唯一实例。
       public static Singleton getInstance(){
       if(s==null){
       s = new Singleton();
       }
       return s;
       }
       
       //**********************************************************************************
       private double r;   public double getR() {
      return r;
       }   public void setR(double r) {
      this.r = r;
       }
       public static void main(String[] args) {
      Singleton s1 = Singleton.getInstance();
      Singleton s2 = Singleton.getInstance();
      
      System.out.println(s1.getR());
      System.out.println(s2.getR());
       }  
    }
      

  12.   

    我只知道三种:
    new
    clone
    反射