java中静态方法不是说不能存在非静态变量的吗?那为什么这样写又可以??

publicclassTest{publicstaticvoidmain(Stringargs[]){inta=1;//为什么???}}... public class Test {
public static void main(String args[]) {
int a = 1; //为什么???
}
}
展开
 我来答
匿名用户
2013-01-30
展开全部
首先理解为什么静态方法不能调用或者使用非静态变量:

一个先后顺序。静态变量是在编译的时候就划分存储空间了,而非静态变量在运行时在划分存储空间。所以静态变量不能调用非静态变量。

专业:
你说法有问题:不是静态方法不能存在非静态变量,而是静态方法不能调用非静态变量。现在的变量a仅仅是main方法一部分当然可以存在咯。

通俗(举例):
静态方法相当于 长辈,非静态方法(变量)相当于晚辈。静态方法不能调用非静态变量是因为,当长辈出生的时候,他不知道会有晚辈。而晚辈出生的时候他是知道有个长辈的。

以下代码才有误
public class Test {
private int a ;
public static void main(String args[]) {
a = 1;
}
}
按通俗的说, 长辈main出生的时候,晚辈a 还没出生,也就是世界上没有晚辈a,所以main不能调用a
而晚辈a出生的时候,长辈main已经存活于世上。如果a是方法,那么他能调用main

而你写的代码。变量a仅仅是main方法一部分。通俗的说,你写的代码里的变量a是他一部分比如一只手,或者一只脚。
Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
lmy_sk521
推荐于2017-10-11 · TA获得超过2272个赞
知道小有建树答主
回答量:1330
采纳率:73%
帮助的人:716万
展开全部
静态方法不可以调非静态全局变量,从内存的角度看,就是当类被加载的时候静态方法和静态属性(全局静态变量)被加载到内存中,就是在内存中开辟一段内存地址用来保存静态方法和静态属性,这时候没有被实例化的类在内存中是不存在的,所以静态方法是不能访问非静态的全局变量,在类被实例化的时候,就是new 某个类的时候,在内存中给这个类开辟一些内存空间保存这个类的对象,这个时候就可以用静态方法去访问非静态的全部变量
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
felix2009zjz
2013-01-30
知道答主
回答量:21
采纳率:0%
帮助的人:18.5万
展开全部
1、局部变量可以定义在任何方法当中,就像你书写的那样。
2、静态方法不能使用非静态的全局变量,如下
public class Test {
private int a ;
public static void main(String args[]) {
a = 1; //这是不被允许的。
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
heshengyuboy
2013-02-08 · 超过10用户采纳过TA的回答
知道答主
回答量:41
采纳率:0%
帮助的人:22.4万
展开全部
在静态方法中定义的变量都是静态变量。。在方法体外定义的变量前面不加static是不可以在静态方法中被调用的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
区锟Rs
2013-01-30 · 超过31用户采纳过TA的回答
知道答主
回答量:71
采纳率:100%
帮助的人:74.5万
展开全部
静态方法不可以调非静态变量,而a属于局部变量,方法内定义的,可以使用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(8)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式