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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 山水游客 中级黑马   /  2012-5-21 21:11  /  2105 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

首先看下代码:
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

这是什么意思?

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 看看毕老师静态视频

查看全部评分

7 个回复

倒序浏览
本帖最后由 冯越 于 2012-5-21 21:19 编辑

this指这个类的当前对象,而static修饰的方法或变量叫做 类方法 类成员变量 所以他们和类的实例对象是没有关系的。他们是可以通过 类名.方法名/成员变量名 直接使用的。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  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
复制代码

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

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

原因有二:
一: main 是静态函数,  你想访问成员变量   成员变量 也必须用 static 修饰
二: this 指当前类对象,当前你没类对象,都是静态的 你咋个用this???????
回复 使用道具 举报
金鑫 中级黑马 2012-5-21 23:03:41
7#
因为i通过static修饰,是一个静态变量,他是通过类的加载而加载。this指的是类的当前对象,并不能访问static修饰的变量。
你可以直接通过System.out.println(i)来输出i。
回复 使用道具 举报
李海 中级黑马 2012-5-22 00:23:42
8#
   这个是肯定不能使用的   this的使用首先要有对象的存在,  你这个i是个静态的变量   静态变量  静态函数是在类开始创建的时候   就分配在方法区中的  它是优先于对象存在的  在静态方法里面不能使用this  主要原因也是由于其优先于对象存在  通俗的讲:后进来的人可以观察到先进来的人   先进来的人是不可以看到后进来的人的  所以  不能在静态方法中使用this
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马