目录
前言:
This关键字:
作用:
本质:
总结:
相信大家在进入JAVA面向对象编程篇章以后,多多少少都见过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关键字的运用。
如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!