If i am correct, a singleton class is the one for which only one object is allowed to create right. so why can't i just use everything in that as static and access them using the class name ? what is the need to create a single object ?
Well the benefit of having an actual instance is that you can still use object properties to keep state. On top of that it is far easier to wrap/hook/mock such classes, for example for unit testing purposes.
to play devil's advocate, you could store state in static members.
Far more important is that it's a lot easier to turn something into a singleton and back into an object that can have multiple instances than it is to move something from being a mess of static members to being an instantiable class and back.
Of course there will be potholes and gotchas still, as there no doubt was a reason for that thing to be a singleton that need to be addressed.
And then there's the good old "the only good global is a deleted global" that speaks against statics in general (though in a way also against singletons I guess).
Of course singletons aren't really, they're unique only within the context of their classloader.