还有就是注意:this不能用在static方法中!所以甚至有人给static方法的定义就是:没有this的方法!虽然夸张,但是却充分说明this不能在static方法中使用! 作者: 余清兰 时间: 2012-7-16 08:33
这段代码是构造函数重载,这里用到了this 其中的一种用法:构造函数间互相调用,要用this();并且此语句只能放在构造函数的第一行。
因为初始化动作要先执行,若初始化里还有初始化,就要先把最里面的初始化执行完,再执行外面的初始化。
所以这段代码结果是cba,解析如下:
public class Hello
{
public static void main(String[] args)
{
new Hello(3L);//给对象初始化,把3L传给有参构造函数的(long x)
}
public Hello(long x)
{
this ((int) x); //这个构造函数初始化当前对象时,又调用了带(int x)的构造函数,this()这种格式就是构造函数里再调用另一个构造函数
System.out.println("a");//所以这句话没执行,程序直接跳转到下一个构造函数。
}
public Hello(int x)//执行此构造函数,给当前对象初始化
{
this();//发现这个又用this调用了底下的一个无参构造函数,跳转到下一个无参构造函数
System.out.println("b");//这句话同样也没执行
}
public Hello()//程序执行这个构造函数给当前对象初始化
{
System.out.println("c");//这里没有再调用构造函数了,只有一个输出语句,就把c输出了,此构造函数执行完,接着就执行前一个构造函数输出b,再执行最前一个就输出a,所以结果是cba
}
}
下面是我学习时总结的this用法,希望能帮到你
1、 this修饰符用于区分成员变量和函数变量重名的情况。因为如果函数里的参数(局部变量)与类里的成员变量重名了,此时程序会先找局部变量。
例:
class Person
{
private String name;
Person(String name)
{
this.name = name;
}
public void speak()
{
System.out.println("name="+name);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person("lisi");
p.speak();