对于下面的代码怎么区分是哪个对象调用当前方法:

Class Banana {
void peel(int i);
}
publci Class BananaPeel {
public static void main(String[] args) {
Banana a = new Banana();
Banana b = new Banana();
a.peel(1);
b.peel(2);
}
}

编译器会自动把“所操作对象的引用”作为第一个参数传递给peel(),所以上述两个方法的调用就变成如下形式:

Banana.peel(a, 1);

Banana.peel(b, 2);

this只能在方法内部使用,表示对“调用方法的那个对象”的引用。

如果在方法内部调用同一个类的另一个方法,就不必使用this,直接调用即可。

对于下面的代码:

public class Apricot {
void pick();
void pit() { pick();...}
}

在pit()内部,可以写this.pick(),但没不要。编译器会自动添加。

当需要返回对当前对象的引用时,常常在return语句中这样写:

public Class Leaf {
int i = 0;
Leaf increment() {
i++;
return this;
}
void print() {
System.out.println("i = " + i);
}
public static void main(String[] args) {
Leaf x = new Leaf();
x.increment().increment().increment().print();
}
}
//结果i = 3

由于increment()通过this关键字返回对当前对象的引用,所以很容易在一条语句里对同一个对象执行多次操作。

this关键字对于将当前对象传递给其他方法也很有用:

public class Test1 {

    public static void main(String[] args) {
new Person().eat(new Apple());
} }
class Person {
public void eat(Apple apple) {
apple.getPeeled();
System.out.println("eat");
}
}
class Peeler {
static Apple peel(Apple apple) {
return apple;
}
}
class Apple {
Apple getPeeled() {
return Peeler.peel(this);
}
}

Apple需要调用Peeler.peel()方法,它是一个外部的工具方法,将执行由于某种原因而必须放在Apple外部的操作,为了将其自身传递给外部方法,Apple必须使用this关键字。

this关键字的作用:

1.调用本类中的成员变量。

2.调用本类中的其他构造方法,调用时要放在构造方法的首行,且只能调用一次。

3.返回对象的值。

1.调用成员变量例子:

public class Student {
String name;
private void setName(String name) {
this.name = name;
}
}

2.调用构造方法例子:

public class Flower {
int a = 0;
String s = "";
public Flower(int a) {
this.a = a;
}
public Flower(String s) {
this.s = s;
}
public Flower(String s, int a) {
this(s);
// this(a);编译错误
this.a = a;
}
}

3.返回对象的值的例子可以看上面的return this的例子。

4.在类方法中不能有this关键字,直接调用类方法即可。

super()

1:特殊变量super,提供了对父类的访问。
      2:可以使用super访问父类被子类隐藏的变量或覆盖的方法。
      3:每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
      4:构造是不能被继承的。

最新文章

  1. curl+openssl编译
  2. Atitit.实现反向代理(1)----url rewrite 配置and内容改写 and -绝对路径链接改写 java php
  3. 浏览器检测(BrowserDetect.js)
  4. The Six Types of Rails Association
  5. Android分析第三方应用layout的神器
  6. 关于RSA加密
  7. iOS发展- 文件共享(使用iTunes导入文件, 并显示现有文件)
  8. DateTime.ToString("dd/MM/yyyy");后,不能直接Convert.ToDateTime的解决:
  9. Web in Linux小笔记001
  10. Django类方式写view
  11. WebStorm11
  12. C++中的Public 、Private、Protected 区别
  13. algs4 使用 DrJava 编写 Hello World on Windows
  14. 基本数据类型补充,深浅copy
  15. nexus2 配置
  16. java合并单元格同时导出excel
  17. 究竟 javascript 错误处理有哪些类型?
  18. 用Putty连接连接Linux
  19. better-scroll在vue中的坑
  20. 使用boch仿真器在x86 PC平台上搭建Linux0.11系统环境(windows下)

热门文章

  1. python常见概念
  2. 503. Next Greater Element II
  3. linux下查找文件命令总结
  4. Reachability from the Capital
  5. React基础(Diff算法,属性和状态)
  6. Hotspot GC实现原理
  7. 云中Active Directory是如何工作的?
  8. 设计模式之第5章-解释器模式(Java实现)
  9. ADO之密码验证--3次错误就锁定『改进』
  10. MOTCF 没时间解释了 条件竞争漏洞