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. Hbase的基本操作(CDH组件可用)

    Habse创建一张表:    1,创建一个命名空间NameSpace(命名空间NameSpace指的是一个表的逻辑分组 ,同一分组中的各个表有类似的用途,相当于关系型数据库中的DataBase)    ...

  2. buffer IO和direct IO

    最近在看很多框架,redis,kafka等底层都涉及到文件IO操作的效率问题,所以查了些资料,看到这篇文章讲的比较明白些,贴出来留存. 链接地址: https://www.ibm.com/develo ...

  3. css3 --linear-gradient-渐变色

    //由上至下变色 background:-moz-linear-gradient( top,#f9b347,#f4ad40,#f9b347);  background:-webkit-gradient ...

  4. python基础入门之函数基础

    **python函数**一.def语名 def语名在运行的时候创建一个新的函数对象并且赋值一个变量名 一个def语句可以出现在任一语句可以出现的地方(python中所有的语名都是实时运行的,没有编译这 ...

  5. 【机器学习】随机森林 Random Forest 得到模型后,评估参数重要性

    在得出random forest 模型后,评估参数重要性 importance() 示例如下 特征重要性评价标准 %IncMSE 是 increase in MSE.就是对每一个变量 比如 X1 随机 ...

  6. ActivityThread 源码分析

    ActivityThread是Android Framework中一个非常重要的类,它代表一个应用进程的主线程(对于应用进程来说,ActivityThread的main函数确实是由该进程的主线程执行) ...

  7. PostgreSQL时间段查询

    1.今日 select * from "表名" where to_date("时间字段"::text,'yyyy-mm-dd')=current_date 2. ...

  8. Leetcode——Two Sum(easy)

    题目:Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1] 代码: ...

  9. Java中如何创建一个新的对象的/Creating Objects/

    The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't ...

  10. P1081 开车旅行(Not Finish)

    https://www.luogu.org/problemnew/show/P1081