浅谈Java中的This关键字

来源:互联网 发布:排列组合公式算法c 编辑:程序博客网 时间:2024/06/06 05:05

在Java中提供一个this关键字,其实这个关键字很简单,花点时间去看看相关的资料就会很容易明白怎么去使用这个关键字,下面开始讲解this这个关键字。

首先我们应该知道this代表的什么,它代表的是一个对象的引用,下面在代码里面解释:

this是什么?

代码1:解释this是对象的引用

package com.hua.www.override;


public class TestThis {
public static void main(String[] args) {

System.out.println(new A().testThis());//这里被我简写了,可以分步  A a=new  A();    A b=a.testThis();     System.out.println(b);
}


}
class A{
public A testThis(){
return this;
}
/*@Override
public String toString() {
// TODO Auto-generated method stub
return "类A重写的tostring的方法!";
}*/
}

输出:com.hua.www.override.A@17494c8(如果上面的注释去掉,tostring被我重写,输出:类A重写的tostring的方法!)

this怎么使用?在哪里使用?

this关键字使用的地方一般在两个地方:1.构造函数中2.非static方法中

代码1:构造函数中使用this关键字(重点:在构造函数中使用this调用另一个构造函数,只能使用一次,并且这个语句要放在第一句。)

package com.hua.www.override;

public class TestThis {
public static void main(String[] args) {
A a=new A();
System.out.println(a.getName());
System.out.println(a.getAge());
}
}
class A{
private String name;
private int age;
public A(){
this(2);
/*Constructor call must be the first statement
in a constructor.
报错的原因是,要放在第一句。所以不可以用this在构造器中使用两次去调用构造函数。
*/
//this("hua");

}
public A(int i){
this("hua");
this.age=10;

}
public A(String s){
this.name="hua";
}
public String getName() {
return name;
}
public int getAge() {
return age;
}

}

代码1:非static方法中使用this关键字
package com.hua.www.override;

public class Test {
String name;
public String getName() {
this.aaa();
return name;
}
public void setName(String name) {
this.name = name;
}
public void aaa(){
System.out.println("方法aaa");
}
}
重点讲解:为什么static方法不能使用this关键字(static方法不能调用非static方法和变量的原因基本一样)?
首先我们要知道静态方法是在类加载时就会加载,而非静态函数和变量则是在创建对象的时候才会加载。重点就在静态加载在非静态之前,也就是说静态加载时还不存在非静态的,那么静态这时候调用非静态的根本就找不到,所以不能调用
this是对象的引用,静态的方法来调用对象的引用,显然在没有创建对象之前根本找不到这个对象,所以编译通不过,编译器会报错。


什么时候使用this关键字?

1.在方法中要用调用这个方法的对象的引用时
2.当形参和成员变量重名时,在方法内使用成员变量,就要使用this来表明你要使用的是对象的成员变量
3.方法调用时其实前面都默认加上了this 关键字,只是省略不写,如果想让代码更具有可读性,可以适当添加。
0 0