this关键字

this

文章目录

概念 :this 关键字是 Java常用的关键字,可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,可以将this理解为一个指针,即谁调用该类的方法或属性,this就指向谁。

引出This

为什么我们需要this关键字?用以下案例对this进行引出

java 复制代码
public class Test01{
    public static void main(String[] args){
    	Person p = new Person("胡歌",41);
        p.show();
    }
}
class Person{
    String names;
    int ages;
    public Person(String name,int age){
        names = name;
        ages = age
    }
    public void show(){
        System.out.println(names+"---"+ages);
    }
}

输出结果:

以上写法不会出现问题,但是当我们将成员属性的变量名改为和有参构造方法Person(String name,int age)相同时就会出现问题

例如:

java 复制代码
public class Test01{
    public static void main(String[] args){
    	Person p = new Person("胡歌",41);
        p.show();
    }
}
class Person{
    String name;
    int age;
    public Person(String name,int age){
        name = name;
        age = age;
    }
    public void show(){
        System.out.println(name+"---"+age);
    }
}

运行结果:

为什么会出现以上情况?

原因:

  • 构造器的name是局部变量,不是属性,构造器的age也是局部变量,不是属性
  • name = name时两个name都是就近原则匹配的是构造器里面的局部变量name,实际上构造器里面变成了"胡歌=胡歌;41=41"并没有对上面的属性造成影响,成员属性的name依然为默认值null,age为默认值0。

解决办法:

java 复制代码
 public Person(String name,int age){
        this.name = name;
        this.age = age;
   }

这样,this.name就是指的p对象的成员属性,而name就是来自于构造方法中的局部变量,age同理。

this的作用

  1. this.属性:调用本对象的成员属性
  2. this.方法:调用本对象的成员方法
  3. this():在构造方法的第一句调用另外一个构造方法

this.属性

代码案例:

复制代码
class Person {
	//属性
	String name;
	char sex;
	int age;
	//构造方法 -- 有参构造
	public Person(String name,char sex,int age){
		this.name = name;
		this.sex = sex;
		this.age = age;
	}
}
public class Test01 {
	public static void main(String[] args) {
		Person p = new Person("胡歌",'男',41);
	}
}

在上述代码中 name、sex和 age为Person类的三个成员属性,通过this.name=name;this.sex=sex;this.age=age;将带参构造器中的值赋值给成员属性。

内存分析

this.方法名

this 关键字最大的作用就是让类中一个方法,访问该类里的另一个方法或实例变量。

代码实现:

java 复制代码
class Person {
	//属性
	String name;
	char sex;
	int age;
	//构造方法 -- 有参构造
	public Person(String name,char sex,int age){
		this.name = name;
		this.sex = sex;
		this.age = age;
	}	
	//成员方法
	public void eat(){
		//this.属性:调用本对象的成员属性
		System.out.println(this.name + "吃饭");
	}
	public void sleep(){
		//this.属性:调用本对象的成员属性
		System.out.println(this.name + "睡觉");
	}
	public void writerCode(){
		//this.属性:调用本对象的成员属性
		System.out.println(this.name + "写代码");
	}
	public void study(){
		//this.方法:调用本对象的成员方法
		this.eat();
		this.writerCode();
		this.sleep();
	}
}
public class Test01 {
	public static void main(String[] args) {
		Person p = new Person("胡歌",'男',41);
		p.study();
	}
}

运行结果:

复制代码
胡歌吃饭
胡歌写代码
胡歌睡觉

分析:

创建对象过后,p对象的成员属性name="胡歌";sex='男';age=41;当执行p.study()后,this就指向了p,接着study()方法中调用this.eat();this.writerCode();和this.sleep()方法,其实就算是study()方法中调用的其他方法没有加this,编译器都会默认加上一个this。

this()构造方法

this( ) 用来访问本类的构造方法(构造方法是类的一种特殊方法,方法名称和类名相同,没有返回值。)

代码实现:

java 复制代码
class Person {
	//属性
	String name;
	char sex;
	int age;
	//构造方法 -- 无参构造
	public Person(){
		//this():在构造方法的第一句调用另外一个构造方法
		this("彭于晏", '男', 46);
		System.out.println("Person的无参构造");
	}
	
	//构造方法 -- 有参构造
	public Person(String name,char sex,int age){
		this.name = name;
		this.sex = sex;
		this.age = age;
	}	
}

public class Test01 {
	public static void main(String[] args) {
		Person p = new Person();
	}
}

注意:

  • this关键字可以用来访问本类的属性、方法、构造器。
  • this用于区分当前类的属性和局部变量。
  • 访问成员方法的语法:this.方法名(参数列表)。
  • 访问构造器语法:this(参数列表);在构造方法中使用时必须放在第一行。
  • this不能在类定义的外部使用,只能在类定义的方法中使用。
相关推荐
shykevin18 分钟前
python开发Streamable HTTP MCP应用
开发语言·网络·python·网络协议·http
我不是程序猿儿21 分钟前
【C#】 lock 关键字
java·开发语言·c#
漫路在线1 小时前
JS逆向-某易云音乐下载器
开发语言·javascript·爬虫·python
小辉懂编程1 小时前
C语言:51单片机实现数码管依次循环显示【1~F】课堂练习
c语言·开发语言·51单片机
tmacfrank1 小时前
网络编程中的直接内存与零拷贝
java·linux·网络
醍醐三叶2 小时前
C++类与对象--2 对象的初始化和清理
开发语言·c++
weixin_472339462 小时前
Maven 下载安装与配置教程
java·maven
Magnum Lehar3 小时前
3d游戏引擎EngineTest的系统实现3
java·开发语言·游戏引擎
就叫飞六吧3 小时前
Spring Security 集成指南:避免 CORS 跨域问题
java·后端·spring
Mcworld8574 小时前
java集合
java·开发语言·windows