Java this关键字的使用详解

 更新时间:2021年11月05日 10:26:36   作者:兮动人  
this 关键字是 Java 常用的关键字,可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用

1. 先看一段代码,并分析问题

在这里插入图片描述

在这里插入图片描述

public class This01 {

    //编写一个main方法
    public static void main(String[] args) {

        Dog dog1 = new Dog("大壮", 3);
        //dog1调用了 info()方法
        dog1.info();

    }
}

class Dog{ //类

    String name;
    int age;
    // public Dog(String dName, int  dAge){//构造器
    // 	name = dName;
    // 	age = dAge;
    // }
    //如果我们构造器的形参,能够直接写成属性名,就更好了
    //但是出现了一个问题,根据变量的作用域原则
    //构造器的name 是局部变量,而不是属性
    //构造器的age  是局部变量,而不是属性
    //==> 引出this关键字来解决
    public Dog(String name, int  age){//构造器
        //this.name 就是当前对象的属性name
        this.name = name;
        //this.age 就是当前对象的属性age
        this.age = age;
    }

    public void info(){//成员方法,输出属性x信息
        System.out.println(name + "\t" + age + "\t");
    }
}

在这里插入图片描述

2. 深入理解 this

为了进一步理解 this,我们再看一个案例 (This01.java)

在这里插入图片描述

在这里插入图片描述

使用hashCode()看看对象的情况

在这里插入图片描述

public class This01 { 

	//编写一个main方法
	public static void main(String[] args) {

		Dog dog1 = new Dog("大壮", 3);
		System.out.println("dog1的hashcode=" + dog1.hashCode());
		//dog1调用了 info()方法
		dog1.info(); 

		System.out.println("============");
		Dog dog2 = new Dog("大黄", 2);
		System.out.println("dog2的hashcode=" + dog2.hashCode());
		dog2.info();
	}
}

class Dog{ //类

	String name;
	int age;

	public Dog(String name, int  age){//构造器
		//this.name 就是当前对象的属性name
		this.name = name;
		//this.age 就是当前对象的属性age
		this.age = age;
		System.out.println("this.hashCode=" + this.hashCode());
	}

	public void info(){//成员方法,输出属性x信息
		System.out.println("this.hashCode=" + this.hashCode());
		System.out.println(name + "\t" + age + "\t");
	}
}

在这里插入图片描述

3. this 的注意事项和使用细节

ThisDetail.java

  • this 关键字可以用来访问本类的属性、方法、构造器
  • this 用于区分当前类的属性和局部变量
public class ThisDetail {
    public static void main(String[] args) {
        T t = new T();
        t.f3();
    }
}

class T{

	String name = "兮动人";
    int num = 10;
    
	//this关键字可以用来访问本类的属性
	public void f3(){
	      String name = "smith";
	      //传统方式
	      System.out.println("name=" + name + " num=" + num);//smith  100
	      //也可以使用this访问属性
	      System.out.println("name=" + this.name + " num=" + this.num);//jack 100
	}
}	    

在这里插入图片描述

访问成员方法的语法:this.方法名(参数列表);

public class ThisDetail {
    public static void main(String[] args) {
        T t1 = new T();
        t.f2();
    }
}

class T	{
    public void f1(){
        System.out.println("f1()方法...");
    }
    public void f2(){
        System.out.println("f2()方法...");
        //调用本类的 f1
        //第一种方式
        f1();
        //第二种方式
        this.f1();
    }
}

在这里插入图片描述

访问构造器语法:this(参数列表); 注意只能在构造器中使用(即只能在构造器中访问另外一个构造器, 必须放在第一条语句)

public class ThisDetail {
    public static void main(String[] args) {

        T t2 = new T();
    }
}

class T{
    /*
	细节: 访问构造器语法:this(参数列表);
	注意只能在构造器中使用(即只能在构造器中访问另外一个构造器)
	注意: 访问构造器语法:this(参数列表); 必须放置第一条语句
	 */
    public T(){
        //这里去访问 T(String name,int age)构造器,必须放在第一行
        this("Jack", 23);
        System.out.println("T()构造器");

    }

    public T(String name,int age){
        System.out.println("T(String name,int age)构造器");
    }

}

在这里插入图片描述

this 不能在类定义的外部使用,只能在类定义的方法中使用。

4. this 的案例

TestPerson.java

定义 Person 类,里面有 name、age 属性,并提供 compareTo 比较方法,用于判断是否和另一个人相等,提供测试类 TestPerson 用于测试, 名字和年龄完全一样,就返回 true, 否则返回 false

public class TestPerson { 

	//编写一个main方法
	public static void main(String[] args) {

		Person p1 = new Person("mary", 20);
		Person p2 = new Person("mary", 20);

		System.out.println("p1和p2比较的结果=" + p1.compareTo(p2));
	}
}

/*
定义Person类,里面有name、age属性,并提供compareTo比较方法,
用于判断是否和另一个人相等,提供测试类TestPerson用于测试, 
名字和年龄完全一样,就返回true, 否则返回false

 */
class Person {
	String name;
	int age;
	//构造器
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	//compareTo比较方法
	public boolean compareTo(Person p) {
		//名字和年龄完全一样
		// if(this.name.equals(p.name) && this.age == p.age) {
		// 	return true;
		// } else {
		// 	return false;
		// }
		return this.name.equals(p.name) && this.age == p.age;
	}
}

在这里插入图片描述

把名字或年龄改成其他不同数据

在这里插入图片描述

到此这篇关于Java this关键字的使用详解的文章就介绍到这了,更多相关Java this内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring中缓存注解@Cache的使用详解

    Spring中缓存注解@Cache的使用详解

    这篇文章主要介绍了Spring中缓存注解@Cache的使用详解,使用注解对数据进行缓存功能的框架,只需要简单地加一个注解,就能实现缓存功能,大大简化我们在业务中操作缓存的代码,需要的朋友可以参考下
    2023-07-07
  • 深入了解Java方法的重载与重写

    深入了解Java方法的重载与重写

    在最初学习java的时候,人们都知道,java这种面向对象的语言,一共有三大特征,分别是:封装、继承、多态。多态的实现途径有三种:重写、重载、接口实现。本文就来为大家详细讲讲Java方法的重载与重写
    2022-07-07
  • java线程的中断和同步问题的实现

    java线程的中断和同步问题的实现

    本文主要介绍了java线程的中断和同步问题的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • servlet3文件上传操作

    servlet3文件上传操作

    这篇文章主要介绍了servlet3文件上传操作的相关资料,需要的朋友可以参考下
    2017-11-11
  • Java基于LoadingCache实现本地缓存的示例代码

    Java基于LoadingCache实现本地缓存的示例代码

    本文主要介绍了Java基于LoadingCache实现本地缓存的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • SpringBoot中使用 RabbitMQ的教程详解

    SpringBoot中使用 RabbitMQ的教程详解

    这篇文章主要介绍了SpringBoot中使用 RabbitMQ的教程详解,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Java 中如何使用 JavaFx 库标注文本颜色

    Java 中如何使用 JavaFx 库标注文本颜色

    这篇文章主要介绍了在 Java 中用 JavaFx 库标注文本颜色,在本文中,我们将了解如何更改标签的文本颜色,并且我们还将看到一个必要的示例和适当的解释,以便更容易理解该主题,需要的朋友可以参考下
    2023-05-05
  • 如何将jdk10降版本到jdk1.8

    如何将jdk10降版本到jdk1.8

    这篇文章主要介绍了如何将jdk10降版本到jdk1.8问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Java反射获取class对象方式解析

    Java反射获取class对象方式解析

    这篇文章主要介绍了Java反射获取class对象方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java Scanner类的使用示例

    Java Scanner类的使用示例

    这篇文章主要介绍了Java Scanner类的使用示例,帮助大家更好的理解和学习java,感兴趣的朋友可以了解下
    2020-08-08

最新评论