未经允许,禁止转载!!!!!!!!

this关键词在java里面很重要,想了解清楚this就必须对  类;对象;this;成员变量;方法;构造方法 都了解清楚。

一、使用this调用本类中的成员变量(属性)或成员方法

class Student {
private String name; //定义一个成员变量name public void setName(String name) { //设置姓名,定义一个形参name
name=name; //将局部变量的值传递给成员变量
}
public String getName( ) { //获得姓名
return "姓名:"+name;
}
} public class ThisExample01{
public static void main(String args[]) {
Student stu=new Student();
stu.setName("李明");
System.out.println(stu.getName());
}
}

运行结果:姓名:null

由运行结果可以看出,通过name=name并没有正确的将内容赋给属性,为什么呢?因为此时操作的name实际上是方法中的,跟类中的属性完全不沾边。

另外,这个程序代码中,有一个成员变量name,同时在方法中有个形式参数,参数名也是name。然后在方法中将形式参数name的值传递给成员变量name。虽然我们可以看明白这个代码的含义,但是作 
为Java编译器它是怎么判断使用哪个变量的呢?到底是将形式参数name的值传递给成员变量name,还是反过来讲成员变量name的值传递给形式参数name呢?

此时this这个关键字就起到作用了,这种情 况下使用this这个关键字代表的就是类中的成员变量,又叫做类的属性。所以此时,为了明确的表示出哪一个是类中的属性,就要加上“this.属性名称”的操作,

将student类的代码改进如下:this.成员变量 = 该方法传的参数

class Student {
private String name; public void setName(String name) {
this.name=name;
}
public String getName( ) {
return "姓名:"+name;
}
}

既然this能够调用本类中的成员变量,那么,this也可以调用本类中的成员方法。以例2为例,程序代码如下:

class Student{
private String name; public void setName(String name){
this.print(); //调用本类中的print方法
//this.name = name; 由于此处把this.name = name注释了,所以向setName传递的名字参数没有被成员变量接收到,所以最后名字是null
} public String getName( ) {
return "姓名:"+name;
} public void print( ) {
System.out.println("设置相关信息如下……");
}
} public class ThisExample02{ public static void main(String args[]) {
Student stu=new Student();
stu.setName("李明");
System.out.println(stu.getName());
}
}

最后输出结果是:

设置相关信息如下……
姓名:null

如果将this.name = name写进去的话,最后输出结果是:

设置相关信息如下……
姓名:李明

一般情况下,在Java语言中引用成员变量或者成员方法都是以对象名.成员变量或者对象名.成员方法的形式。

不过有些程序员即使在没有相同变量的时候,也喜欢使用this.成员变量的形式来引用变量 。这主要是从便于代码的阅读考虑。

一看到这个 this关键字就知道现在引用的变量是成员变量或者成员方法,而不是局部变量。这无形中就提高了代码的阅读性

二、使用this调用构造方法

在一个Java类中,构造方法是一个与类同名的方法,必须与类的名字相同。而且在Java类中必须存在一个构造方法。

如果在代码中没有显示的体现构造方法的话,那么编译器在编译的时候会自动添加 一个没有形式参数的构造方法。

在一个类中可以存在多个构造方法,这些构造方法都采用相同的名字,只是形式参数不同。Java语言就凭用户的参数来判断调用哪一个构造方法。

当一个类中有多个构 造方法时,可以利用this关键字相互调用。

Java编译器会根据所传递的参数数量的不同,来判断该调用哪个构造方法。

所以,我们在实际编程的时候有时候需要在一个构造方法中对另一个构造方法进行调用。但是,在使用this关键字调用其他构造方法的时候,this()调用构造方法只能放在构造方法的首行

为的是能够为类中的属性初始化;而且至少有一个构造方法是不用this调用,否则程序会出现错误。

注意的是,使用this调用构造方法只适用于构造方法的调用,类中的其他方法不能使用这种方法。

三、使用this引用当前对象

this最重要的特定就是表示当前对象,那什么叫当前对象呢?在Java中当前对象就是指当前正在调用类中方法的对象。

使用this引用当前对象是指如果在类的方法中需要返回一个对象,并且该对象是 方法所在的类的当前对象,可以使用this关键字作为方法的返回值。

package practise;

public class Student {
public String getInfo(){
System.out.println("Student类-------->" + this);
return null;
}
}
package practise;

public class ThisExample06{
public static void main(String[] args){
Student stu1 = new Student();
Student stu2 = new Student();
System.out.println("MAIN方法---------->" + stu1);
stu1.getInfo();
}
}

输出结果是:

MAIN方法---------->practise.Student@15db9742
Student类---------->practise.Student@15db9742

下面再看一个例子

package practise;

public class Students {
private int age;
private String name; public String getInfo(){
System.out.println("Students类-------->" + this);
return null;
}
public Students(){
System.out.println("新对象实例化");
}
public Students(String name,int age){
System.out.println("新对象实例化");
this.age = age;
}
}
package practise;

public class ThisExample03 {

    public static void main(String[] args) {
// TODO Auto-generated method stub
Students stu1 = new Students("李明",20);
System.out.println(stu1.getInfo());
}
}

最后输出结果:

新对象实例化
Students类-------->practise.Students@15db9742
null

下面是this和super调用构造器的方法

java基础语法this关键字的更多相关文章

  1. Java基础语法(1)-关键字与保留字

    title: Java基础语法(1)-关键字与保留字 blog: CSDN data: Java学习路线及视频 1.关键字 关键字(keyword)的定义和特点 定义:被Java语言赋予了特殊含义,用 ...

  2. Java基础语法(一)---关键字、常量、变量、运算符

    一.关键字 定义:被Java赋予了特殊含义的单词. 特点:体现上都是英文小写. 1. 用于定义数据类型的关键字 基本数据类型: 整数类型:byte  short  int  long   浮点类型:f ...

  3. java——基础语法

    java基础语法 1.关键字:java赋予特殊含义的单词. 2.标识符:程序中开发人员自定义的名词,例如:类名,函数名,变量名(注意事项:①不能以阿拉伯数字开头②不能采用关键字). 3.常量:固定的数 ...

  4. Java基础语法(2)-变量

    title: Java基础语法(2)-变量 blog: CSDN data: Java学习路线及视频 1.什么是变量? 变量的概念 内存中的一个存储区域 该区域的数据可以在同一类型范围内不断变化 变量 ...

  5. JAVA基础语法——标识符、修饰符、关键字(个人整理总结)

    JAVA基础语法——标识符.修饰符.关键字 一 . 标识符 1.1    什么是标识符 就是程序员在定义java程序时,自定义的一些名字,例如helloworld 程序里关键字class 后跟的Dem ...

  6. Java基础语法(11)-面向对象之关键字

    title: Java基础语法(11)-面向对象之关键字 blog: CSDN data: Java学习路线及视频 1.this this是什么 它在方法内部使用,即这个方法所属对象的引用: clas ...

  7. 2、Java 基础语法标识符、修饰符、变量、 数组、枚举、关键字

    Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如 ...

  8. 008 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 02 Java 中的关键字

    008 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 02 Java 中的关键字 关键字 关键字就是一些有特殊意义的词 之前学习的程序中涉及到的关键字 Java中 ...

  9. java面向对象编程——第二章 java基础语法

    第二章 java基础语法 1. java关键字 abstract boolean break byte case catch char class const continue default do ...

随机推荐

  1. C# 哈希加密

    1.方法一: [c-sharp] view plaincopy //适用于C#语言 //使用前需导入以下命名空间:using System.Web.Security; //第一个参数为需加密的字符串, ...

  2. WPF 本地化(多语言)

    如果你的程序需要本地化,考虑的因素诸多,例如:当文本改变后,控件的当前高度,宽度 是否合适.所在的位置是否合适.字体.布局是否合适?如果已经构建了一个真正自适应的布局,就不会有问题.用户界面应当能够调 ...

  3. LazyValue<T>

    public void ExtendFuncT() { //():匿名无参方法.() =>方法名,指派匿名无参方法去执行另外一个方法. LazyValue<int> lazyOne ...

  4. Recurrent Neural Network Language Modeling Toolkit代码学习

    Recurrent Neural Network Language Modeling Toolkit  工具使用点击打开链接 本博客地址:http://blog.csdn.net/wangxingin ...

  5. mybatis由浅入深day02_8spring和mybatis整合

    8 spring和mybatis整合 8.1 整合思路 需要spring通过单例方式管理SqlSessionFactory.mapper接口. spring和mybatis整合生成代理对象,使用Sql ...

  6. 进程 vs. 线程(python的协程)(转廖雪峰老师python教程)

    我们介绍了多进程和多线程,这是实现多任务最常用的两种方式.现在,我们来讨论一下这两种方式的优缺点. 首先,要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,Work ...

  7. docker学习-运行第一个docker镜像hello world

    docker pull  [OPTIONS] NAME[:TAG]:从远程仓库拉取一个镜像到本地,NAME是要拉取的镜像的名称,TAG是docker镜像的版本,不指定的话默认是最新版本 docker ...

  8. Redis(四)-- 集群

    一.Redis适合做企业级分布式缓存集群的条件 1.Redis内置哈希槽,有16384个哈希槽(0~16383),根据CRC16算法来确定这个集群中属于哪一个服务器来处理这个请求. 2.Redis提供 ...

  9. kubectl get 输出格式

    常见的输出格式有: * custom-columns=<spec> # 根据自定义列名进行输出,逗号分隔 * custom-columns-file=<filename> # ...

  10. TCP协议的基本规则和在Java中的使用

    TCP协议是面向连接的,相对于UDP协议来说效率较低,但是比较安全,数据不容易丢失.TCP协议类似打电话的过程,在一端拨号时必须等待对方回应,确定两端建立了连接通道才能传送信息. 在Java中TCP被 ...