在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;
}
}
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");
}
}
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 关键字,只是省略不写,如果想让代码更具有可读性,可以适当添加。