自学java也有一段时间了,回想起来初学java的我最迷惑的一点就是this了,我们知道,java与c++最大的区别是什么呢,java只保留了 c++面向对象的部分,砍去了面向过程的部分,那么除此之外最大的不同是什么呢,那么就是java砍去了c++/c的指针,这一令无数初学者反感的东西, 只保留了this指针,但是光这一点,却又迷惑了一大批人,下面我就一起和大家来探讨一下this指针的作用吧(写的不好的地方还请指出~~~).
import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; import java.util.Stack; public class Main2 { private int i = 0; public Main2(){} public Main2(int i) { /* *这里面的this还是表示当前类的对象,它有什么用呢,作用就是将传进来的参数i的值 *赋给当前对象的i变量,因为这两个变量名相同因此如果去掉this的话,编译系统不会报错 *但他会告诉你这是无效的,因为这时候i就只代表传进来的变量了,那么自己将只赋给自己 *显然是无效的。 */ this.i=i; } public Main2(int i,String s) { /* * 这里的this还是表示当前类的对象,它表示的是调用当前对象的构造方法 * 这里看得出来是调用了第2个构造方法 */ this(i); } private void display() { //这里的this就表示当前类的对象指针 System.out.println(this.i); } private void displayThis() { System.out.println(this); } private void displayEditor() { //当然咯,this既然表示当前类的对象,则自然还可以调用方法咯 this.display(); System.out.println("huyifan"); } public static void main(String args[]) { /* * 但是这三个Main2类的对象所对应的this却是不同的,来看看直接输出(this)的运行结果 * poj.Main2@97d01f * poj.Main2@e0a386 * poj.Main2@feb48 * 从这里我们就可以清楚的看出3个对象的this指针是不同的 */ Main2 m1=new Main2(); Main2 m2=new Main2(1); Main2 m3=new Main2(2,"test"); m1.display(); m1.displayThis(); m2.display(); m2.displayThis(); m3.display(); m3.displayThis(); m3.displayEditor(); } }
运行结果:
0
poj.Main2@97d01f
1
poj.Main2@e0a386
2
poj.Main2@feb48
2
huyifan
下面我来总结一下:从以上情况看来this指针最常用的方法一共有3种
1.this指针用来引用该对象的变量或方法。
2.this指针用来作为构造器来初始化类中的变量
3.需要引用该函数所属的类的对象的时候,直接引用this。
最后但是最重要的一点!!
this指针不能在static中使用!!!!
这个其实很好理解
1.首先看static,static的作用就是让所有的对象都共享这个被static关键字共享的变量或方法,如果在static中使用this,那么这个this最代表的一个类的对象怎么被其他的对象所引用,j况且对象是不能引用另一个对象的!