java--this关键字的用法

自学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况且对象是不能引用另一个对象的!

猜你喜欢

转载自huyifan951124.iteye.com/blog/2315888