Java自学第八课之this的使用——自学笔记

this关键字主要有三个应用:

(1)this调用本类中的属性,也就是类中的成员变量;
(2)this调用本类中的其他方法;
(3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。

第一个怎么理解呢?

举个例子,当我们要给对象的某些属性赋值的时候


public class ThisDemo {
        public static void main(String[] args) {
            Student s=new Student("小明明",20);
            System.out.println(s);
        }
    }
    class Student{
        String name;
        int age;
        public Student(String name, int age) {
            //注:没有加this
            name = name;
            age = age;
        }
        @Override
        public String toString() {
            return "Student [ name=" + name + ", age=" + age +"]";
        }
    }
--------------------- 
作者:proveyourself 
来源:CSDN 
原文:https://blog.csdn.net/sugesi/article/details/78726547?utm_source=copy 
版权声明:本文为博主原创文章,转载请附上博文链接!

打印结果:Student [ name=null, age=0],赋值没有成功,这是为什么呢。因为在方法中使用的name都是方法内部自己定义的形参,这时候外部定义的参数被暂时的覆盖了。name=name这句话是把形参name的值又赋给形参name,因为值传递,所以这个值对实参的值没有影响,所以不会改变实参的值。

说明:name(局部变量)=name(局部变量);

而不是name(成员变量)=name(局部变量);

如果形参和实参的名字不一样,就不用加this,不然就要加this,这里用this表示当前对象的值,this.实参,表示调用这个构造方法的对象的属性。this.实参=形参;

成员变量和局部变量的区别

   成员变量:

      1、成员变量定义在类中,在整个类中都可以被访问。

      2、成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。

      3、成员变量有默认初始化值。

  局部变量:

      1、局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。

      2、局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。

      3、局部变量没有默认初始化值 

  在使用变量时需要遵循的原则为:就近原则
  首先在局部范围找,有就使用;接着在成员位置找。(和c语言一样,在函数内部定义和外部变量名字一样名字的变量的时候,外部变量暂时被覆盖)

作者:proveyourself
来源:CSDN
原文:https://blog.csdn.net/sugesi/article/details/78726547?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

第二个
调用类的普通方法

这个比较简单,直接上代码:

public class ThisTest2 {

public static void main(String[] args) {
    ThisDemo2 thisDemo = new ThisDemo2("李四", "杭州");
    System.out.println(thisDemo.get2());
}

}

class ThisDemo2 {

private String name;

private String address;

public ThisDemo2(String name, String address) {
    this.name = name;
    this.address = address;
}

public String get() {
    return "名字:" + name + ", 地址:" + address;
}

public String get2() {
    return this.get();
}

}

输出结果为:

名字:李四, 地址:杭州
可以看到get2()方法中使用了this.get()调用本类的普通方法

作者:Cappuccinooo
来源:CSDN
原文:https://blog.csdn.net/kuangay/article/details/81535701?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

第三个

调用类的构造方法

举例: 假如一个类中有三个构造方法(无参、一个参数、两个参数),代码如下:

public class ThisTest3 {

public static void main(String[] args) {
    ThisDemo3 thisDemo = new ThisDemo3("李四", "杭州人间天堂");
    System.out.println(thisDemo.get());
}

}

class ThisDemo3 {

private String name;

private String address;

public ThisDemo3() {

    System.out.println("创建了一个新的ThisDemo3实例......");
}

public ThisDemo3(String name) {
    this.name = name;

    System.out.println("创建了一个新的ThisDemo3实例......");
}

public ThisDemo3(String name, String address) {
    this.name = name;
    this.address = address;

    System.out.println("创建了一个新的ThisDemo3实例......");
}

public String get() {
    return "名字:" + name + ", 地址:" + address;
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
输出结果为:

创建了一个新的ThisDemo3实例…
名字:李四, 地址:杭州人间天堂
1
2
可以看到上面的代码有大量重复情况,那么我们这时候就可以使用this调用构造方法来简化我们的代码,让代码看起来清爽简洁。

public class ThisTest4 {
public static void main(String[] args) {
ThisDemo4 thisDemo = new ThisDemo4(“李四”, “杭州人间天堂”);
System.out.println(thisDemo.get());
}

}

class ThisDemo4 {

private String name;

private String address;

public ThisDemo4() {

    System.out.println("创建了一个新的ThisDemo4实例......");
}

public ThisDemo4(String name) {
    this();
    this.name = name;
}

public ThisDemo4(String name, String address) {
    this(name);
    this.address = address;

}

public String get() {
    return "名字:" + name + ", 地址:" + address;
}

}

输出结果为:

创建了一个新的ThisDemo4实例…
名字:李四, 地址:杭州人间天堂

上面就是使用this调用构造方法的优化后的代码,没有重复代码,看起来简洁多了。

作者:Cappuccinooo
来源:CSDN
原文:https://blog.csdn.net/kuangay/article/details/81535701?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

在构造器中调用另一个构造器在我看来并没有简洁多少,可能是我没有遇到真正好的例子。

猜你喜欢

转载自blog.csdn.net/weixin_42477031/article/details/83040794