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是他一部分比如一只手,或者一只脚。
大雅新科技有限公司
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,... 点击进入详情页
本回答由大雅新科技有限公司提供
lmy_sk521
推荐于2017-10-11 · TA获得超过2272个赞
知道小有建树答主
回答量:1330
采纳率:73%
帮助的人:723万
展开全部
静态方法不可以调非静态全局变量,从内存的角度看,就是当类被加载的时候静态方法和静态属性(全局静态变量)被加载到内存中,就是在内存中开辟一段内存地址用来保存静态方法和静态属性,这时候没有被实例化的类在内存中是不存在的,所以静态方法是不能访问非静态的全局变量,在类被实例化的时候,就是new 某个类的时候,在内存中给这个类开辟一些内存空间保存这个类的对象,这个时候就可以用静态方法去访问非静态的全部变量
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
felix2009zjz
2013-01-30
知道答主
回答量:21
采纳率:0%
帮助的人:18.6万
展开全部
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.6万
展开全部
在静态方法中定义的变量都是静态变量。。在方法体外定义的变量前面不加static是不可以在静态方法中被调用的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
区锟Rs
2013-01-30 · 超过31用户采纳过TA的回答
知道答主
回答量:71
采纳率:100%
帮助的人:74.9万
展开全部
静态方法不可以调非静态变量,而a属于局部变量,方法内定义的,可以使用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(8)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式