次の例では、2つのコンストラクタがあるクラスを定義します。変数nameと変数ageには妥当な規定値がないので既定コンストラクタを他のクラスから呼びだすことはできません。したがって他のクラスから呼び出せないようにコンストラクタをprivateで宣言する必要があります。と説明されています。
コードは

class Person{
    String name;
    int age;

    public Person(String name , int age){
        this.name = name;
        this.age  = age;
    }

    private Person(){

    }
}

class PrivateConstructor{
    public static void main(String args[]){
        Person p1 = new Person("John", 30);
        System.out.println(p1.name);
        System.out.println(p1.age);
        //Person p2 = new Person();
    }
}

と書かれています。ここで

Person p2 = new Person();

が呼び出せないという意味がよくわかりません。

class Person{
    String name;
    int age;

    public Person(String name , int age){
        this.name = name;
        this.age  = age;
    }

    private Person(){

    }
}

class PrivateConstructor{
    public static void main(String args[]){
        Person p1 = new Person("John", 30);
        System.out.println(p1.name);
        System.out.println(p1.age);
        Person p2 = new Person("Emily", 29);
        System.out.println(p2.name);
        System.out.println(p2.age);
        //Person p2 = new Person();
    }
}

とためしに書いてみたのですが問題なくできます。
Person p2 = new Person();ではname とageが記入されてないから当然でないのはわかるのですがprivateの役割についてが理解できません。
ためしに

private Person(){

}

の部分を書かないでやってみても問題なくできました。
あってもなくても問題なくでるのにprivateを記述した理由や役割について教えてください。
またeclipceで

private Person(){

}

の部分についてコンストラクターpersonはローカルで使用されていませんとでているのですが
どういった意味でしょうか
よろしくお願い致します。