this可能是几乎所有有一点面向对象思想的语言都会引用到的变量,java自然不例外。只是,this有多少种用法,我也不知道了,让我们来see see。

由简入奢! 易。

来个例子说明下:

public class DebugerTest {

    public static void main(String[] args) {
UserExample samp1 = new UserExample("amy");
System.out.println("who are u? ");
System.out.println(samp1.whoAreU());
System.out.println("intro yourself?");
System.out.println(samp1.introYourself());
} } class UserExample { private String name; private Integer age; private MyDoll myDoll; public UserExample() {
this(null);
} // 3. 调用本类的其他构造方法
public UserExample(String name) {
this(name, -1);
} public UserExample(String name, Integer age) {
this.name = name;
this.age = age;
this.myDoll = new MyDoll("prize");
} // 2. 调用本类属性
public void changeMyName(String name) {
this.name = name;
} public void changeMyAge(Integer age) {
this.age = age;
} public String whoAreU() {
return "I am " + name + ". ";
} public String haoOldAreU() {
return "i am " + age + " old.";
} // 1. 调用本类方法
public String introYourself() {
return this.whoAreU() +
this.haoOldAreU() +
"\r\n whoAmI@ " + this.myDoll.whoAmI() +
"\r\n whoAreSuper@ " + this.myDoll.whoAreSuper();
} class MyDoll { private String name; public MyDoll(String name) {
this.name = name;
} public void changeMyName(String name) {
this.name = name;
} // 5. 隐藏式的调用
public String whoAmI() {
return whoAreU();
} public String whoAreU() {
return "I am a Doll, my name is " + name + ". ";
} // 4. 调用父类的或指定的其他的类的同名方法
public String whoAreSuper() {
return "super is " + UserExample.this.whoAreU() + ". ";
} }
}

1. 调用本类方法,表达更清晰

    public String introYourself() {
return this.whoAreU() + this.haoOldAreU();
}

2. 调用本类属性,基本功亮出来

    public void changeMyName(String name) {
this.name = name;
}

3. 调用本类的其他构造方法,更灵活

    public UserExample(String name) {
this(name, -1);
}

4. 调用父类的或指定的其他的类的同名方法,为避免歧义而生的方法

        public String whoAreSuper() {
return "super is " + UserExample.this.whoAreU() + ". ";
}

5. 隐藏式的调用,为了写代码方便(更常用),不指定范围,java会在全类范围内向上查找变量或方法

        public String whoAmI() {
return whoAreU();
}

以上样例输出结果如下所示:

  this是个基本的关键字,我们平时也一直在用,只是也不一定所有同学都清楚怎么用。
  越是基础的,越是厉害的!

java中this的N种使用方法的更多相关文章

  1. 【转载】JAVA中线程的两种实现方法-实现Runnable接口和继承Thread类

    转自: http://blog.csdn.net/sunguangran/article/details/6069317 非常感谢原作者,整理的这么详细. 在java中可有两种方式实现多线程,一种是继 ...

  2. Java中super的几种使用方法并与this的差别

    1.     子类的构造函数假设要引用super的话,必须把super放在函数的首位. class Base { Base() { System.out.println("Base" ...

  3. Java中Map的三种遍历方法

    Map的三种遍历方法: 1. 使用keySet遍历,while循环: 2. 使用entrySet遍历,while循环: 3. 使用for循环遍历.   告诉您们一个小秘密: (下↓面是测试代码,最爱看 ...

  4. JAVA 中数组的几种排序方法

    1.数组的冒泡排序   public void bubbleSort(int a[]) {      int n = a.length;      for (int i = 0; i < n - ...

  5. java中String的21种使用方法

    (构造函数必须new出来) * public String (char[] vaue)                         将一个字符数组变成字符串(构造函数) * public Stri ...

  6. java中需要关注的3大方面内容/Java中创建对象的几种方法:

    1)垃圾回收 2)内存管理 3)性能优化 Java中创建对象的几种方法: 1)使用new关键字,创建相应的对象 2)通过Class下面的new Instance创建相应的对象 3)使用I/O流读取相应 ...

  7. java中遍历Map几种方法

    java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点. 先初始化一个map: publ ...

  8. Java中创建对象的5种方法

    将会列举5种方法去创建 Java 对象,以及他们如何与构造函数交互,并且会有介绍如何去使用这些方法的示例. 作为一个 Java 开发人员,我们每天都会创建大量的 Java 对象,但是我们通常会使用依赖 ...

  9. Java中创建对象的几种方式

    Java中创建对象的五种方式: 作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字.使用Cl ...

随机推荐

  1. yarn查询/cluster/nodes均返回localhost

    背景: 1.已禁用ipv6. 2.所有节点的/etc/hosts正确配置,任务在ResourceManager提交. 3.yarn-site.xml中指定了 yarn.resourcemanager. ...

  2. P1439 最长公共子序列(nlognLCS问题)

    模板 #include <iostream> #include <cstdio> using namespace std; ],loc[],b[],k,n,l,r,mid; i ...

  3. shell 到达一定数量文件自动删除最久时间文件

    #!/bin/bash#rm_file>14day ReservedNum=4                      #保留文件数量rm_file_dir='/home/sean/sean/ ...

  4. 安卓adb工具的安装方法

    adb是Android的一个很重要的调试工具,熟练掌握后可实现很多功能,比如有些手机的解锁.ROOT就会用到adb工具.可很多朋友都说不会安装,今天就从最开始的安装方法说起. adb工具其实不用安装, ...

  5. RF自动化测试

    1.自动化分层:UI层实现界面自动化,Service层实现接口自动化,Unit层实现单元测试. 2.UI自动化测试常见的工具有:QTP,AutoIt,Selenium.Selenium是做Web测试最 ...

  6. linux常用命令简介

    不管是测试还是开发,平时或多或少都要用到Linux命令,下面就把平时必用的一些命令简单总结哈,快学快用 1.   ls : 列举当前目录下文件.子目录的名字,如图举例: (1)  ls  -l  : ...

  7. 上传本地文件到github

    第一步:创建新的仓库 勾选Initialize this repository with a README选项,自动创建REAMDE.md文件. 第二步: $ git config --global ...

  8. Vue源码解析---数据的双向绑定

    本文主要抽离Vue源码中数据双向绑定的核心代码,解析Vue是如何实现数据的双向绑定 核心思想是ES5的Object.defineProperty()和发布-订阅模式 整体结构 改造Vue实例中的dat ...

  9. jsp中的四个作用域,九个内置对象分别是什么?

    九大内置对象: 内置对象(又叫隐含对象),就是在jsp中,不需要创建(由服务器<容器>来创建),可以直接使用的对象. 对象 含义 类 作用域 request 请求对象 类型 javax.s ...

  10. mybatis递归查询

    <!--mybatis递归查询--><resultMap id="recursionMenuMap" type="AgentMenu" ext ...