java是否可以在定义类时创建类对象

java是否可以在定义类时创建类对象

  有如下例子:

public class A 
{
    private A aa = new A();
}
public class Test 
{
    public static void main(String[] args) 
    {
    	A a = new A();
    	/*
    	 Exception in thread "main" java.lang.StackOverflowError
	              at com.booway.danlimoshi.formal.A.<init>(A.java:5)
    	 */
	}
}

  提示错误:
  Exception in thread “main” java.lang.StackOverflowError
       at test1$abc.(test1.java:4)
  很明显,堆栈溢出了。为什么呢?
  在java中,只有调用new的方法才能创建对象的实例,在内存中分配对象的空间。所以,如果在定义的时候就定义自身类的对象,就会导致递归创建对象的现象,创建了对象aa,因为aa是一个A类的实例,那么aa中还有一个aa对象,还要创建一个aa对象,为其分配内存…………,这样就会导致递归创建对象,结果就是内存被消耗殆尽。
   在来看下面一个例子:

public class HungryMan 
{
    private static final HungryMan instance = new HungryMan();
	private HungryMan() 
	{
		super();
		System.out.println("饿汉单例模式");
	}
	
	public static HungryMan getInstance ()
	{
		return instance;
	}
     
}
public class Test 
{
    public static void main(String[] args) 
    {
    	HungryMan.getInstance();//饿汉单例模式
	}
}

  运行正常为什么,因为它是类加载时加载这个变量,而不是通过new,所以它不会出现上面的递归创建对象的现象运行正常。静态变量它不在是先要通过new 类对象来,才能使用这个变量,它先于类对象出现,通过类名来使用。

发布了56 篇原创文章 · 获赞 1 · 访问量 1168

猜你喜欢

转载自blog.csdn.net/atu1111/article/details/105365260
今日推荐