黑马程序员技术交流社区

标题: 基础问题,第一次做就错了。。 [打印本页]

作者: 王贵朝    时间: 2012-9-25 07:21
标题: 基础问题,第一次做就错了。。
本帖最后由 王贵朝 于 2012-9-25 08:08 编辑

public class TestDemo {
        int x;
        public static void main(String[] args) {
                x=9;
        }
        
                System.out.println(x);
}


作者: 邓利军    时间: 2012-9-25 07:39
  1.        
  2. public class Test
  3.         {
  4.         public static void main(String[] args)
  5.                 {
  6.                         int x;
  7.             x=9;
  8.                         System.out.println(x);
  9.                 }
  10. }
复制代码
楼主,你可以这样写.

作者: 张小龙    时间: 2012-9-25 08:05
public static void main(String[] args) {
                x=9;
        }
首先 mian函数是静态的,不能访问非静态成员或者方法,所以,你非要访问的话
可以在
int x;   //错误因为静态不能访问非静态
前面加上static即可  static int x;  //这样加个static即可


作者: 王贵朝    时间: 2012-9-25 08:07
public class Test
        {
        public static void main(String[] args)
                {
                        int x  ;
         
                        System.out.println(x+"9");
                }
}
作者: 王海宇    时间: 2012-9-25 08:08
楼主,在静态方法里面是不可以访问方法外部的实例变量的。因为静态方法初始化的时间要早于实例变量初始化的时间,也就是说一个已经准备好了的方法可能会去访问一个还没有准备好的变量,这种可以预见会导致错误的情况当然是不允许存在的,所以编译阶段都不能通过。楼主要想解决你的问题,一个是将你的变量x定义成静态的也就是 static int x;另外一个就是将你的变量声明写到main方法中。还有一个就是你的打印语句也要写到main方法里面,只有在方法里面(例如main()方法)才可以调用方法(例如方法println())
作者: 翁鹏    时间: 2012-9-25 12:49
晕, 第一个x是TestDemo的一个实例变量的声明,没有初始化。
        第二个x是一个方法(主函数)的局部变量,如果方法是非静态的当局部变量名与实例变量名相同是,局部变量在该方法体内屏蔽实例变量。
但如果方法是静态的(如你的主函数)就不能够访问类声明的实例变量。 因为,静态成员在类加载的时候已经存在了,但是可能还没有对象,所以就不存在实例变量,你怎么能够访问不存在的东西呢!  编译失败!  你只要理解了这个,你这个类有多种改法。 你都可以试试!




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