java中的this随处可见,用法也多,现在整理有几点:
1. this是指当前对象自己。

当在一个类中要明确指出使用对象自己的的变量或函数时就应该加上this引用。如下面这个例子中:

public class This_Demo {String s = "Hello";public This_Demo(String s) {System.out.println("s = " +s);System.out.println("1 -> this.s = " + this.s);this.s = s;System.out.println("2 -> this.s = " + this.s);}public static void main(String[] args) {This_Demo demo = new This_Demo("Hello World");}
}

运行结果:

s = Hello World
1 -> this.s = Hello
2 -> this.s = Hello World

在这个例子中,构造函数This_Demo中,参数s与类This_Demo的变量s同名,这时如果直接对s进行操作则是对参数s进行操作。若要对类This_Demo的成员变量s进行操作就应该用this进行引用。运行结果的第一行就是直接对构造函数中传递过来的参数s进行打印的结果;第二行是对成员变量s的打印;第三行是先对成员变量s赋传过来的参数s值后再打印,所以得到第三行的打印结果。

2.把this作为参数传递

当你要把自己作为参数传递给别的对象时,也可以用this。如:

class Person {public void eat(Apple apple) {Apple peeled = apple.getPeeled();System.out.println("Yummy");}
}class Peeler {static Apple peel(Apple apple) {return apple;}
}class Apple {Apple getPeeled() {return Peeler.peel(this);}
}public class PassingThis {public static void main(String[] args) {new Person().eat(new Apple());}
}

运行结果:
Yummy
Apple需要调用Peeler.peel()方法,它是一个外部的工具方法,将执行由于某种原因而必须放在Apple外部的操作,为了将其自身传递给外部方法,Apple必须使用this关键字。

3.注意匿名类和内部类中的中的this。
有时候,我们会用到一些内部类和匿名类,如事件处理。当在匿名类中使用this时,这个this则指的是匿名类或内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。如下面这个例子:
public class This_Inner {int i = 1;public This_Inner() {Thread thread = new Thread() {@Overridepublic void run() {for(;;) {This_Inner.this.run();try {sleep(1000);} catch (Exception e) {}}}};thread.start();}public void run() {System.out.println("i = " + i);i++;}public static void main(String[] args) {new This_Inner();}
}
运行结果:

i = 1
i = 2
i = 3

在上面这个例子中,thread是一个匿名类对象,在它的定义中,它的run函数里用到了外部类的run函数。这时由于函数同名,直接调用就不行了。这时有两种办法,一种就是把外部的run函数换一个名字,但是这种办法对于一个开发到中途的应用来说是不可取的。那么就可以用这个例子中的办法用外部类的类名加上 this 引用来说明要调用的是外部类的方法 run。

4.在构造器中调用构造器

可能为一个类写了多个构造器,有时可能想在一个构造器中调用另一个构造器,以避免重复代码。可用this关键字做到这一点。

通常写this的时候,都是指“这个对象”或者“当前对象”,而且它本身表示对当前对象的引用。在构造器中,如果为this添加了参数列表,那么就有了不同的含义。这将产生对符合此参数列表的某个构造器的明确调用;这样,调用其他构造器就有了直接的途径:

public class Flower {int petalCout = 0;String s = "initial value";public Flower(int petals) {petalCout = petals;System.out.println("Constructor w/ int arg only, petalCount = " + petalCout);}public Flower(String ss) {System.out.println("Constructor w/ String arg only, s = " + ss);}public Flower(String s, int petals) {this(petals);
//!     this(s);   不能调用两个System.out.println("String & int args");}public Flower() {this("hi",88);System.out.println("default constructor (no args)");}void printPetalCount() {
//!     this(11);   //不是在非构造函数里System.out.println("petalCount = " + petalCout + "...s = " + s);}public static void main(String[] args) {Flower x = new Flower();x.printPetalCount();}
}

运行结果:

Constructor w/ int arg only, petalCount = 88
String & int args
default constructor (no args)
petalCount = 88...s = initial value

构造器Flower(String s, int petals)表明:尽管可以用this调用一个构造器,但却不能调用两个。此外,必须将构造器调用至于最起始处,否则编译器会报错。

这个例子也展示了this的另一种用法(该用法在第一点已经提过)。由于参数s的名称和数据成员s的名称相同,所以会产生歧义。使用this.s来代表数据成员就可以解决这个问题。

转载于:https://www.cnblogs.com/whyalwaysme/p/4361046.html

关于Java的this关键字相关推荐

  1. 【Java_基础】Java中Native关键字的作用

    本篇博文转载与:Java中Native关键字的作用 转载于:https://www.cnblogs.com/leiblog/p/10529056.html

  2. JAVA面向对象-----final关键字

    JAVA面向对象-–final关键字 1:定义静态方法求圆的面积 2:定义静态方法求圆的周长 3:发现方法中有重复的代码,就是PI,圆周率.1:如果需要提高计算精度,就需要修改每个方法中圆周率. 4: ...

  3. java的static关键字

    java的static关键字 静态变量和静态方法 static关键字最基本的用法是: 1.被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来 2.被static ...

  4. java中final关键字的使用

    final 中文翻译为 最终的,在java中也是较为常用的关键字之一. 在java 中 final 关键字可以修饰  类.方法.变量 final 修饰在类上,则表示该类不能被继承,如果里面的成员变量没 ...

  5. Java语言的关键字

    Abstract 抽象的 一个Java语言中的关键字,用在类的声明中来指明一个类是不能被实例化的,但是可以被其它类继承.一个抽象类可以使用抽象方法,抽象方法不需要实现,但是需要在子类中被实现 brea ...

  6. java中的关键字static

    原文链接: https://zhuanlan.zhihu.com/p/70110497 昨晚面试中被问到,没能回答出来.这篇答疑文章写得非常好,无一字可增删,遂直接复制. 在平时开发当中,我们经常会遇 ...

  7. java继承的关键字_超级关键字在Java继承中的作用

    可以使用Java中的super关键字来引用父类对象.它通常在继承的上下文中使用.给出了一个用Java演示super关键字的程序,如下所示: 示例class A { int a; A(int x) { ...

  8. java标识符与关键字_4、Java标识符和关键字

    标识符:Java对各种变量,方法和类等要素命名时使用的字符序列称为标识符.(凡是自己可以起名的地方都叫标识符,都遵循标识符的规则) Java的命名规则: 1.标识符由字母.下划线"_&quo ...

  9. Java的synchronized关键字:同步机制总结

    不久前用到了同步,现在回过头来对JAVA中的同步做个总结,以对前段时间工作的总结和自我技术的条理话.JAVA的synchronized关键字能够作为函数的修饰符,也可作为函数内的语句,也就是平时说的同 ...

  10. java 死锁 内存消耗_详解Java中synchronized关键字的死锁和内存占用问题

    先看一段synchronized 的详解: synchronized 是 java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并 ...

最新文章

  1. libusb中的热插拔使用举例
  2. 致物理学家的一个实验
  3. 连接池技术 Connection Pooling
  4. navigationBar 颜色修改
  5. php如何判断用户是从指定页面跳转进来的
  6. Spring 事务原理和使用
  7. [UWP]使用Picker实现一个简单的ColorPicker弹窗
  8. __attribute__((regparm(number))):函数通过number个寄存器传递参数,否则通过堆栈
  9. AD19中画MOSFET的常见错误——封装出错
  10. SpringMVC+MyBatis整合——事务管理
  11. echarts--迁徙图
  12. 身份证识别仪阅读器读卡器谷歌google chrome网页浏览器WEB二次开发包
  13. Android自定义View之CircleView
  14. Sky Computing:利用空间异构分布式计算特性加速联邦学习
  15. 区块链通证经济的核心不在技术,而在于商业逻辑的重构
  16. 互联网日报 | 5月22日 星期六 | 中国移动5G套餐用户破2亿;京东物流港股IPO认购结束;天猫宣布运费险降费...
  17. 怎么做读书分享PPT课件?
  18. mysql audit 表_关于MySQL AUDIT(审计)那点事
  19. ppt图片设计素材下载网站搭建模板
  20. Python面向对象,从农药到吃鸡 bilibili视频笔记

热门文章

  1. 高德地图显示多个气泡_arcgis api 4.x for js 地图加载多个气泡窗口展示(附源码下载)...
  2. slqite3库查询数据处理方式_从数据仓库到百万标签库,精细化数据管理,这么做就够了...
  3. html算命源码,index.html
  4. Windows下Nginx负载均衡配置和优化方案
  5. java 接口 单元测试_java单元测试之如何实现异步接口的测试案例
  6. 爱河许云上计算机乐谱,神马乐团爱河简谱
  7. java lib_JavaLib
  8. 素因子分解算法python语言_python中求取最小公倍数的两种方法
  9. MySQL8的新特性ROLE
  10. jQuery DataTables: How to add a checkbox column