this, 一个官方的说法是,this首先是一个对象,它代表调用这个函数的对象。

根据面向对象的基本语法,每当调用变量或者函数的时候,都要按照类名.变量(函数)的格式来调用,意即每个变量或函数都必须属于某一个实际的对象而不是一个类(static的除外).
       在不会产生混淆的地方, this是可以省略的,但一般都会加上,(Think in Java里面说最好不要加,因为大家都不加)

例如,下面的程序中,类"Person"里面加与不加 this 编译运行后的结果是一样的:

 package testThis;

 public class Test {
public static void main(String args[]){
Person p1 = new Person();
p1.name = "zhangsan";
Person p2 = new Person();
p2.name = "lisi"; p1.talk();
p2.talk();
}
} class Person{
String name;
void talk(){
System.out.println("My name is " + this.name);
}
}

上面的代码里第18行,不管是"this.name"还是"name",运行的结果都是:

My name is zhangsan
My name is lisi

因为前面已经把p1和p2里面的name变量赋值,所以执行方法的时候,都会打印出它们各自的数据.

但是,当函数里面有参数时,如果函数的参数和成员变量一样,这时不加this的话,程序就会根据"就近原则",自动调用最近的值,如下面的代码:   上面已经把对象p1和p2里面的变量name分别赋值为"zhangsan"和"lisi",但类"Person"里面的方法"talk"现在有了参数"String name",而且没有加"this",这时如果运行这个方法,方法就会接收后面参数传送给它的值,分别是"zhang"和"li",这时运行结果就会是:

My name is zhang
My name is li

所以,这里虽然对象p1和p2各有自己的变量 name,但它们调用的方法接收的却是参数里面的值,(从系统里各变量的颜色背景也可心看出对应的变量),而不是它们自己本身的值.所以这里输出的结果跟它们自己内部的值无关.

如果想要在它们各自调用talk()方法时分别输出自己内部的值,则需要在类 "Person"里面的方法"talk"里加上"this",这样,当它们各自调用这个方法时,输出的结果都是它们各自内部变量的值了:

上面介绍的是用this来调用本身对象的变量和函数,this还有一个重要的作用就是用来调用构造函数.可以用来精简代码.比如下例,如果我们的类里面有多个构造函数,分别给不同的变量赋值,就可能会产生重复代码,为了解决这些重复代码,就可以用this(变量)的方式,来调用另一个构造函数,来给变量赋值.

   

Java里this的作用和用法的更多相关文章

  1. Java中volatile的作用以及用法

    volatile让变量每次在使用的时候,都从主存中取.而不是从各个线程的“工作内存”. volatile具有synchronized关键字的“可见性”,但是没有synchronized关键字的“并发正 ...

  2. Java中static变量作用和用法详解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  3. QVariant(相当于是Java里面的Object,起到一个数据类型“擦除”的作用,可以使用Q_DECLARE_METATYPE进行注册)

    =QVariant= [%这个类型相当于是Java里面的Object,它把绝大多数Qt提供的数据类型都封装起来,起到一个数据类型“擦除”的作用.比如我们的 table单元格可以是string,也可以是 ...

  4. Java 里如何实现线程间通信(转载)

    出处:http://www.importnew.com/26850.html 正常情况下,每个子线程完成各自的任务就可以结束了.不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程 ...

  5. Java 里的异常(Exception)详解

    作为一位初学者, 本屌也没有能力对异常谈得很深入.   只不过Java里关于Exception的东西实在是很多. 所以这篇文章很长就是了.. 一, 什么是java里的异常   由于java是c\c++ ...

  6. serialVersionUID, ObjectInputStream与ObjectOutputStream类,Serializable接口,serialVersionUID的作用和用法

    ObjectInputStream与ObjectOutputStream类所读写的对象必须实现Serializable接口,对象中的transient和static类型成员变量不会被读取和写入 Ser ...

  7. JSP九大内置对象的作用和用法总结?

    JSP九大内置对象的作用和用法总结? 1.request对象javax.servlet.http.HttpServletRequest request对象代表了客户端的请求信息,主要用于接受通过HTT ...

  8. Java中hashCode的作用

    转  http://blog.csdn.net/fenglibing/article/details/8905007 Java中hashCode的作用 2013-05-09 13:54 64351人阅 ...

  9. java里的static和final

    本节介绍JAVA里static和final的作用和使用方法以及一些需要注意的问题. 一.static static表示"全局"或"静态",用来修饰成员变量和成员 ...

随机推荐

  1. 【knowledgebase】不要在一个很大的RDD上调用collect

    如果一个RDD很大以至于它的所有元素并不能在driver端机器的内存中存放下,请不要进行如下调用: val values = myVeryLargeRDD.collect()   collect将尝试 ...

  2. HTTP 权威指南

    第一章 http概述 1.3.1 媒体类型 - http为每种web传输的数据格式加上MIME类型数据标签(multipurpose internet mail 1.4 事务 一个请求 + 一个响应 ...

  3. js体验

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. http://www.cnblogs.com/20135131zxy/

    一.实验内容 1. 使用JDK编译.运行简单的Java程序 2.使用Eclipse 编辑.编译.运行.调试Java程序 二.实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门( ...

  5. java, poi, excel

    工作需要用java操作Excel,现在网上搜索了一下,决定选取POI包来操作.pom内容如下: <dependency> <groupId>org.apache.poi< ...

  6. CSS盒子模型学习记录3(侧面导航栏)

    学习http://www.blueidea.com/tech/web/2007/4545_2.asp 代码试验 html <!DOCTYPE html PUBLIC "-//W3C// ...

  7. C#调用C++的dll

    在类中添加引用 using System.Runtime.InteropServices; 在程序中写 //关闭连接 [DllImport("opapi2.dll", EntryP ...

  8. visual studio code(vscode) 调试php

    1.下载vscode (visual studio code). 2.安装vscode 扩展 php-debug 安装步骤见 https://marketplace.visualstudio.com/ ...

  9. json2.js源码解读记录

    相关内容:json详细用法.js语法.unicode.正则   json特点--最简单.最小巧的经典js库.   json作者:道克拉斯.克劳福德(Douglas Crockford)--js大牛 出 ...

  10. 配置 node.js 环境

    安装 Node.js 1. 下载 Node.js, 首先到官网 http://nodejs.org/download/ 的下载页面下载 Windows 版本, 这里有两种版本,推荐 .msi 的安装程 ...