首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于this关键字,一直不理解,希望大家帮忙指点下。解决办法

2012-02-28 
关于this关键字,一直不理解,希望大家帮忙指点下。如题,this关键字在不同的地方,都分别表示什么啊、?这个问题

关于this关键字,一直不理解,希望大家帮忙指点下。
如题,
this关键字在不同的地方,
都分别表示什么啊、?
这个问题一直搞不清楚,
大家帮忙解释下,
谢谢

[解决办法]
this 是指当前对象 呵呵 如
你类里面的属性 this.proprtey = proprtey ;
意思就是你传参的属性赋值给类里的属性;
[解决办法]
使用this调用本类中的属性

现在观察以下代码,看会有那些问题:

public void setName(String name){

name = name ;



这里面的两个name都是setName方法中的name参数。

此时,特别希望可以通过一个指定的标识明确的表示要把传入的name参数的值给类中的属性,所以此时就需要使用this关键字,使用this.name就表示类中的属性。

class Person{

private String name ;

private int age ;

public Person(String name,int age){

this.setName(name) ;

this.setAge(age) ;

}

public void setName(String name){

this.name = name ;

}

public void setAge(int age){

this.age = age ;

}

public String getName(){

return this.name ;

}

public int getAge(){

return this.age ;

}

public void print(){

System.out.println("姓名:"+this.name+",年龄:"+this.age) ;

}

};

public class Demo35{

public static void main(String args[]){

Person p1 = new Person("张三",30) ;

p1.print() ;

}

}; 

使用this还可以从一个构造方法中调用其他构造方法。

例如:有以下一个要求,一个类中存在了三个构造方法,但是要求, 不管怎么调用,最终都要求可以在对象实例化的时候打印一个“新的对象产生了”的提示。

class Person{

private String name ;

private int age ;

public Person(){

System.out.println("新的对象产生了。。。") ;

}

public Person(String name){

System.out.println("新的对象产生了。。。") ;

this.setName(name) ;

}

public Person(String name,int age){

System.out.println("新的对象产生了。。。") ;

this.setName(name) ;

this.setAge(age) ;

}

public void setName(String name){

this.name = name ;

}

public void setAge(int age){

this.age = age ;

}

public String getName(){

return this.name ;

}

public int getAge(){

return this.age ;

}

public void print(){

System.out.println("姓名:"+this.name+",年龄:"+this.age) ;

}

}; 

以上代码虽然可以实现功能,但是同样的代码出现了三次,而且后面的两次出现纯属多余吧。用this()的形式可以调用类中的无参构造方法。

class Person{

private String name ;

private int age ;

public Person(){

System.out.println("新的对象产生了。。。") ;

}

public Person(String name){

// 最终都是调用无参构造方法

this() ;

this.setName(name) ;

}

public Person(String name,int age){

this(name) ;

this.setAge(age) ;

}

public void setName(String name){

this.name = name ;

}

public void setAge(int age){

this.age = age ;

}

public String getName(){

return this.name ;

}

public int getAge(){

return this.age ;

}

public void print(){

System.out.println("姓名:"+this.name+",年龄:"+this.age) ;

}

};

public class Demo36{

public static void main(String args[]){

Person p1 = new Person("张三",30) ;

p1.print() ;

}

}; 

注意点1:

如果使用了this调用其他构造方法,则此语句,必须写在构造方法的首行。

public void fun(){

// 发现在调用fun方法的时候,必须先设置name的值

this("zhangsan") ;



public Person(String name,int age){

this.setAge(age) ;

this(name) ; //--> 必须放在首行





注意点2:

使用this可以调用本类中的其他构造方法,但是至少留一个构造方法,作为程序的出口。

public Person(){

this("a",10) ;

System.out.println("新的对象产生了。。。") ;

}

public Person(String name){

// 最终都是调用无参构造方法

this() ;

this.setName(name) ;

}

public Person(String name,int age){

this(name) ; //--> 必须放在首行

this.setAge(age) ;



this最重要的特性 —— 表示当前对象

当前对象在程序中用以下形式体现:

· 当前操作此方法的对象,就称为当前对象。

class Demo{

public void print(){

System.out.println(this) ;

}

};

public class Demo38{

public static void main(String args[]){

Demo d1 = new Demo() ;

System.out.println(d1) ;

d1.print() ;

System.out.println("---------------------") ;

Demo d2 = new Demo() ;

System.out.println(d2) ;

d2.print() ;

}

}; 

回顾:

之前讲解的两个对象比较的程序。

// 在类的内部增加一个比较的方法

public boolean compare(Person p){

Person p1 = this ;

Person p2 = p ;

if(p1.name.equals(p2.name)&&p1.age==p2.age){

return true ;

}else{

return false ;

}



分析程序的运行过程:

class A{

private B b = null ;

public A(){

this.b = new B(this) ;

this.b.fun() ;

}

public void hello(){

System.out.println("Hello World!!!") ;

}

};

class B{

private A a = null ;

public B(A a){

this.a = a ;

}

public void fun(){

this.a.hello() ;

}

};

public class OODemo40{

public static void main(String args[]){

A aa = new A() ;

}

}; 


[解决办法]
就是把你括号里定义的参数传递给当前这个类的对象的属性
[解决办法]
当前对象就是你new出来的那个对象,没有特指,是泛指,!!!!
[解决办法]
this指当前对象。
比如一个类中,你使用this就是这个类。
如果用this.属性和this.方法表示,这个属性是全局属性。方法是成员方法。
[解决办法]
this:指调用当前方法或属性的对象。是哪个对象在调用这个方法,属性就是指哪个属性的
[解决办法]
同意楼上几位的说发,this 就是当前类!
[解决办法]
6楼说当前对象,7楼说当前类,我都晕了,到底是哪一个啊?是不是自动就有一个this在当中啊?想不通???
[解决办法]
当前对象





深究的话看侯捷那本书
[解决办法]
简单的说,一个类不论有多少个实例,方法总是在一起的。类调用非静态方法的时候,会把当前实例做为一个参数传入函数,这个参数在函数里命名为this。 是被系统隐含使用的。而静态方法,this是不传的。

热点排行