【从零开始学习JAVA | 第五篇】This关键字详解

目录

前言:

This关键字: 

作用:

本质:

总结:

【从零开始学习JAVA | 第五篇】This关键字详解_第1张图片


 

前言:

        相信大家在进入JAVA面向对象编程篇章以后,多多少少都见过This关键字,而他的指向很多人总是傻傻搞不清楚,今天我们将从This指针的本质出发,深度剖析This关键字的指向规则。

This关键字: 

作用:

1. 引用当前对象:在类中的方法中,this用来引用当前对象。例如,通过this可以引用当前对象的成员变量,调用当前对象的方法。

public class Person {
   private String name;

   public Person(String name) {
       this.name = name; // 使用this关键字明确指明是成员变量name被赋值
   }

   public void sayHello() {
       System.out.println("Hello, my name is " + this.name); // 访问成员变量name
   }
}

在上面的例子中,通过this关键字引用当前对象的成员变量name,并在sayHello方法中调用。注意,这里使用this的效果和不使用this是一样的,因为name变量和sayHello方法都处于同一个对象的作用域之内。 

2. 区分局部变量和成员变量:如果方法的参数和类的成员变量同名,使用this关键字可以区分是引用方法的参数还是类的成员变量。

public class Person {
   private String name;

   public void setName(String name) {
       this.name = name; // this关键字区分成员变量name和方法参数name
   }
}

在上面的例子中,方法的参数name和类的成员变量name同名,在方法内部使用this关键字可以访问到对象的成员变量name;如果没有使用this关键字,那么方法中的name变量将会遮盖(覆盖)类的成员变量name,访问不到类的成员变量name了。使用this关键字能够明确地指明是对象的哪个成员被引用。 

3. 调用当前类的构造函数:在一个类中的构造函数中,使用this关键字可以调用同一个类的另一个构造函数。注意,this关键字只能用在构造函数中,而且必须出现在构造函数的第一条语句,即只能在一个构造函数中调用另一个构造函数。

public class Person {
   private String name;
   private int age;

   public Person() {
       this("Tom", 20); // 调用另一个构造函数初始化对象
   }

   public Person(String name, int age) {
       this.name = name;
       this.age = age;
   }
}

第一个构造函数中使用了this关键字来调用同一个类的另一个构造函数,即第二个构造函数,用来初始化成员变量。调用构造函数必须放在构造函数的第一条语句,所以this关键字只能用在构造函数中。通过使用不同的参数调用不同的构造函数,可以方便地初始化对象。

4. 传递当前对象:在某些情况下,需要将当前对象作为参数传递给另一个对象或方法,这时可以使用this关键字将当前对象传递出去。

public class Person {
   private String name;

   public void speakTo(Person person) {
       System.out.println("Hello " + person.name + ", my name is " + this.name);
   }
}

在上面的例子中,speakTo方法需要将当前对象作为参数传递给另一个Person对象,使用this关键字可以引用当前对象,然后将当前对象传递给另外一个Person对象。这里的实现是将当前对象的name属性值和传递进来的Person对象的name属性值进行输出比较,达到了给另一个对象传递当前对象的效果。 

本质:

                This关键字本质是所在方法调用者的地址值

在Java中,this关键字表示当前对象,是一个指向当前对象的引用,其本质是一个隐藏的参数。当创建一个Java对象时,会在内存中为该对象分配一块内存空间,其中存储了该对象的各个属性的值,以及指向该对象所属类的引用。当调用该对象的方法时,Java会将该对象的引用作为一个参数传递给该方法,其中,该对象的引用就是this关键字所指向的内容

在方法内部,可以使用this关键字来引用当前对象,并对其进行操作。通过this关键字,可以访问当前对象的成员变量、方法、传递当前对象给其他方法等操作。

总之,Java中的this关键字是一个指向当前对象的引用,其本质是一个隐藏的参数,用于引用当前对象并对其进行操作。


 在这里我们再详细介绍一下什么是局部变量和全局变量?

在Java中,变量分为局部变量和全局变量两种类型。

局部变量是指定义在方法体中或语句块中的变量,它只在当前方法体或语句块中有效,在方法调用结束后,局部变量的值也会被销毁。

以下是一个关于局部变量的例子:

public class Test {
   public void testMethod() {
       int x = 10; // 定义一个局部变量x
       System.out.println("x is: " + x); // 输出x的值
   }

   public static void main(String args[]) {
       Test obj = new Test(); // 创建一个对象
       obj.testMethod(); // 调用testMethod方法
   }
}

在上面的例子中,`x`是一个定义在`testMethod`方法中的局部变量。

全局变量(也叫成员变量)是指定义在类中、方法外部,没有加`static`关键字的变量。它的作用域为该类中的所有方法,即该类的对象可以访问该成员变量。

以下是一个关于全局变量的例子:

public class Test {
   int y = 20; // 定义一个全局变量y

   public void testMethod() {
       int x = 10; // 定义一个局部变量x
       System.out.println("x is: " + x); // 输出x的值
       System.out.println("y is: " + y); // 输出y的值
   }

   public static void main(String args[]) {
       Test obj = new Test(); // 创建一个对象
       obj.testMethod(); // 调用testMethod方法
   }
}

在上面的例子中,`y`是一个定义在`Test`类中的全局变量,可在`testMethod`方法中使用。在`main`方法中创建的`obj`对象就可以访问`y`变量。

总之,局部变量和全局变量是Java中两种不同的变量类型。局部变量只在定义它的方法内或语句块内有效,并且在其方法调用结束后会被销毁;而全局变量则定义在类中、方法外部,可以被类的不同方法和不同对象访问和修改。

总结:

        本篇详细的介绍了this关键字的作用和本质,希望可以加深大家对this关键字的理解认识,更加熟练的掌握java中对于this关键字的运用。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

        

你可能感兴趣的:(java,学习,java,算法,开发语言)