A constructor instantiates a class so why it has the access modifier?
The modifier can be used so you control where the object can be constructed.
Is there a case when we have to declare a constructor private?
Say you have a factory method like
class A {
    private A(int n)  { }
    public static A create(int n) {
        return new A(n);
    }
}
or you have a shared constructor which should be called directly.
class B {
    public B(int n) {
        this(n, "");
    }
    public B(String str) {
        this(0, str);
    }
    private B(int n, String str) { }
}
or you have a Singleton
final class Singleton {
    Singleton INSTANCE = new Singleton();
    private Singleton() { }
}
however I prefer to use an enum which has a private constructor.
enum Singleton {
    INSTANCE;
}
or you have a Utility class
final class Utils {
    private Utils() { /* don't create one */ }
    public static int method(int n) { }
}
however I prefer to use an enum in this case
enum Utils {
    /* no instances */;
    public static int method(int n) { }
}
Note: if you use a private constructor on a final class you can still create instances using nested classes, or reflection.  If you use an enum you can't create an instance as easily/accidentally. 
Warning: You can create instances of an enum using Unsafe
Note in enum the constructor has to be private
class BuySell {
    BUY(+1), SELL(-1);
    private BuySell(int dir) { }
}
You don't have to make it private explicitly as this is the default.