java that关键字_Java中this关键字的几种用法

1 . 当成员变量和局部变量重名时,在方法中使用this时,表示的是该方法所在类中的成员变量。(this是当前对象自己)

如:public class Hello {

String s = "Hello";

public Hello(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) {

Hello x = new Hello("HelloWorld!");

System.out.println("s=" + x.s);//验证成员变量值的改变

}

}

结果为:s = HelloWorld!

1 -> this.s = Hello

2 -> this.s = HelloWorld!

s=HelloWorld!

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

2.把自己当作参数传递时,也可以用this.(this作当前参数进行传递)

class A {

public A() {

new B(this).print();// 调用B的方法

}

public void print() {

System.out.println("HelloAA from A!");

}

}

class B {

A a;

public B(A a) {

this.a = a;

}

public void print() {

a.print();//调用A的方法

System.out.println("HelloAB from B!");

}

}

public class HelloA {

public static void main(String[] args) {

A aaa = new A();

aaa.print();

B bbb = new B(aaa);

bbb.print();

}

}

结果为:HelloAA from A!

HelloAB from B!

HelloAA from A!

HelloAA from A!

HelloAB from B!

在这个例子中,对象A的构造函数中,用new B(this)把对象A自己作为参数传递给了对象B的构造函数。

3.有时候,我们会用到一些内部类和匿名类,如事件处理。当在匿名类中用this时,这个this则指的是匿名类或内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。如:

public class HelloB {

int i = 1;

public HelloB() {

Thread thread = new Thread() {

public void run() {

for (int j=0;j<20;j++) {

HelloB.this.run();//调用外部类的方法

try {

sleep(1000);

} catch (InterruptedException ie) {

}

}

}

}; // 注意这里有分号

thread.start();

}

public void run() {

System.out.println("i = " + i);

i++;

}

public static void main(String[] args) throws Exception {

new HelloB();

}

}

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

4. 在构造函数中,通过this可以调用同一类中别的构造函数。如:

public class ThisTest {

ThisTest(String str) {

System.out.println(str);

}

ThisTest() {

this("this测试成功!");

}

public static void main(String[] args) {

ThisTest thistest = new ThisTest();

}

}

为了更确切的说明this用法,另外一个例子为:

public class ThisTest {

private int age;

private String str;

ThisTest(String str) {

this.str=str;

System.out.println(str);

}

ThisTest(String str,int age) {

this(str);

this.age=age;

System.out.println(age);

}

public static void main(String[] args) {

ThisTest thistest = new ThisTest("this测试成功",25);

}

}

结果为:this测试成功

25

值得注意的是:

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

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

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

5.this同时传递多个参数。

public class TestClass {

int x;

int y;

static void showtest(TestClass tc) {//实例化对象

System.out.println(tc.x + " " + tc.y);

}

void seeit() {

showtest(this);

}

public static void main(String[] args) {

TestClass p = new TestClass();

p.x = 9;

p.y = 10;

p.seeit();

}

}

结果为:9 10

代码中的showtest(this),这里的this就是把当前实例化的p传给了showtest()方法,从而就运行了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机端富文本编辑器_谷歌Pixel系列手机每月更新无痛刷机技巧

本文适合小白&#xff0c;高手可以关闭。&#xff08;以下技巧基本为Pixel3操作&#xff0c;window7平台&#xff0c;Pixel系列手机大同小异&#xff09;谷歌Pixel系列手机属于小众手机&#xff0c;当中刷机有技巧&#xff0c;本人也是小白&#xff0c;经过无数次的实践经验得出…

js中this的指向问题

JS 面试题&#xff1a; var obj { foo: function(){ console.log(this) } } var bar obj.foo obj.foo() // 打印出的 this 是 obj bar() // 打印出的 this 是 window 请解释最后两行函数的值为什么不一样。 ——- 初学者关于 this 的理解一直很模糊。今天这篇文章就要一次讲清…

什么是数据中台?全面解读数据中台

来源&#xff1a;与数据同行伴随着云计算、大数据、人工智能等IT技术迅速发展及与传统行业实现快速融合&#xff0c;一场由数字化和智能化转型带来的产业变革正在孕育。随着企业规模不断扩大、业务多元化——中台服务架构的应运而生。“中台”早期是由美军的作战体系演化而来的…

add结果 bigdecimal_java.math.BigDecimal.add(BigDecimal augend)方法

全屏java.math.BigDecimal.add(BigDecimal augend)方法java.math.BigDecimal.add(BigDecimal augend) 返回一个BigDecimal&#xff0c;其值为(this augend)&#xff0c;其标度为 max(this.scale(), augend.scale())。声明以下是java.math.BigDecimal.add()方法的声明public Bi…

近指针, 远指针和巨指针

近指针&#xff0c; 远指针和巨指针是在段寻址的16位处理器中产生的。 &#xff08;http://blog.csdn.net/zhoudengqing/article/details/41347607&#xff09;转载于:https://www.cnblogs.com/ArcherHuang/p/6767858.html

python导出oracle数据到excel_【python】 python 查询oracle数据生成excel

接上篇安装好了cx_Oracle.msi MySql.msi 下载安装 xlwt-0.7.5.tar.gz&#xff0c; 到安装目录下 命令窗口cmd下执行 python setup.py install即可 被引用的文件&#xff1a; # coding: utf-8 # xlswriter.py # http://pypi.python.org/pypi/xlwt import xlwt class XLSWriter(o…

指挥控制系统中的自然智能和人工智能

来源&#xff1a;人机与认知实验室【编者按&#xff1a;为什么美军的“深绿系统”不好用&#xff1f;并常常被指挥员所诟病。但这是指控系统智能化的关键之所在&#xff01;你也许会简单地说&#xff1a;“是人、机、环境系统失调造成的”&#xff0c;若进一步问“那是怎样失调…

execel公式 java工具_PAP-快速开发框架:JAVA 计算器 自定义公式 解决EXCEL计算公式问题...

JAVA 自定义公式计算器&#xff0c; 形如EXCEL中含有大量的计算公式-财务函数&#xff1a; PMT FV NPER PV DB DDB 这些&#xff1a;可以通过编码方式&#xff0c;解决在JAVA中进行数据计算&#xff0c; 同时可以自定义扩展自己想要的数据函数。执行语句: PMT(0.00515,360,-77…

Sublime Text 3 搭建 React.js 开发环境

Sublime有很强的自定义功能&#xff0c;插件库很庞大&#xff0c;针对新语言插件更新很快&#xff0c;配合使用可以快速搭建适配语言的开发环境。 1. babel-sublime 支持ES6&#xff0c; React.js, jsx代码高亮&#xff0c;对 JavaScript, jQuery 也有很好的扩展。关于 babel 的…

python中对象的方法_在Python中表示一个对象的方法

在 Python 中一切都是对象。如果要在 Python 中表示一个对象&#xff0c;除了定义 class 外还有哪些方式呢&#xff1f;我们今天就来盘点一下。 0x00 dict 字典或映射存储 KV 键值对&#xff0c;它对查找、插入和删除操作都有比较高效率。用一个 dict 对象可以非常容易的表示一…

AI造假 vs AI打假 终结“猫鼠游戏”不能只靠技术

来源&#xff1a;和讯网人脸识别作为生物识别中的重要手段&#xff0c;成为了近年身份识别中最热门的领域。但与人脸识别技术共同发展的&#xff0c;还有借助机器学习系统、图像视频和音频内容&#xff0c;更改人脸、物体或环境呈现方式的深度伪造技术。随着这一技术的日趋成熟…

单例设计模式之安全的懒汉式

package 单例模式; /*** 单例设计模式之安全的懒汉式*/ class Single{private static Single single null;//私有构造方法private Single() {}//对外提供公有的获取内部创建的Single对象public static Single getInstance(){if(singlenull){synchronized(Single.class){if(sing…

navicat导入excel_傻瓜式教学【数据库管理工具Navicat】

想玩数据怎么能连sql都不会&#xff0c;想写sql怎么能不会用最简单的NavicatNavicat的安装看这里手把手教你安装Navicat——靠谱的Navicat安装教程​www.jianshu.com猴子&#xff1a;客户端navicat安装教程​zhuanlan.zhihu.com装好了Navicat&#xff0c;首先将csv格式的excel文…

你好AI丨重读图灵经典之作,九条反驳意见引人深思

来源&#xff1a; AI科技评论编译 | 丛末、蒋宝尚当一台计算机能够骗过人类&#xff0c;让他们相信它就是一个人的时候&#xff0c;就能够被称作智能。编者按&#xff1a;对于艾伦图灵&#xff0c;相信大家都并不陌生&#xff0c;作为人工智能鼻祖&#xff0c;图灵的诸多观点即…

java 比较源文件_Beyond Compare比较Java源代码文件的操作方法

今天小编就带大家来共同学习BeyondCompare如何比较Java源代码文件希呢?望可以帮助到有需要的小伙伴哦&#xff0c;下面就是详细完整的操作步骤。打开BeyondCompare&#xff0c;在主页面左侧目录下选择文本比较会话&#xff0c;打开会话操作界面。分别单击比较会话界面“打开文…

关于研究的方法

转载于:https://www.cnblogs.com/freedommovie/p/6769717.html

【学术快报】韩世辉课题组在《eLife》发表论文揭示群体冲突中复仇的神经生物学机制...

来源&#xff1a;脑科学在群体冲突中&#xff0c;看到对手伤害自己的队友会激发报复行为&#xff0c;去攻击对手。这一复杂社会行为贯穿人类历史&#xff0c;阐明其机理具有重要科学意义和社会价值。心理学研究提出对“内群体的爱”&#xff08;ingroup love&#xff09;或/和对…

无聊的python课程_python教案课程

第五单元进阶程序设计(总10课时)第一节选择编程语言(1课时)一、教学目标1、了解程序设计语言和两种翻译方式&#xff1b;2、了解Python背景、功能、安装&#xff0c;熟悉Python编程环境&#xff1b;3、编程初体验。体验一个小程序从建立、输入、调试、运行、保存的全过程。掌握…

《面向对象程序设计》课程作业二

github链接作业链接编写一个程序&#xff0c;要求根据给定的圆的半径求圆的面积&#xff0c;并将求得的结果打印出来。……建立一个工程&#xff0c;将程序写成两个.cpp和一个.h的形式。 这个问题倒是没什么难的&#xff0c;但对于同学们来说是一个上手模块化的好开端。从现在开…

报告 | 超级智能城市2.0 – 人工智能引领新风尚(附下载)

来源&#xff1a;智慧城市决策参考未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联…