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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 唐僧踏歌 于 2014-4-16 22:59 编辑

this关键字为什么不能出现在类方法中?

10 个回复

倒序浏览
它只是不能出现在静态方法中。
回复 使用道具 举报
静态中不能使用
回复 使用道具 举报
你好,我来帮你解答。Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,这在“Java关键字static、final 使用总结”一文中给出了明确解释。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。
回复 使用道具 举报
楼主: 这个this一定是用在某个类的方法中吧?只是静态不能出现而已啊!
        This :看上去,是用于区分局部变量和成员变量同名情况。
          tist :就代表本类的对象,到底代表哪一个呢?
           this代表它所在函数所属对象的引用。
          简单说:哪个对象在调用this所在的函数,this就代表哪个对象。
          This的应用:当定义类中功能时(函数时),该函数内部类要用到该函数的对象时,
             这是用this来表示这个对象。
            但凡本类功能使用了使用了本类对象,都用this表示。
                         
        this语句:用于构造函数之间进行互相通用。
        this语句只能定义在构造函数的第一行。因为初始化要先执行。



举个例子说:
    public class persion{

  private String name=null;
  private int age;

  public void setName(String name){
      this.name=name;
}
  public String getName(){

   return name;
}
}
在这个类中setName方法中第一个变量用this是为了和本方法的参数this做区别,表示这个name指的是Person这个类的name属性,而不是name参数,如果去掉这个this,执行完这个方法后,Person类的name属性仍然为null
getName方法返回的Person类的name,之所以不用this是因为没有必要,因为编译器会知道这个name就指的是Person的name而不是其他的name(因为找个方法没有name变量和它混淆)。当然,这个方法你也可以显示的使用return this.name。恩,就这样!   

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
1.因为this代表的是调用这个函数的对象的引用,而静态方法是属于类的,不属于对象,静态方法成功加载后,对象还不一定存在.所以在先存在的静态方法里调用未存在的对象是不对的.
2.静态方法是存放在内存中的数据段里,this调用的是堆空间里的应用对象,不能调用数据段区域里的数据,因此静态方法中不能用this和super关键字.
3.this是属于对象范畴的东西,而静态方法是属于类范畴的东西,所有的成员方法,都有一个默认的的参数this,只要是成员方法,编译器就会给你加上this这个参数如:
Class A中的
void print(){};   ----->其实是void print(A this);
而静态方法是和类相关的,它不是成员方法,所以不能引用this对象.

综上可得!
回复 使用道具 举报 1 0
this指的是当前对象
回复 使用道具 举报
skyfly 中级黑马 2014-4-15 22:34:21
8#
类方法是直接可以使用类引用,不需要实例化就可以使用的方法,是属于一个类的 是类的静态方法,一般在项目中类方法都是设置为工具类使用的.

this 指的是当前实例化的对象, 如果没有实例,this当然就用不了啦。类方法是类的静态方法。
回复 使用道具 举报
1.      在静态方法中是不能使用this预定义对象引用的,即使其后边所操作的也是静态成员也不行. 因为this代表的是调用这个函数的对象的引用,而静态方法是属于类的,不属于对象,静态方法成功加载后,对象还不一定存在   2.      在问题之前先讲super的用法: 1.super的用法跟this类似,this代表对本类对象的引用,指向本类已经创建的对象;而super代表对父类对象的引用,指向父类对象; 2.静态优先于对象存在; 3.由上面的1.和2.知: 因为静态优先于对象存在,所以方法被静态修饰之后方法先存在,而方法里面要用到super指向的父类对象,但是所需的父类引用对象晚于该方法出现,也就是super所指向的对象没有,当然就会出错。 综上,静态方法中不可以出现super关键字。   3.  首先你要明白对象和类的区别。 this和super是属于对象范畴的东西,而静态方法是属于类范畴的东西 所有的成员方法,都有一个默认的的参数this(即使是无参的方法),只要是成员方法,编译器就会给你加上this这个参数如: Class A中 void method1(){}实际上是这样的--------> void method1(A this) void method2(int x){}实际上是这样的--------> void method2(A this, int x) 而静态方法与对象无关,根本不能把对象的引用传到方法中,所以不能用this     4.      在一个类中定义一个方法为static,则为静态方法,那就是说,无需本类的对象即可调用此方法,调用一个静态方法就是“类名.方法名”  既然"无需本类的对象即可调用静态方法",而this和super关键字都是用于本类对象的-----调用静态方法无需本类的对象这句话很清楚表明:静态方法中不能用this和super关键字   5.      静态方法是存放在内存中的数据段里,this和super调用的是堆空间里的应用对象不能调用数据段区域里的数据,因此静态方法中不能用this和super关键字   6.      静态方法和静态类不属于单个对象,而是类的所有对象共享使用 而this代表当前对象   7.    东西只属于类,不属于任何对象,所以不能用this和super
回复 使用道具 举报
谢谢大家的回答,我再慢慢看,时间不够
回复 使用道具 举报
this所在的方法是谁调用的,this就代表谁,说明白的就是方法是对象调用的  ,而静态方法是随着类的加载而加载,是优先于对象的创建,该方法存在时对象也许还未创建完成
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马