黑马程序员技术交流社区

标题: Java基础--this关键字 [打印本页]

作者: michael_wlq    时间: 2015-8-27 18:36
标题: Java基础--this关键字
this关键字的用法:
1. this是指当前对象自己。
当在一个类中要明确指出使用对象自己的的变量或函数时就应该加上this引用。如下面这个例子中:

  1. package day05;

  2. public class ThisTest {
  3.         
  4.             String s = "Hello";
  5.          
  6.             //构造方法
  7.             public ThisTest(String s) {
  8.                System.out.println("s = " + s);
  9.                System.out.println("1 -> this.s = " + this.s);
  10.                this.s = s;//把参数值赋给成员变量,成员变量的值改变
  11.                System.out.println("2 -> this.s = " + this.s);
  12.             }
  13.          
  14.             public static void main(String[] args) {
  15.                ThisTest x = new ThisTest("HelloWorld!");
  16.                System.out.println("s=" + x.s);//验证成员变量值的改变
  17.             }
  18.         }
复制代码
结果为:s = HelloWorld!
              1 -> this.s = Hello
              2 -> this.s = HelloWorld!
        s=HelloWorld!
在这个例子中,构造函数Hello中,参数s与类Hello的成员变量s同名,这时如果直接对s进行操作则是对参数s进行操作。若要对类Hello的成员变量s进行操作就应该用this进行引用。运行结果的第一行就是直接对构造函数中传递过来的参数s进行打印结果; 第二行是对成员变量s的打印;第三行是先对成员变量s赋传过来的参数s值后再打印,所以结果是HelloWorld!而第四行是主函数中直接打印类中的成员变量的值,也可以验证成员变量值的改变。

2.把自己当作参数传递时,也可以用this.(this作当前参数进行传递)
  1. class A {
  2.         public A() {
  3.                 new B(this).print();// 调用B的方法
  4.         }

  5.         public void print() {
  6.                 System.out.println("HelloAA from A!");
  7.         }
  8. }

  9. class B {
  10.         A a;

  11.         public B(A a) {
  12.                 this.a = a;
  13.         }

  14.         public void print() {
  15.                 a.print();// 调用A的方法
  16.                 System.out.println("HelloAB from B!");
  17.         }
  18. }

  19. public class HelloA {
  20.         public static void main(String[] args) {
  21.                 A aaa = new A();
  22.                 aaa.print();
  23.                 B bbb = new B(aaa);
  24.                 bbb.print();
  25.         }
  26. }
复制代码
结果为:HelloAA from A!
              HelloAB from B!
              HelloAA from A!
              HelloAA from A!
              HelloAB from B!
在这个例子中,对象A的构造函数中,用new B(this)把对象A自己作为参数传递给了对象B的构造函数。

3、在构造函数中,通过this可以调用同一类中别的构造函数
  1. class Person
  2. {
  3.         private String name;
  4.         private int age;
  5.         
  6.         Person(String name)
  7.         {
  8.             this();
  9.                 this.name =name;
  10.         }
  11.         Person(String name,int age)
  12.         {
  13.                 this(name);
  14.                 this.name = name;
  15.                 this.age = age;
  16.                
  17.         }

  18. }
复制代码
注意:
1:在构造调用另一个构造函数,调用动作必须置于最起始的位置。(可理解为this是为了完成初始化工作的,所以要在起始位置)
2:不能在构造函数以外的任何函数内调用构造函数。
3:在一个构造函数内只能调用一个构造函数。










作者: qiushaocong    时间: 2015-8-27 21:28
努力~~~
作者: 寒星在天    时间: 2015-8-27 21:30
写的很好
作者: zp转身就忘    时间: 2015-8-27 21:37
很好啊,看看等于复习了
作者: michael_wlq    时间: 2015-8-27 22:55
qiushaocong 发表于 2015-8-27 21:28
努力~~~

加油~~~~~
作者: michael_wlq    时间: 2015-8-27 22:56
zp转身就忘 发表于 2015-8-27 21:37
很好啊,看看等于复习了

写轮眼,哈哈~
作者: jumtop    时间: 2015-8-27 22:58
可以简单的说一下吗
作者: qiushaocong    时间: 2015-8-28 23:35
michael_wlq 发表于 2015-8-27 22:55
加油~~~~~






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2