分别在内存中什么状态。

解决方案 »

  1.   

    new
    反射
    对象都创建在堆里
      

  2.   

    以String类为例
    第一种:
    String str = new String();
    第二种:
    String str = Class.forName(String).newInstance()两种方法创建的对象实体没有任何区别,如果硬说有区别的话,那就是第一种直接调用了本类的构造函数,如果本类有多个构造函数重载的话,可以添加参数。而第二种是调用这个类的默认构造函数,即不带任何参数的。
    第一种方法是最常用,最普遍的用法。
    第二种方法叫做工厂模式,是一种较安全的方法。
    1.new
    2.clone
    3.newInstance
    4.反序列化
    5.String s = "abc"(这个是比较特殊的)
      

  3.   

    除了上面说的还有:类被加载的时候jvm自动创建Class对象,无需new,无需反射
    执行一个类的时候(main方法),会自动创建一个String数组作为参数,无需new,无需反射
    我记得在深入java虚拟机第二版有讲这些问题
      

  4.   


    饿汉式class S1 {   
        private S1() {   
            System.out.println("ok1");   
        }   
      
      
        private static S1 instance = new S1();   
      
        public static S1 getInstance() {   
            return instance;   
        }   
    }  
    懒汉式class S2 {   
        private S2() {   
            System.out.println("ok2");   
        }   
      
        private static S2 instance = null;   
      
        public static synchronized S2 getInstance() {   
            if (instance == null) instance = new S2();   
            return instance;   
        }   
    }  
      

  5.   

    从java的语言机制上来看的话,创建对象有两种方式,一种是显示创建对象,一种是隐式创建对象。
    隐式创建对象是没有显示的给予创建对象的语句,而由编译器或者jvm来负责创建对象的过程,例如:
    String str="";
    Integer i=500;等等,这些语句。
    还有显示创建对象,显示创建对象包含四种形式:
    1、使用new关键字创建对象。
    2、使用反射库创建对象。
    3、反序列化创建对象。
    4、对象的克隆。
    设计模式的对象创建方式包含在以上四种之内,设计模式中创建对象用到的最多的应该反射的形式来创建对象。