黑马程序员技术交流社区

标题: 关于 java this关键字的问题 [打印本页]

作者: 山水游客    时间: 2012-5-21 21:11
标题: 关于 java this关键字的问题
首先看下代码:
public class Exercise1 {
        static int i=12;
        static char a;
        public static void main(String args[]){
            System.out.println(a);
                System.out.println(this.i);
               
        }

}
报错说不能在静态上下文中使用this

这是什么意思?
作者: 冯越    时间: 2012-5-21 21:17
本帖最后由 冯越 于 2012-5-21 21:19 编辑

this指这个类的当前对象,而static修饰的方法或变量叫做 类方法 类成员变量 所以他们和类的实例对象是没有关系的。他们是可以通过 类名.方法名/成员变量名 直接使用的。
作者: 8161776    时间: 2012-5-21 21:25
  1. public class Exercise1 {
  2.         static int i=12;
  3.         static char a;
  4.         public static void main(String args[]){
  5.             System.out.println(a);
  6.                 System.out.println(this.i);
  7. //肯定是要报错的,因为这个i是静态的属性,是随着类的加载而加载的,他不属于任何一个对象,他是公共的,
  8. //this的意思是当前对象,所以这个肯定不行,你可以直接用Exercise1.i;
  9.                
  10.         }

  11. }
  12. 报错说不能在静态上下文中使用this
复制代码

作者: 杨康    时间: 2012-5-21 21:26
main主函数是静态的,静态方法中不能出现this。
作者: 云惟桉    时间: 2012-5-21 21:26
this是代表当前对象的引用。说明是在对象存在后才有了this
而static是在类加载的时候就被加载在方法区里了,优先于堆内存中的对象先存在。
所以
在一个static函数里调用了类加载后才会生成的对象,这样就错了~
因此说不能在静态上下文中使用this
作者: 郭宁    时间: 2012-5-21 21:26
我感觉吧:
你用不用  static  修饰  在main 函数中都无法用 this.访问到成员变量的!

原因有二:
一: main 是静态函数,  你想访问成员变量   成员变量 也必须用 static 修饰
二: this 指当前类对象,当前你没类对象,都是静态的 你咋个用this???????
作者: 金鑫    时间: 2012-5-21 23:03
因为i通过static修饰,是一个静态变量,他是通过类的加载而加载。this指的是类的当前对象,并不能访问static修饰的变量。
你可以直接通过System.out.println(i)来输出i。

作者: 李海    时间: 2012-5-22 00:23
   这个是肯定不能使用的   this的使用首先要有对象的存在,  你这个i是个静态的变量   静态变量  静态函数是在类开始创建的时候   就分配在方法区中的  它是优先于对象存在的  在静态方法里面不能使用this  主要原因也是由于其优先于对象存在  通俗的讲:后进来的人可以观察到先进来的人   先进来的人是不可以看到后进来的人的  所以  不能在静态方法中使用this





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2