1.Java中this的使用——调用本类中的属性(成员变量);
参考代码:
public class A{
String name;
private void SetName(String name){
this.name = name;
}
}
因为成员方法接收的形参与成员变量都为name,所以,这里可以使用this关键字来调用本类中的成员变量(String name)。简单的说就是:加注this关键字就是表面指向的就是本类中的成员变量。不加的话优先就近局部变量
注意:
this关键字访问类的成员变量和成员函数时不受访问权限的控制****,可以访问本类中所有的成员变量和方法,包括private的成员变量和方法。
但是static方法中不能使用this关键字访问,这是因为tatic叫静态方法,也叫类方法。即在程序启动的时候,就会为static方法分配一块内存空间
没有static的其他方法,非静态方法,必须在类实例化时,才有内存空间,所以在类实例化之前是无法调用的
jvm有类加载器,第一次加载类时执行类中的static域,jvm会专门划分一个内存区域给static程序块,可以成为静态区。属于这个类。
this指针是指向类的对象,在实例化对象时jvm会在堆区分配内存给一个具体的对象,this指针指向这个对象。而类中的static域始终是在静态区分配内存,this指向堆区,所以不能调用。
2.Java中this的使用——调用成员方法;
参考代码:
public class This{
String name;
private void setName(String name) {
this.name = name;
System.out.println("setName: " + this.name);
}
private void thisTest(String name) {
this.setName(name);//调用setName方法
System.out.println("thisTest: " + this.name);
}
public static void main(String[] args) {
ThisTest tt = new ThisTest();
tt.setName("jfw");
tt.thisTest("lnn");
}
}
运行结果:
由运行结果可以发现有两个setName但是又因为thisText方法中传的参数是“lnn”所以中间那个结果是setName:lnn;
3.Java中this的使用——调用构造方法
构造方法是一个类的对象在通过new关键字创建时自动调用,也就是说构造方法不能像调用其他成员方法一样通过方法名(也就是类名)来调用。(如果在代码中没有显示的体现构造方法的话,那么编译器在编译的时候会自动添加一个没有形式参数的构造方法。)但如果一个类有多个构造方法,可以在一个构造方法中通过this关键字来调用其他的构造方法。
参考代码:
public class People { //定义一个类,类的名字为People。
public People(String name) { //定义一个带形式参数的构造方法(名字与类相同故为构造方法)
}
public People() { //定义一个构造方法,名字与类相同故为构造方法
this("jfw!");
}
public static void main(String[] args){
}
}
在上面这段代码中,我们定义了两个构造方法,一个带参数,另一个没有带参数。在没有带参数的构造方法中,使用了this(“jfw!”)这句代码。即在构造方法中使this关键字表示调用类中的构造方法。如果一个类中有多个构造方法,而且名字都相同,此时Java编译器会根据所传递的参数数量的不同,来判断该调用哪个构造方法。如上例中,this关键字后面加上了一个参数,那么就表示其调用的是带1个参数的构造方法。如果现在有多个构造方法,同理。
注意:
- 不能在类的static成员或static块中使用this。
- 不能在非构造方法中调用this构造方法,只能在构造方法中通过this来调用其他构造方法。
- 不能通过this递归调用构造方法,即不能在一个构造方法中通过this直接或间接调用该构造方法本身!!!
错误代码:
public class A {
Public Person(){
this("jfw");
}
Public Person(String name){
this("jfw","lnn");
}
public Person(String name,String name1){
this();
}
}
由以上代码我们发现第一个无参构造方法调用的是第二个有参构造方法,第二个有参构造方法又调用第三个有参构造方法,而第三个有参构造方法却调用了第一个无参构造方法。这样就形成了间接调用该构造方法本身。这样是不可取的。
4.Java中this的使用——返回对象的值
参考代码:
public class Person {
private String name;
public Person() {
}
public Person(String name) {
this.name = name;
}
public Person getPerson(){
return this;
}
@Override
public String toString() {
return "名字='" + name + '\'' ;
}
public static void main(String[] args) {
Person p = new Person("jfw");
System.out.println(p.getPerson());
}
}
运行结果:
其中 getPerson方法直接返回的是this,而输出结果却是:
名字=‘jfw’
所以this关键字除了可以引用变量或者成员方法之外,还可以返回类的对象。