用类名定义一个变量的时候,定义的应该只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法,那们类里面是否也应该有一个引用来访问自己的属性和方法纳?呵呵,JAVA提供了一个很好的东西,就是 this 对象,它可以在类里面来引用这个类的属性和方法

Java 关键字this只能用于方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。因 此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,这在“Java关键字static、final使用总结”一 文中给出了明确解释。并且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 constructori——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 constructori——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方法中使用!

值得注意的是:

1:在构造调用另一个构造函数,调用动作必须置于最起始的位置。

2:不能在构造函数以外的任何函数内调用构造函数。

3:在一个构造函数内只能调用一个构造函数。

说明在什么情况下需要用到this:
       第一、通过this调用另一个构造方法,用发是this(参数列表),这个仅仅在类的构造方法中,别的地方不能这么用。
       第二、函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。当然,在没有同名的情况下,可以直接用成员变量的名字,而不用this,用了也不为错,呵呵。
       第三、在函数中,需要引用该函所属类的当前对象时候,直接用this。

转载于:https://www.cnblogs.com/wzyxidian/p/4383338.html

Java this 心得相关推荐

  1. JAVA程序设计心得001

    JAVA程序设计心得001:java语言之所以能够跨平台,是因为java程序并不运行在操作系统中,而是运行在java虚拟机上.java虚拟机并不是硬件方面的东西,而是用于运行java程序的软件平台.J ...

  2. Java入门1.2.3—一个老鸟的Java学习心得

    Java入门1.2.3-一个老鸟的Java学习心得 基本信息 作者: 臧萌    出版社:清华大学出版社 ISBN:9787302217831 上架时间:2010-3-30 出版日期:2010 年3月 ...

  3. 计算机编程老鸟的心得,java入门123——一个老鸟java学习心得.docx

    java入门123--一个老鸟的java学习心得 学习Java心得体会 学习了一学期的Java课程,觉得是该总结自己的心得体会了.开始学习任何一门课(包括java),兴趣最重要.一直觉得自己在学计算机 ...

  4. java老鸟123怎么样_java入门123——一个老鸟的java学习心得.doc

    java入门123--一个老鸟的java学习心得 java入门123--一个老鸟的java学习心得 篇一:java初学者学习心得 学习Java心得体会 学习了一学期的Java课程,觉得是该总结自己的心 ...

  5. java入门123 pdf下载_Java入门123:一个老鸟的Java学习心得 pdf_IT教程网

    资源名称:Java入门123:一个老鸟的Java学习心得 pdf 第1篇 Java语言基本语法 第1章 让自己的第一个Java程序跑起来 第2章 搭建自己的集成开发环境 第3章 Java中的基本数据类 ...

  6. 关于java实习心得总结(十篇)

    关于java实习心得总结(篇一) 初次涉及Java领域,感觉到Java入门是好像没有C,C++入门快,工具也没有什么TurboC,VisualC++好用,什么JA_HOME,CLASSPATH,虚拟机 ...

  7. java入门123pdf二维码pdf_Java入门123:一个老鸟的Java学习心得 pdf

    资源名称:Java入门123:一个老鸟的Java学习心得 pdf 第1篇 Java语言基本语法 第1章 让自己的第一个Java程序跑起来 第2章 搭建自己的集成开发环境 第3章 Java中的基本数据类 ...

  8. Java入门123:一个老鸟的Java学习心得(二维码版)

    Java入门123:一个老鸟的Java学习心得(二维码版)清华大学出版社 Java入门123--一个老鸟的Java学习心得(二维码版)充分考虑了初学Java的种种困难,讲解细致入微,抽丝剥茧,层层推进 ...

  9. 学习java的心得体会_学习java的心得体会范文.doc

    学习java的心得体会范文 篇一:JAVA学习的心得体会 ? 国家队每一次踢球失败后都要说这么一句:我们回去后要好好总结,下次会打得更好! ? 总结不代表就能改过原有的不足,也不代表就能进步了 ? ( ...

  10. java学习体会论文_关于学习java的心得体会

    关于学习java的心得体会 高中毕业后直接踏入社会的我,开始并不知道java是什么,根本也没有想过会学习这个,甚至于到现在从事这个方面的工作,那么java到底是什呢?Java是一门面向对象编程语言,不 ...

最新文章

  1. python数据分析实战:数据可视化的一些基本操作
  2. windows10下安装opencv3.2+QT Creator+MingGW
  3. 对美的拥有-读阿兰德波顿《旅行的艺术》(zz)
  4. IIS7.0站点/虚拟目录中访问共享
  5. mybatis plus骚操作之逻辑删除
  6. 小程序开发之基础知识(0)
  7. AP 计算机 真知源自实践,盛誉源自读者;孜孜不倦,止于至善---林振营老师编著的中国第一套 AP计算机教材学生评价
  8. Pandas - 5.缺失值处理
  9. JRebel启动报错:compile error: cannot find constructor org.zeroturnaround.javarebel.integration.spring
  10. 华为鸿蒙os和小米ov,稳了,华为鸿蒙手机 OS 发布!小米也能用?
  11. 什么邮箱群发进箱率高,邮箱怎么群发邮件进箱率怎么样?
  12. matlab2016自带ga,[转载]MATLAB中自带遗传算法函数GA的用法
  13. Selenium2学习(四)-- xpath定位
  14. 当出现Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this
  15. wordpress网站文章内容页模板主题开发制作教程
  16. prometheus-webhook-dingtalk-1.4.0无法找到targets
  17. 电脑文件服务器地址大全,电脑的服务器地址大全
  18. 从零开始搭建属于自己的语音识别API服务器(ASRT开源项目)
  19. Says Of Heart!
  20. 来自TechCrunch Disrupt Europe 2014的4大创意

热门文章

  1. [YTU]_2638(编程题:多态--动物叫)
  2. 如何对batch的数据求Gram矩阵
  3. Java实现大数乘法_java实现大数加法、乘法(BigDecimal)
  4. ORM框架SQLAlchemy学习笔记
  5. Android开发自定义View
  6. Jmeter之Bean shell使用(五)
  7. 2018阿里客户顾问
  8. mingw编译boost_1_66_0
  9. JavaScript 中的事件设计
  10. [JavaWeb基础] 025.JAVA把word转换成html