函数中能定义局部static变量吗,为什么不行

classDog{publicvoidinfo(){staticintage=10;}}为什么说我是非法表达式编译报错呢,为什么局部不能使用static变量... class Dog{
public void info(){

static int age = 10;
}
}
为什么说我是非法表达式编译报错呢,为什么局部不能使用static变量
展开
 我来答
puziguo
推荐于2016-04-18 · TA获得超过1928个赞
知道小有建树答主
回答量:884
采纳率:86%
帮助的人:807万
展开全部
通俗一点说,static 修饰的是这个类生来就有的属性

比如狗的五官,够的尾巴等属性,然后会汪汪叫
class Dog{
static String 尾巴;
.....
static void wangwang(){}

}

而你的操作是在类的方法中去定义这个类生来就有的属性,想想也绝对别扭对吧
类的方法不是一个类,我们可以去new一个类对象,但是我们不可能去new一个类的方法

然后就是理论一点

在程序第一次创建(比如说new一个)某个对象的时候,java虚拟机会吧这个类的class文件加载到内存中,在这个过程中,虚拟机也会吧这个类的static属性初始化完毕,比如你想给Dog定义的age属性,虚拟机会分配内存空间并初始化值给age属性。这个过程只发生一次,今后你在创建Dog对象的时候,age会共享当初初始化的内存空间以及初始化值

而你吧static定义在方法内部,上面提到的初始化就无法进行

总之,这是java定义的编码规则,必须遵守而已
北京网络营销
2015-09-21 · 一起交流学习,共同发展进步
北京网络营销
采纳数:393 获赞数:5830

向TA提问 私信TA
展开全部
比如狗的五官,够的尾巴等属性,然后会汪汪叫
class Dog{
static String 尾巴;
.....
static void wangwang(){}

}

而你的操作是在类的方法中去定义这个类生来就有的属性,想想也绝对别扭对吧
类的方法不是一个类,我们可以去new一个类对象,但是我们不可能去new一个类的方法

然后就是理论一点

在程序第一次创建(比如说new一个)某个对象的时候,java虚拟机会吧这个类的class文件加载到内存中,在这个过程中,虚拟机也会吧这个类的static属性初始化完毕,比如你想给Dog定义的age属性,虚拟机会分配内存空间并初始化值给age属性。这个过程只发生一次,今后你在创建Dog对象的时候,age会共享当初初始化的内存空间以及初始化值

而你吧static定义在方法内部,上面提到的初始化就无法进行

总之,这是java定义的编码规则,必须遵守而已
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
凌培勇
2013-04-28
知道答主
回答量:6
采纳率:0%
帮助的人:3.1万
展开全部
为什么你要在函数里定义static呢,statis 是类变量,在类初始化的时候就要加载
追问
有什么矛盾吗?为什么放方法里面就报错呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2020-08-13
展开全部
这跟JVM运行机制有关,定义static之后表明在运行程序前,就要自动对其进行初始化,你的static变量写在了非static方法中,JVM不会在程序运行前就初始化这个方法,但是里面又包含了需要初始化的变量,这是矛盾的,所以不会通过。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式