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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yogaa 中级黑马   /  2014-4-15 15:45  /  9312 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yogaa 于 2014-4-15 15:52 编辑

这是我看一道题上面问的
很简单的一个程序
1  public class Test{
2    public int Method(){
3     int i = 0;
4      i++;
5      return i;
  }    public static void main(String[] args){
      Test test = new Test();      int j = test.Method();
      System.out.print(j);
}
}

执行结果为1。
而后我就在3行处加了一个static,变为static int i = 0;就编译失败了,感觉上这么做是不对的,但是说不出具体原因,请大神们帮忙解惑一下~

12 个回复

倒序浏览
static int i = 0和int i = 0

一个是静态int型变量i,一个是局部型变量i
回复 使用道具 举报
本帖最后由 tacyjay在路上 于 2014-4-15 16:26 编辑
  1. public class Test
  2. {
  3.         static int i =0 ;// 静态变量是要被声明在类体中的
  4.         public int  Method()
  5.         {       
  6.                 i++;
  7.                 return i;
  8.         }
  9.         public static void main(String[] args)
  10.         {
  11.                 Test test = new Test();      
  12.                 int j = test.Method();
  13.         System.out.print(j);
  14.         }

  15. }
复制代码

运行结果为 非法的表达式开始

因为如果写成static int i = 0; 说明i是静态变量,而静态变量属于成员变量,是要被声明在类体中的,而不能是方法体


把 static int i = 0; 提到方法Method之前,就可以了。代码如上所述。







评分

参与人数 1黑马币 +6 收起 理由
yogaa + 6 很给力!

查看全部评分

回复 使用道具 举报
是不是静态变量只能放到静态的方法里面??
刚才把那个静态变量static int i = 0 ;提出来放到了方法外面就好了
回复 使用道具 举报
这个static是在类下面修饰的,就是基于类的下面
而不加static就是方法当中声明的局部变量。。我觉得static相当于全局变量这个意思,可以这么理解,但java木有全局变量这么的说法。

static是类加载的时候就已经产生了,而方法下的是进行实例化才产生的,你定义到方法里面编译器就觉得这个有问题。。。所以报错了。
回复 使用道具 举报
本帖最后由 Kelvinhu 于 2014-4-15 16:53 编辑
  1. package Testpackage;

  2. public class Test {
  3.         static int n = 0;

  4.         public void getValue() {
  5.                 int i = 0;
  6.                 i = i + 1;
  7.                 n = n + 2;
  8.                 System.out.println("n=" + n);
  9.                 System.out.println("i=" + i);
  10.         }

  11.         public static void main(String args[]) {
  12.                 new Test().getValue();
  13.         }
  14. }
复制代码


用代码可能更好理解。。:lol 之前我也没搞明白,自己随便捣鼓了捣鼓看了下书也理解了,就把static理解成全局变量。。。
类加载static修饰的变量就出现了,你要是搞到方法体里面感觉很别扭啊 :lol所以是不行的~

评分

参与人数 1黑马币 +2 收起 理由
yogaa + 2 很给力!

查看全部评分

回复 使用道具 举报
方法中定义的是局部变量不能用statci修饰,static只能修饰成员变量和成员方法,或者内部类
回复 使用道具 举报
静态方法里可以有静态的变量。但是非静态的方法里不可以定义静态变量。
回复 使用道具 举报
静态:static
          用法:是一个修饰符,用于修饰成员(成员变量,成员函数),是基于类下面的,不能修饰局部
回复 使用道具 举报
静态变量,局部变量
回复 使用道具 举报
方法中定义的局部变量不能用static修饰,static只能修饰成员变量,成员函数和内部类和静态代码块
回复 使用道具 举报
static 是用来修饰成员的,你把它放在了方法中,用来修饰局部了。只要把static修饰的那段代码提到方法外就OK了。。。
回复 使用道具 举报
你的int型变量是局部变量 而方法是非静态的,非静态方法是不能调用静态变量的,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马