I've seen at least three ways of acquiring dependencies in a Java object without coupling the object to the creation of the dependency;
Dependency Injection - some framework injects a required object into another object based on an external configuration, example: Spring managed beans
Dependency Lookup - a class looks up a required dependency in some kind of directory service, example: JNDI lookups in a Java EE container
Static Factories - an object in a global scope provides instances on demand - the standard Java SE APIs seem to be littered with these, example: java.util.Logger.getLogger(name), java.util.Calendar.getInstance()
What guidance can you provide as to which is most appropriate for a situation?