cracking singleton with other ways
===

I was doing research on singleton and I have developed a very basic singleton class..

        
    public class SingletonObject {
    	private static SingletonObject ref;
    	private SingletonObject () //private constructor
    	{ }
    	
    	public  static synchronized   SingletonObject getSingletonObject()
    	{
    		if (ref == null)
    			ref = new SingletonObject();
    				return ref;
    		}
    	
    	
    	public Object clone() throws CloneNotSupportedException
    	{throw new CloneNotSupportedException ();
    	}	
    }

Now below is the one way which I have cracked the singleton..


    public class CrackingSingleton {
    	
    	 public static void main(String[] args) throws ClassNotFoundException,
    	   IllegalArgumentException, SecurityException,
    	   InstantiationException, IllegalAccessException,
    	   InvocationTargetException {
    		
    		//First statement retrieves the Constructor object for private constructor of SimpleSingleton class.
    		Constructor pvtConstructor = Class.forName("CrackingSingleton.SingletonObject").getDeclaredConstructors()[0];
    		//Since the constructor retrieved is a private one, we need to set its accessibility to true.
    		pvtConstructor.setAccessible(true);
    		//Last statement invokes the private constructor and create a new instance of SimpleSingleton class.
    		 SingletonObject  notSingleton1 = ( SingletonObject) pvtConstructor.newInstance(null);
    		 System.out.println(notSingleton1.hashCode());
    		 System.out.println("notSingleton1 --->"+notSingleton1.toString());
    		 SingletonObject  notSingleton2 = ( SingletonObject) pvtConstructor.newInstance(null);
    		 System.out.println("notSingleton2 --->"+notSingleton2.hashCode());
    		 System.out.println(notSingleton2.toString());
    	}
    }

Please advise other ways also by which the singleton can be cracked..!!
