首先我们看实例域,实例域是与这个对象共存亡的。
直接通过代码来看:
package summer;
public class Employee {
private String name;
private double salary;
private int id;
private int a=1;
public Employee(String n,double s)
{
this.name=n;
this.salary=s;
}
public String getName()
{
return name;
}
public double getSalary()
{
return salary;
}
public int getId() {
return id;
}
public void setId()
{
id=a;
a++;
}
public static void main (String[] args)
{Employee e=new Employee("taojunyi",5000);
e.setId();
System.out.println("id="+e.getId());
e.setId();
System.out.println("id="+e.getId());
}
}
在这里,a作为实例域
结果:
id进行了自增操作,所以a作为实例域是与e这个对象共存亡的 ,在对象没有消亡之前,a的是变化的(自增)。
反观局部变量,我们把a变成局部变量来探究,即将a放到setId这一方法里:
package summer;
public class Employee {
private String name;
private double salary;
private int id;
public Employee(String n,double s)
{
this.name=n;
this.salary=s;
}
public String getName()
{
return name;
}
public double getSalary()
{
return salary;
}
public int getId() {
return id;
}
public void setId()
{ int a=1;
id=a;
a++;
}
public static void main (String[] args)
{Employee e=new Employee("taojunyi",5000);
e.setId();
System.out.println("id="+e.getId());
e.setId();
System.out.println("id="+e.getId());
}
}
结果:
我们观察到id没有变化,正是因为a作为局部变量是与函数调用结束共存亡的。第一次函数调用a自增为2,而调用结束后又变回1了。第二次在调用的时候a还是1。
行文至此,实例域与局部变量生存周期的区别清晰地呈现出来啦,欢迎大家指正!