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

由简入奢! 易。

来个例子说明下:

  1. public class DebugerTest {
  2.  
  3. public static void main(String[] args) {
  4. UserExample samp1 = new UserExample("amy");
  5. System.out.println("who are u? ");
  6. System.out.println(samp1.whoAreU());
  7. System.out.println("intro yourself?");
  8. System.out.println(samp1.introYourself());
  9. }
  10.  
  11. }
  12.  
  13. class UserExample {
  14.  
  15. private String name;
  16.  
  17. private Integer age;
  18.  
  19. private MyDoll myDoll;
  20.  
  21. public UserExample() {
  22. this(null);
  23. }
  24.  
  25. // 3. 调用本类的其他构造方法
  26. public UserExample(String name) {
  27. this(name, -1);
  28. }
  29.  
  30. public UserExample(String name, Integer age) {
  31. this.name = name;
  32. this.age = age;
  33. this.myDoll = new MyDoll("prize");
  34. }
  35.  
  36. // 2. 调用本类属性
  37. public void changeMyName(String name) {
  38. this.name = name;
  39. }
  40.  
  41. public void changeMyAge(Integer age) {
  42. this.age = age;
  43. }
  44.  
  45. public String whoAreU() {
  46. return "I am " + name + ". ";
  47. }
  48.  
  49. public String haoOldAreU() {
  50. return "i am " + age + " old.";
  51. }
  52.  
  53. // 1. 调用本类方法
  54. public String introYourself() {
  55. return this.whoAreU() +
  56. this.haoOldAreU() +
  57. "\r\n whoAmI@ " + this.myDoll.whoAmI() +
  58. "\r\n whoAreSuper@ " + this.myDoll.whoAreSuper();
  59. }
  60.  
  61. class MyDoll {
  62.  
  63. private String name;
  64.  
  65. public MyDoll(String name) {
  66. this.name = name;
  67. }
  68.  
  69. public void changeMyName(String name) {
  70. this.name = name;
  71. }
  72.  
  73. // 5. 隐藏式的调用
  74. public String whoAmI() {
  75. return whoAreU();
  76. }
  77.  
  78. public String whoAreU() {
  79. return "I am a Doll, my name is " + name + ". ";
  80. }
  81.  
  82. // 4. 调用父类的或指定的其他的类的同名方法
  83. public String whoAreSuper() {
  84. return "super is " + UserExample.this.whoAreU() + ". ";
  85. }
  86.  
  87. }
  88. }

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

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

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

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

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

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

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

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

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

  1. public String whoAmI() {
  2. return whoAreU();
  3. }

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

  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. hid.dll

    hid.dll是USB的HID相关动态链接库文件,缺少它可能会造成usb设备无法正常使用.当你的电脑弹出提示“计算机缺少hid.dll”或“无法找到hid.dll Hkapi.dll HKComman ...

  2. Servlet获取 URL 地址

    使用 ServletRequest 的如下方法 getContextPath 取得项目名 getServletPath 取得Servlet名 getPathInfo 取得Servlet后的URL名,不 ...

  3. Android学习(二)

    学号 20189214 <Android程序设计>第七周学习总结 教材学习内容总结 监听 设置点击监听的5种方式 方法1:直接用匿名内部类 这是最常用的一种方法,直接setXXXListe ...

  4. c语言相关概念

    2019-04-06 a文件 库是预编译的目标文件(object files)的集合,它们可被链接进程序.静态库以后缀为‘.a’的特殊的存档文件(archive file)存储. a文件转so文件:h ...

  5. 对Python选修课的期望

    作为一个之前完全没有接触过任何计算机语言的人我对于Python完完全全是个小白,那么我就以一个菜鸟的角度来谈谈我对这门选修课的期望吧.                                  ...

  6. 打开手机模拟器后adb devices查看不到设备连接

    1.找到sdk\platform-tools目录下的adb.exe,将该adb.exe复制到模拟器安装目录下覆盖模拟器自带的adb.exe就可以了.

  7. angular的一些东西

    每个人都知道在使用angular的时候只能有一个ng-app指令但是也可以手动创建,这样就可以写很多个模块 例: var app=angular.module('App',[]);var app1=a ...

  8. 浅谈nodejs和php

    现在,Web开发公司和开发人员可以选择多种技术栈来构建Web应用程序.早期网络发展,不同的技术被用于前端和后端开发.但是,随着Node.js的发布,布局发生了变化,因为它允许开发人员使用 JavaSc ...

  9. GitHub学习途径

    之前学习GitHub的一个pdf文件 作者是stormzhang 我觉得那个pdf教的很详细,我还没看完,正在学习中,学到了文件的clon和在本机如何更新GitHub的文件. 在此分享一下 下载链接h ...

  10. Linux---基础指令(一)

    https://www.linuxprobe.com/chapter-02.html  (Linux就要这么学) 一.执行查看帮助命令 date:date命令用于显示及设置系统的时间或日期,格式为“d ...