Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。

package test;

public class ThisTest {

private int i=0;

//第一个构造器:有一个int型形参

ThisTest(int i){

this.i=i+1;//此时this表示引用成员变量i,而非函数参数i

System.out.println("Int constructor i——this.i:  "+i+"——"+this.i);

System.out.println("i-1:"+(i-1)+"this.i+1:"+(this.i+1));

//从两个输出结果充分证明了i和this.i是不一样的!

}

//  第二个构造器:有一个String型形参

ThisTest(String s){

System.out.println("String constructor:  "+s);

}

//  第三个构造器:有一个int型形参和一个String型形参

ThisTest(int i,String s){

this(s);//this调用第二个构造器

//this(i);

this.i=i++;//this以引用该类的成员变量

System.out.println("Int constructor:  "+i+"/n"+"String constructor:  "+s);

}

public ThisTest increment(){

this.i++;

return this;//返回的是当前的对象,该对象属于(ThisTest)

}

public static void main(String[] args){

ThisTest tt0=new ThisTest(10);

ThisTest tt1=new ThisTest("ok");

ThisTest tt2=new ThisTest(20,"ok again!");

System.out.println(tt0.increment().increment().increment().i);

//tt0.increment()返回一个在tt0基础上i++的ThisTest对象,

//接着又返回在上面返回的对象基础上i++的ThisTest对象!

}

}

运行结果:

Int constructor i——this.i:  10——11

String constructor:  ok

String constructor:  ok again!

Int constructor:  21

String constructor:  ok again!

14

总结一下,this主要要三种用法:

1、表示对当前对象的引用!

2、表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下。

3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。但是这里必须非常注意:只能引用一个构造方法且必须位于开始!

还有就是注意:this不能用在static方法中!所以甚至有人给static方法的定义就是:没有this的方法!虽然夸张,但是却充分说明this不能在static方法中使用!

说明在什么情况下需要用到this:

第一、通过this调用另一个构造方法,用发是this(参数列表),这个仅仅在类的构造方法中,别的地方不能这么用。

第二、函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。当然,在没有同名的情况下,可以直接用成员变量的名字,而不用this,用了也不为错。

第三、在函数中,需要引用该函所属类的当前对象时候,直接用this。

其实这些用法总结都是从对“this是指向对象本身的一个指针”这句话的更深入的理解而来的,死记不然容易忘记而且容易搞错,要理解!

java this用法_java中this用法小结相关推荐

  1. java中的replace用法_java中replace用法举例:replace(char oldChar, char newChar)返回一个新的字符串...

    1.JAVA中,char占2字节,16位.可在寄存汉字 2.java中replace用法举例:replace(char oldChar, char newChar)返回一个新的字符串,它是经过用 ne ...

  2. cal java中的用法_Java中static用法

    Java中static用法 转自 http://blog.pfan.cn/sword2008/13772.html 一.static 请先看下面这段程序: public class Hello{ pu ...

  3. java .this的用法_JAVA中this用法小结

    Java中的this随处可见,用法也多,现在整理有几点: 1. this是指当前对象自己. 当在一个类中要明确指出使用对象自己的的变量或函数时就应该加上this引用.如下面这个例子中: 1 publi ...

  4. java instanceof用法_java中instanceof用法

    转自https://www.cnblogs.com/bkyshichao/p/7090401.html Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.inst ...

  5. java finalize 作用_Java中finalize()用法

    垃圾回收器要回收对象的时候,首先要调用这个类的finalize方法(你可以 写程序验证这个结论),一般的纯Java编写的Class不需要重新覆盖这个方法,因为Object已经实现了一个默认的,除非我们 ...

  6. java登陆session用法_java中session用法

    涉及文件  login_do.jsp和sessionCheck.jsp和所有的jsp页面 1.在login_do.jsp登录成功的前面 加上 session.setAttribute("us ...

  7. java final定义_Java中final关键字的用法

    final在Java中并不常用,然而它却为我们提供了诸如在C语言中定义常量的功能,不仅如此,final还可以让你控制你的成员.方法或者是一个类是否可被覆写或继承等功能,这些特点使final在Java中 ...

  8. java中this是实例吗_java中this用法实例

    java中this用法实例,java this关键字的使用.this关键字,关于它的解释,可以概括为:哪一个对象在用这段代码,this就代表谁. 例如,"人"这个类,张三说,&qu ...

  9. java中extends用法_JAVA的extends用法

    理解继承是理解面向对象程序设计的关键.在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. (1)继承 cla ...

最新文章

  1. VisualStudio:WEB 性能测试和负载测试 入门
  2. PHP函数stream_context_create()模拟POST/GET
  3. wxWidgets:图像面板image panel
  4. 组播,单播,广播,多播,泛洪的概念
  5. 2.1.3码元、波特、速率、带宽
  6. FFMPEG视音频编解码零基础学习方法
  7. 1-算法-hanoi汉诺塔问题- 递归
  8. android6变化,一次尝鲜体验 关于一加6升级Android P后的变化
  9. 2.FactoryMethod-工厂方法模式
  10. 网站用户的生命周期价值
  11. 希捷硬盘无法连接计算机,新买的希捷1T移动硬盘在电脑上没法识别
  12. 提高 Python 代码的可读性,你需要知道这10个技巧
  13. 服务端开发框架及技术(转)
  14. Redis消息订阅发布
  15. Java根据当前日期获取年初,年末,季初,季末,月初,月末日期的方法
  16. linux 下的 wchar_t
  17. 解决:el-table组件中设置show-overflow-tooltip属性,数据过多时闪烁不显示不能复制问题。
  18. 我的世界怎么在服务器中显示键位,我的世界神奇宝贝mod怎么玩 基本键位介绍...
  19. 分享1个超全面的 Python爬虫 接单实例!
  20. 三轴加速度计测量值生成算法matlab,[算法][三轴、六轴、九轴传感器算法分析] 1、分享一个三轴加速计matlab动态可视化脚本...

热门文章

  1. Spring Cloud——Consul——架构体系
  2. CF1497E1 Square-free division (easy version)
  3. cf1453B. Suffix Operations
  4. 牛客题霸 [滑动窗口的最大值] C++题解/答案
  5. 操作集锦【牛客网】 牛客练习赛60
  6. 「ROI 2017 Day 2」反物质(单调队列优化dp)
  7. CF464E The Classic Problem(主席树+哈希+最短路)
  8. 震惊!递推与递归竟然可以这么编!%99的程序员都不知道!
  9. P3705-[SDOI2017]新生舞会【0/1分数规划,费用流】
  10. P3620-[APIO/CTSC2007]数据备份【贪心,堆,链表】