黑马程序员技术交流社区

标题: static int i = 0和int i = 0有什么区别? [打印本页]

作者: yogaa    时间: 2014-4-15 15:45
标题: static int i = 0和int i = 0有什么区别?
本帖最后由 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;就编译失败了,感觉上这么做是不对的,但是说不出具体原因,请大神们帮忙解惑一下~

作者: Kelvinhu    时间: 2014-4-15 15:47
static int i = 0和int i = 0

一个是静态int型变量i,一个是局部型变量i
作者: tacyjay在路上    时间: 2014-4-15 15:55
本帖最后由 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之前,就可以了。代码如上所述。








作者: yogaa    时间: 2014-4-15 15:56
是不是静态变量只能放到静态的方法里面??
刚才把那个静态变量static int i = 0 ;提出来放到了方法外面就好了
作者: Kelvinhu    时间: 2014-4-15 16:02
这个static是在类下面修饰的,就是基于类的下面
而不加static就是方法当中声明的局部变量。。我觉得static相当于全局变量这个意思,可以这么理解,但java木有全局变量这么的说法。

static是类加载的时候就已经产生了,而方法下的是进行实例化才产生的,你定义到方法里面编译器就觉得这个有问题。。。所以报错了。
作者: Kelvinhu    时间: 2014-4-15 16:05
本帖最后由 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所以是不行的~


作者: 曹冬明    时间: 2014-4-15 16:12
方法中定义的是局部变量不能用statci修饰,static只能修饰成员变量和成员方法,或者内部类
作者: sheng6699    时间: 2014-4-15 16:23
静态方法里可以有静态的变量。但是非静态的方法里不可以定义静态变量。
作者: 陈妙俊    时间: 2014-4-15 16:41
静态:static
          用法:是一个修饰符,用于修饰成员(成员变量,成员函数),是基于类下面的,不能修饰局部
作者: 天山    时间: 2014-4-15 19:09
静态变量,局部变量
作者: 曹冬明    时间: 2014-4-15 19:17
方法中定义的局部变量不能用static修饰,static只能修饰成员变量,成员函数和内部类和静态代码块
作者: wyqs92    时间: 2014-4-15 23:30
static 是用来修饰成员的,你把它放在了方法中,用来修饰局部了。只要把static修饰的那段代码提到方法外就OK了。。。
作者: 四川男人    时间: 2014-4-16 11:25
你的int型变量是局部变量 而方法是非静态的,非静态方法是不能调用静态变量的,




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