An interface is meant to define a contract, and constants are an implementation detail. If it makes sense that a number of implementations will share a constant, you can define it in an abstract class that will be used as a base class for the hierarchy. And if only one class is really tied to the constant, you should declare it there.
If you just want to group a certain number of constants together, you can define them in a final class:
final class Constants { //non extendable
public static final double PI = 3.14d;
public static final double E = 2.13d; //Can't remember the real value!
private Constants() {} //non instantiable
}
You can also declare them in an enum when they are an enumeration (colours for example).
More about it in Effective Java Item #19 "Use interfaces only to define types", which concludes with:
In summary, interfaces should be used only to define types. They should not be used to export constants.
Bottom line, there is always a better way to define constants than in an interface.