java this用法_java中this用法小结

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是指向对象本身的一个指针”这句话的更深入的理解而来的,死记不然容易忘记而且容易搞错,要理解!

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

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

相关文章

第1步 新建spring+springmvc+mybatis项目 每步都有 讲解 巨详细

Idea2017部署项目到tomcat时没有artifacts解决办法 2017年12月01日 23:16:22 剑胜 阅读数:10342 在Idea2017中想部署maven构建的项目到tomcat容器中时,需要配置Deployment属性,选择war或者war exploded的发布方式。而要进行这个配置首先要点…

Java 集合系列04之 fail-fast总结

转载自 Java 集合系列04之 fail-fast总结概要 前面,我们已经学习了ArrayList。接下来,我们以ArrayList为例,对Iterator的fail-fast机制进行了解。内容包括::1 fail-fast简介2 fail-fast示例3 fail-fast解决办法4 fai…

Vue.js说说组件

什么是组件:组件是Vue.js最强大的功能之一。组件可以扩展HTML元素,封装可重用的代码。在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能。在有些情况下,组件也可以是原生HTML元素的形式,以…

java 内存快照怎么看_jvm内存快照dump文件太大,怎么分析

1、场景通常,使用eclipse的mat图形化工具打开dump的时候都会内存溢出.对于比较小的dump,eclipse可以打开,但一旦dump文件太大,eclipse就有点束手无策。这时候怎么办呢?可以使用linux下的mat,既Memory Analy…

第3步 (请先看第2步再看第3步) 新建完spring+springmvc+mybatis项目 需要推送gitee仓库进行管理 巨详细

idea中Terminal终端无法执行GIT命令: touch README.md问题解决 解决方法二: ◆更改路径即可 Git\bin\bash.exe 或 Git\bin\sh.exe 然后重新启动idea即可 ********************88注意:每次更改完成后需要重新启动IDEA****************** 记…

115个Java面试题和答案——终极列表(下)

转载自 115个Java面试题和答案——终极列表(下)第一篇讨论了面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,本章主要讨论异常处理,Java小应用程序&#xff0…

java编译提示错误信息_JAVA编译错误提示缺少“{”

展开全部有点粗心了 我把我修改过的发62616964757a686964616fe58685e5aeb931333335323435给你具体问题:是extends不是extands类Circle拼错Circle构造方法height拼错abstract class Shape{public int width,height;public Shape(int width,int height){this.widthwid…

谈谈这些年前端的变化

我从事web开发工作到现在差不多四年了,前后台都涉及过,近两年两年前端开发为主。我记得11年的时候,我到南京的第一年,加入了一个电商公司,从事PHP开发,那个时候公司里面有一个女孩子,专门从事前…

第2步 安装git 配置git用户 git的安装和项目的建立

安装git 比较简单 在window上是有个 git bash 这个命令集成了一部分window和linux的命令 在任意目录下(一般是项目工程目录下面) 右键点击git bash 进入之后 小写字母 i 进入编辑模式(insert模式出入) [user] nameyjb1091947832(注册…

jsp连接mysql数据库 例子_JSP 连接 MySQL 数据库的例子

一:数据库 1. 正确install mysql 2. mysql -h localhost -u root -p 3. create database shujuku; 4. grant all privileges on shujuku.* to testlocalhost identified by "12345"; 5. use shujuku; 6. create table biao (id int(8) primary key, name…

115个Java面试题和答案——终极列表(上)

转载自 115个Java面试题和答案——终极列表(上)本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力。下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点&…

依赖注入的威力,.NET Core的魅力:解决MVC视图中的中文被html编码的问题

有园友在博问中提了这样一个问题 —— .NET Core 中文等非英文文字html编码输出问题&#xff0c;到我们的 ASP.NET Core 项目中一看&#xff0c;也是同样的问题。 比如下面的Razor视图代码&#xff1a; {ViewBag.Title "代码改变世界"; }<title>ViewBag.Title…

第4步 tomcat配置中文字符集 启动Tomcat  网页乱码

第二部&#xff1a;给页面上添加mate标签 <html> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"> <head> 然而并没什么效果。于是我就去掉这种无用的操作。换另外一种方案。 第三部&#xff1a;在tomcat的配置中…

自己动手开发编译器(我们的朋友 -- 装配脑袋走了)

编者: 昨天在微信群里得知 我们的朋友--装配脑袋(施凡老师),因白血病离我们而去,自从得病以来,施老师在积极的接受治疗&#xff0c;8.27 得到的消息还是比较让人开心的,大家都在期待着他能够重出江湖。装配脑袋一直在从事一个编译器项目,在博客园的博客里有个系列《自己动手开发…

Java Web开发与实战_Java Web开发技术与实战项目

【实例简介】北大青鸟ACCP6.0 使用JSP/Servlet/Ajax技术开发新闻发布系统第一部分课件以及代码答案1到6章【实例截图】【核心代码】7.《JavaWeb开发技术》└── 7.《JavaWeb开发技术》├── Chapter01│ ├── 01 提供给教员的内容│ │ ├── 01 教学演示案例│ │…

修改Eclipse中项目在Apache Tomcat中的部署路径

转载自 修改Eclipse中项目在Apache Tomcat中的部署路径在Eclipse中配置完服务器后&#xff0c;如果不做任何修改就去部署项目,部署后你会发现,在Apache Tomcat的webapp文件夹下并没有这个项目&#xff0c;那么项目去哪里了呢&#xff1f; 其实项目已经部署到如下默认目录…

微服务意味着分布式系统

Sander Hoogendoorn认为&#xff0c;向微服务迁移就意味着向分布式系统进行迁移&#xff0c;在这里&#xff0c;我们必须要处理延迟、认证与授权、无法到达的消息。通过使用微服务&#xff0c;我们能够将大型系统拆分为更小的组件&#xff0c;从而实现对架构的重新掌控。借助于…

在Eclipse中使用JUnit4进行单元测试(初级篇)

转载自 在Eclipse中使用JUnit4进行单元测试&#xff08;初级篇&#xff09;本文绝大部分内容引自这篇文章&#xff1a;http://www.devx.com/Java/Article/31983/0/page/1我们在编写大型程序的时候&#xff0c;需要写成千上万个方法或函数&#xff0c;这些函数的功能可能很强大…

java包 类 方法_Java中包与包之间方法的调用及其关键字区分(基础)

最近在写应用时&#xff0c;对包与包之间方法的调用不太清楚&#xff0c;专门看视频和网站后整理了这篇文章&#xff0c;希望对刚入门的同志有所帮助&#xff0c;进入主题。首先我们先简单看看Java中private、protected、public和default的主要区别&#xff1a;(看不懂没关系&a…