A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我也知道 哪个对象在调用this所在的函数,this就代表哪个对象。我在看this 视频的时候发现

Person(String name)
        {
                name = name;
                // 加上这个 不管是不是name= this.name 还是 this.name  System.out.println("A:name="+name+",,age="+age);都能调用打印出来的lisi
               
               
        }


之后发现 这里面隐藏有this   System.out.println("A:name="+name+",,age="+age);等效于 System.out.println("name="+this.name+"...age="+this.age);
那什么时候判断到底什么情况下 有没有this呢?

Person(String name)
        {
                name = name;   //和this.name=name;这边效果就不一样了
               
        }

class Person
{
        private String name;
        private int age;
       
        Person()
        {
                System.out.println("person code run"); //构造代码块,
                //cry();//
        }
       
        Person(String name)
        {
                name = name;
                //System.out.println("A:name="+name+",,age="+age); 加上这句话
                //而主函数不调用speak就会有同样效果
               
        }
        public void speak()
        {
                System.out.println("name="+name+",,age="+age);
        }
        Person(String n,int a)
        {
                age = a;
                name = n;
                //System.out.println("C:name="+name+",,age="+age);
        }
       
}
       
class Test09
{
       
        public static void main(String[] args)
        {
                Person p =new Person("lisi");
                Person p2 =new Person("wangwu",15);
                Person p3 =new Person("zhangsan",16);
                p.speak();
                p2.speak();
                p3.speak();
        }
}

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

10 个回复

倒序浏览
this关键字
————————————————————————————————————————

当成员变量和局部变量同名的时候,为了区分,可以使用一个关键字来完成。This

This:代表的是一个对象,代表哪个对象呢?
哪个对象调用this所在的函数。This就代表哪个对象。
This就是当前对象的一个引用。

This(这个会用就行,可以不用管原理)

表现形式之一:当局部变量和成员变量同名的时候,可以用this来区分。
表现形式之二:构造函数之间的调用可以使用this关键字。后面跟上小括号,指定具体的实参即可明确要调用的构造函数。

注意:调用本类中构造函数的this语句必须定义在构造函数的第一行。
因为初始化动作要先完成。

This(name)

This什么时候用?
当定义功能时,功能内部使用到了调用该功能的对象。这时就用this来表示。




一般函数是不能够直接调用构造函数
因为构造函数是对对象初始化的,对象创建完毕后构造函数。。。。。。

要记着This的基本使用思想
当局部变量和成员变量同名的时候,可以用this区分,谁是成员变量,谁是对象中的属性。

点评

3q  发表于 2012-8-9 19:12

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

回复 使用道具 举报
Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,这在“Java关键字static、final 使用总结”一文中给出了明确解释。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。

package test;
public class ThisTest {
    private int i=0;
    //第一个构造器:有一个int型形参
    ThisTest(int i){
       this.i=i+1;//此时this表示引用成员变量i,而非函数参数i
       System.out.println("Int constructor i——this.i:  "+i+"——"+this.i);
       System.out.println("i-1:"+(i-1)+"this.i+1:"+(this.i+1));
       //从两个输出结果充分证明了i和this.i是不一样的!
    }
    //  第二个构造器:有一个String型形参
    ThisTest(String s){
       System.out.println("String constructor:  "+s);
    }
    //  第三个构造器:有一个int型形参和一个String型形参
    ThisTest(int i,String s){
       this(s);//this调用第二个构造器
       //this(i);
      
       this.i=i++;//this以引用该类的成员变量
       System.out.println("Int constructor:  "+i+"/n"+"String constructor:  "+s);
    }
    public ThisTest increment(){
       this.i++;
       return this;//返回的是当前的对象,该对象属于(ThisTest)
    }
    public static void main(String[] args){
       ThisTest tt0=new ThisTest(10);
       ThisTest tt1=new ThisTest("ok");
       ThisTest tt2=new ThisTest(20,"ok again!");
      
       System.out.println(tt0.increment().increment().increment().i);
       //tt0.increment()返回一个在tt0基础上i++的ThisTest对象,
       //接着又返回在上面返回的对象基础上i++的ThisTest对象!
    }
}

运行结果:

Int constructor i——this.i:  10——11
String constructor:  ok
String constructor:  ok again!
Int constructor:  21
String constructor:  ok again!
14

细节问题注释已经写的比较清楚了,这里不在赘述,只是总结一下,其实this主要要三种用法:
1、表示对当前对象的引用!
2、表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下。
3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。但是这里必须非常注意:只能引用一个构造方法且必须位于开始!
还有就是注意:this不能用在static方法中!所以甚至有人给static方法的定义就是:没有this的方法!虽然夸张,但是却充分说明this不能在static方法中使用!

说明在什么情况下需要用到this:
        第一、通过this调用另一个构造方法,用发是this(参数列表),这个仅仅在类的构造方法中,别的地方不能这么用。
        第二、函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。当然,在没有同名的情况下,可以直接用成员变量的名字,而不用this,用了也不为错,呵呵。
        第三、在函数中,需要引用该函所属类的当前对象时候,直接用this。
        其实这些用法总结都是从对“this是指向对象本身的一个指针”这句话的更深入的理解而来的,死记不然容易忘记而且容易搞错,要理解!
回复 使用道具 举报
示例:
————————————————————————————————————————————
构造方法中使用this
                        class Student{
                                private String name;
                                private int age;
                                Student(){}
                                Student(String name){
                                        this.name = name;
                                }
                                Student(int age){
                                        this.age = age;
                                }
                                Student(String name,int age){
                                        //this(name);//代表就是调用构造方法----构造方法中的调用方式
                                        this.name = name;
                                        this.age = age;
                                }
                        }

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

回复 使用道具 举报
this:代表本类对象的引用
回复 使用道具 举报
Person(String name)
        {
                name = name;
                System.out.println("A:name="+name+",,age="+age); 加上这句话
                而主函数不调用speak就会有同样效果


这个打印的是 方法中参数的 name,所以打印的是李四。
实际上,这个name的值并没有赋值给 Person p 类中的 name.


               
回复 使用道具 举报
杜鹏云 发表于 2012-8-9 19:07
Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自 ...

这个是我想要的,谢谢,不介意我抱走了;P
回复 使用道具 举报
问题已解决
回复 使用道具 举报
看看老毕总结的:
This的特点:
This就代表了本类的对象,它是所属对象的引用。哪个对象在调用this所在的函数,this就代表哪个对象。
This的应用:
  当定义类中功能时,该函数内部要调用该函数该函数内部要用到调用该函数的对象时。这时用this来表示这个对象。但凡本类功能内部使用了本类对象,都用this表示。
回复 使用道具 举报
看看老毕总结的:
This的特点:
This就代表了本类的对象,它是所属对象的引用。哪个对象在调用this所在的函数,this就代表哪个对象。
This的应用:
  当定义类中功能时,该函数内部要调用该函数该函数内部要用到调用该函数的对象时。这时用this来表示这个对象。但凡本类功能内部使用了本类对象,都用this表示。
回复 使用道具 举报
this:看上去,是用于区分局部变量和成员变量同名情况。 this为什么可以解决这个问题? this到底代表的是什么呢? this:就代表本类的对象,到底代表哪一个呢? this代表它所在函数所属对象的引用。 简单说:哪个对象在调用this所在的函数,this就代表哪个对象。 this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。但凡本类功能内部使用了了本类对象,都用this表示。 class Person {
private String name;
private int age;
Person(int age) { this.age = age; }
Person(String name) { this.name = name; }
Person(String name,int age) { this.name = name; this.age = age; }
public void speak() { System.out.println("name="+this.name+"...age="+this.age); this.show(); } public void show() { System.out.println(this.name); } public boolean compare(Person p) { return this.age==p.age; } }

class PersonDemo3 {
public static void main(String[] args) {
Person p1 = new Person(20);
Person p2 = new Person(25);
boolean b = p1.compare(p2);
System.out.println(b);
//Person p = new Person("lisi");
//Person p1 = new Person("zhangsan");
//p.speak();
//p1.speak();
//p.speak(); }
}

this语句 :用于构造函数之间进行互相调用。 this语句只能定义在构造函数的第一行。因为初始化要先执行。 class Person {
private String name;
private int age;
{ System.out.println("code run"); }
Person() { //this("hah"); System.out.println("person run"); }
Person(String name) { //this(); this.name =name; }
Person(String name,int age) { //this(name); //this.name = name; this.age = age; } }

class PersonDemo4 {
public static void main(String[] args) {
new Person();
//Person p = new Person("lisi",30);
//Person p1 = new Person("lisi2",36); } }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马