A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 庄星睿 中级黑马   /  2012-6-12 17:04  /  1240 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

学到后边了,回过头来在做前面的小练习也蒙了:
  1. class A
  2. {
  3. private B b=null;
  4. public void fun()
  5. {
  6. this.b=new B(this);
  7. this.b.fun();

  8. }
  9. public void print()
  10. {
  11. System.out.println("Hello World!!!");
  12. }

  13. }

  14. class B
  15. {
  16. private A a=null;
  17. public B(A a)
  18. {
  19. this.a =a;
  20. }
  21. public void fun()
  22. {
  23. this.a.print();
  24. }

  25. }


  26. public class ThisDemo2
  27. {
  28. public static void main(String[] args)
  29. {
  30. new A().fun();
  31. new B(new A()).fun();
  32. }
  33. }
复制代码
输出结果都是:
Helloworld!
Helloworld!
new B(new A()).fun()还好理解一点,匿名对象参数传递,函数调用
new A().fun(); 其中this .b=new B(this);this 代表当前对象了,把当前对象传进去,this.b.fun()实际上相当于还是调用当前对象的方法

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

3 个回复

正序浏览
首先你要理解this的用法
1、this指的就是当前对象(类的实例)。
2、假设A类有一个f()方法,里面用到了this。
那么
A a1 = new A();
A a2 = new A();
a1.f(); // 里面的this就是指当前对,即a1。
a2.f(); // 里面的this就是指当前对,即a2。

3、所以静态static方法中不能用this,因为this指的是当前对象,而静态方法调用是不用创建对象的。

回复 使用道具 举报
本帖最后由 李海晓 于 2012-6-12 17:36 编辑

this .b=new B(this);这个this传递的是自己的引用,也就是Class A,this.a =a;将this的引用赋予Class B中的变量a。接着执行Class B中的public void fun(){this.a.print();}。调用Class A中的public void print(){System.out.println("Hello World!!!");}
打印出Hello World
回复 使用道具 举报
this就是指像对象本身的一个指针,但this不能用在静态的方法中。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马