class Student
{
String name;
int age;
public Student(String name, int age)
{
//this.name = name;
this(name); // 调用了本类中只有一个参数的构造函数
this.age = age;
System.out.println("两个参数的构造方法被调用了");
}
public Student(String name) // 被调用的构造函数
{
this.name = name;
System.out.println("一个参数的构造方法被调用了");
}
}
public class thisTest1
{
public static void main(String[] args)
{
Student s = new Student("铁蛋", 10);
System.out.println("小孩叫:" + s.name + ", 今年" + s.age + "岁");
}
}
/*结果:一个参数的构造方法被调用了
两个参数的构造方法被调用了
小孩叫:铁蛋, 今年10岁*/
class Animal
{
String name = "狗";
String color;
public void eat(){
String name = "老鼠";
System.out.println(name + "在吃..."); // "老鼠在吃..."
}
}
/*eat()函数先在本程序块中查找是否有name变量,如果找到,比如name="老鼠",就不会再去堆内存中查找。*/
class Demo
{
public static void main(String[] args)
{
Animal a = new Animal();
a.eat();
}
}
// 结果:老鼠在吃...
class Animal
{
String name = "狗";
String color;
public void eat(){
String name = "老鼠";
System.out.println(this.name + "在吃..."); // "狗在吃..."
}
}
/*eat()函数先在本程序块中查找是否有name变量,如果找到,比如name="老鼠",就不会再去堆内存中查找,
如果在程序块中出现"this.name",程序就会去堆内存中查找对象中的name变量。*/
class Demo
{
public static void main(String[] args)
{
Animal a = new Animal();
a.eat();
}
}
class Student
{
String name;
int age;
public Student(String name, int age)
{
name = name; // 此处相当于是局部变量给局部变量赋值,而成员变量并没有获得赋值
age = age;
}
}
class Demo
{
public static void main(String[] args)
{
Student s = new Student("铁蛋", 10);
System.out.println("小孩叫:" + s.name + ", 今年" + s.age + "岁");
// 所以这里的成员变量s.name(String类型)仍然是初始值null,而s.age的初始值是0
}
}
//结果:小孩叫:null, 今年0岁
public Student(String name, int age)
{
this.name = name; // 这样写就没问题了,this.name就是指的成员变量
this.age = age;
}
因篇幅问题不能全部显示,请点此查看更多更全内容