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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王丽 黑马帝   /  2011-7-28 11:04  /  2693 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我刚才在方法里定义了一个static变量,可是不成,我想问一下为什么?

7 个回复

倒序浏览

回复 楼主 的帖子

static方法就是没有this的方法。在static方法的内部不能调用非静态的方法,反过来是可以的。
可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法------static方法的主要用途。
static方法很想C里面的全局变量,但是在类中置入static方法就可以使用他static方法和static作用域。
[ 本帖最后由 黑马-胡占朝 于 2011-07-28  15:08 编辑 ]
回复 使用道具 举报
黑马网友  发表于 2011-7-28 11:24:18
藤椅
你的这个方法是静态的话,成员变量也可以是静态的,但是,方法却不可以!
方法是非静态的,成员变量也可以静态的,方法也可以是静态的!
回复 使用道具 举报
黑马网友  发表于 2011-7-28 12:11:39
板凳
非静态成员(即实例成员),是与实例共存的,而静态成员是与类共存的.
有类不一定就有实例.  在没有实例的情况下,我们就不能调用非静态成员。

就是不能调用你写的方法,而方法中的变量却是静态的,说明可以调用这个变量。
但是这显然是不可能的(方法不能调用,而方法中的变量能调用)。
        public void staticTest(){
        static int a=0;               
        }
MyEclipse中的提示:
Multiple markers at this line
        - Illegal modifier for parameter a; only final is permitted
非法的参数a,只有用final是合法的。
回复 使用道具 举报
黑马网友  发表于 2011-7-28 12:43:47
报纸
静态方法中可以存在静态成员,也可以有非静态成员,但是非静态的方法中就不能有静态成员啦
回复 使用道具 举报
黑马网友  发表于 2011-7-28 14:34:03
地板

回复 楼主 的帖子

楼主童鞋,声明为static的变量实质上就是全局变量,
换句话说,生命力比较顽强,能活到程序运行结束,但你要放到某个非static的方法中,可就不一定能活那么久了?
这样的情况是对系统资源的浪费,尤其是内存,程序是不允许的。说的难听点,叫尸位素餐。
回复 使用道具 举报
朱玲均 黑马帝 2011-7-28 16:22:13
7#
  1. //请看以下代码
  2. public class Person {
  3.         public void run1(){
  4.                 int a = 11;
  5.                 System.out.println("a="+a+" from run1()");
  6.         }
  7.         public void run2(){
  8.                 int a = 22;
  9.                 System.out.println("a="+a+" from run2()");
  10.         }
  11.         public static void main(String[] args){
  12.                 Person p = new Person();
  13.                 p.run1();
  14.                 p.run2();
  15.         }
  16. }
复制代码
  1. 输出结果:
  2. a=11 from run1()
  3. a=22 from run2()
复制代码
由此,可以看出,run1()中定义的变量a和run2()中定义的变量a没有一毛钱关系,他们的作用域取决于各自所在的方法,当方法被调用执行的时候,对应所在的变量被创建,当方法调用结束,对应所创建的变量就会随之消失。
静态变量的本意是为了让所有对象共享这个变量,要是试图在方法中定义静态变量的话,就会发生逻辑错误。就是,调用方法已经结束,而在这个方法里面定义的变量却还存在!
[ 本帖最后由 朱玲均 于 2011-07-28  16:28 编辑 ]
回复 使用道具 举报
黑马网友  发表于 2011-7-28 18:08:37
8#
lz能否具体点。呵呵~有点抽象。楼主是不是这个意思:[code]public class StaticTest
{   static int a=1;
        public static void main(String[] args)
        {
                //static int a=1;//这不行
                System.out.println("main()中的a是"+a);
                new StaticTest().f();
                f1();
        }

        public void f()
        {
      //static int a=1;//这也不行
          System.out.println("f中的a是"+ ++a);
        }

        public static void f1()
        {
                //static int a=1;//这也不行
                int a=3;  //这里替换了全局变量a
                System.out.println("f1中的a是"+ ++a);
        }

}[/code]因为static变量是在类加载的时候载入内存的,属于类变量,放在方法中使用的是非静态的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马