JAVA菜鸟关于构造方法有关问题

JAVA初学者关于构造方法问题
以下为构造方法章节的程序:
class Person{
private String name;
private int age;
public Person(String n,int a){
this.setAge(a);
}
public void setName(String n){
name=n;
}
public void setAge(int a){
if(a>0&&a<150){
age=a;
}
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public void tell(){
System.out.println("姓名:"+this.getName()+";年龄:"+this.getAge());
}
}
public class ConsDemo1{
public static void main(String args[]){
System.out.println("声明对象:Person per=null");
Person per=null;
System.out.println("实例化对象:per=new Person()");
per=new Person("张三",30);
per.tell();
}
}
既然已经在定义构造方法时为属性初始化了this.setName(n);,为什么还要在下面的程序中继续设置name的初始值public void setName(String n){name=n};?

刚开始学习JAVA,希望大家能帮忙解决。谢谢!

------解决方案--------------------
public Person(String n,int a){
this.setAge(a);
}
构造方法没有给name赋值啊,第一个参数没用到
------解决方案--------------------
public void setName(String n){
name=n;
}

这只是一个方法,如果你不去调用它,它是不执行的。
代码从main方法中开始得到执行,你可以从main方法开始走读代码。