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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小洋人最happy 中级黑马   /  2012-11-21 07:30  /  1478 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  这个this到底什么时候才会写出来呢?看视频还说有时候不写是默认的有,不太明白什么意思。写和不写有啥区别呢

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
本帖最后由 翁鹏 于 2012-11-21 11:14 编辑

this最常用的时候可能就是方法中的局部变量屏蔽掉了类中的成员变量,而你又想引用成员变量,这时候就用到了this。
this就是能引用类中的成员,你不写的时候,编译器会帮你加上。

我知道this代表当前对象,一个类可以new出N个对象出来,每个对象都维护的它自己的一组属性。每个属性都有所属的对象。
所以,准确的说是可以调用this对象中的成员。 在this对象中可能某个方法中的局部屏蔽掉了实例变量,可以用this调用它自己的实例变量。

点评

this 是代表当前对象的,你说的我没搞明白,能举例吗  发表于 2012-11-21 08:26

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 谁调用对象,谁就是this

查看全部评分

回复 使用道具 举报
this指的是调用属性和方法的那个对象,也就是调用者。
比如你的类Circle中有一个属性radius,有一个方法要给radius赋值,但是你的方法的参数也是radius。
如果直接赋值那就是radius=radius,程序就分不清这2个radius,改为 this.radius=radius;  这里this.radius就指的是
属性的radius,后面的radius是传入的参数。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
this语句 :用于构造函数之间进行互相调用,this看上去,是用于区分局部变量和成员变量同名情况。this就代表本类的对象,代表它所在函数所属对象的引用。
。简单说:哪个对象在调用this所在的函数,this就代表哪个对象。
当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
但凡本类功能内部使用了了本类对象,都用this表示。this语句只能定义在构造函数的第一行。因为初始化要先执行,你不写的时候,编译器会帮你加上。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
class Student implements Comparable//该接口强制让学生具备比较性
{
        private String name;
        private int age;

        Student(String name,int age)
        {
                this.name = name;
                this.age = age;
        }

        public int compareTo(Object obj)
        {
                if (!(obj instanceof Student))
                        throw new RuntimeException("不是学生对象");
                Student s = (Student)obj;

                System.out.println(this.name+"::compare to::"+s.name);
                if (this.age > s.age)
                        return 1;
                if(this.age == s.age)
                {
                        return this.name.compareTo(s.name);
                };
                return -1;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
}
你在主类中new一个学生对象的时候,比如:Studuent stu = Student("zhangsan",20),对象一建立就有了属性和方法
构造函数中this.name = name,中的this代表的就是对象stu,this.name = name,实例化就是stu.name = "zhangsan"
public int compareTo(Object obj)这个方法,引用时就是stu.compareTo(obj),this关键字代表了当前对象,类中调用时很方便

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
this关键字必须放在非静态方法里面。
this关键字代表自身,在程序中主要的使用用途有以下几个方面:
1、使用this关键字引用成员变量
2、使用this关键字在自身构造方法内部引用其它构造方法
3、使用this关键字代表自身类的对象
4、使用this关键字引用成员方法
1、引用成员变量
        在一个类的方法或构造方法内部,可以使用“this.成员变量名”这样的格式来引用成员变量名,有些时候可以省略,有些时候不能省略。首先看一下下面的代码:
                /**
* 使用this引用成员变量
*/
public class ReferenceVariable {
                        private int a;
                        
                        public ReferenceVariable(int a){
                                this.a = a;
                        }
                        
                        public int getA(){
                                return a;
                        }
                        
                        public void setA(int a){
                                this.a = a;
                        }
}
        在该代码的构造方法和setA方法内部,都是用this.a引用类的成员变量。因为无论在构造方法还是setA方法内部,都包含2个变量名为a的变量,一个是参数a,另外一个是成员变量a。按照Java语言的变量作用范围规定,参数a的作用范围为构造方法或方法内部,成员变量a的作用范围是类的内部,这样在构造方法和setA方法内部就存在了变量a的冲突,Java语言规定当变量作用范围重叠时,作用域小的变量覆盖作用域大的变量。所以在构造方法和setA方法内部,参数a起作用。
        这样需要访问成员变量a则必须使用this进行引用。当然,如果变量名不发生重叠,则this可以省略。
        但是为了增强代码的可读性,一般将参数的名称和成员变量的名称保持一致,所以this的使用频率在规范的代码内部应该很多。
2、 引用构造方法
        在一个类的构造方法内部,也可以使用this关键字引用其它的构造方法,这样可以降低代码的重复,也可以使所有的构造方法保持统一,这样方便以后的代码修改和维护,也方便代码的阅读。
        下面是一个简单的示例:
                /**
* 使用this关键字引用构造方法
*/
public class ReferenceConstructor {
        int a;
        
        public ReferenceConstructor(){
                this(0);
        }
        
        public ReferenceConstructor(int a){
                this.a = a;
        }
}
        这里在不带参数的构造方法内部,使用this调用了另外一个构造方法,其中0是根据需要传递的参数的值,当一个类内部的构造方法比较多时,可以只书写一个构造方法的内部功能代码,然后其它的构造方法都通过调用该构造方法实现,这样既保证了所有的构造是统一的,也降低了代码的重复。
        在实际使用时,需要注意的是,在构造方法内部使用this关键字调用其它的构造方法时,调用的代码只能出现在构造方法内部的第一行可执行代码。这样,在构造方法内部使用this关键字调用构造方法最多会出现一次。
3、 代表自身对象
        在一个类的内部,也可以使用this代表自身类的对象,或者换句话说,每个类内部都有一个隐含的成员变量,该成员变量的类型是该类的类型,该成员变量的名称是this,实际使用this代表自身类的对象的示例代码如下:
                /**
* 使用this代表自身类的对象
*/
public class ReferenceObject {
        ReferenceObject instance;
        
        public ReferenceObject(){
                instance = this;
        }
        
        public void test(){
                System.out.println(this);
        }
}
        在构造方法内部,将对象this的值赋值给instance,在test方法内部,输出对象this的内容,这里的this都代表自身类型的对象。
4、 引用成员方法
        在一个类的内部,成员方法之间的互相调用时也可以使用“this.方法名(参数)”来进行引用,只是所有这样的引用中this都可以省略。。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
this表示当前类的对象,最常用在构造函数中初始化成员变量,这样就满足了在java中非静态成员需要对象调用的原则。
我也不知道为啥可以省略。
如果是在类中调用该类的非静态成员时,写或者不写this是没有区别的,都会被编译器识别。
(个人小结)

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马