Java's Random class uses an initial seed value and a linear congruential generator as a part of its internal state to generate a sequence of random numbers. If the
nextDouble() methods were static, they wouldn't have access to this internal storage.
From the docs:
If two instances of Random are created with the same seed, and the same sequence of method calls is made for each, they will generate and return identical sequences of numbers.
Note that this also means that if two instances of Random are created with different seeds, they'll generate two different sequences.