java中静态方法不是说不能存在非静态变量的吗?那为什么这样写又可以??
publicclassTest{publicstaticvoidmain(Stringargs[]){inta=1;//为什么???}}...
public class Test {
public static void main(String args[]) {
int a = 1; //为什么???
}
} 展开
public static void main(String args[]) {
int a = 1; //为什么???
}
} 展开
10个回答
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是他一部分比如一只手,或者一只脚。
一个先后顺序。静态变量是在编译的时候就划分存储空间了,而非静态变量在运行时在划分存储空间。所以静态变量不能调用非静态变量。
专业:
你说法有问题:不是静态方法不能存在非静态变量,而是静态方法不能调用非静态变量。现在的变量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 广告
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I...
点击进入详情页
本回答由Storm代理提供
展开全部
静态方法不可以调非静态全局变量,从内存的角度看,就是当类被加载的时候静态方法和静态属性(全局静态变量)被加载到内存中,就是在内存中开辟一段内存地址用来保存静态方法和静态属性,这时候没有被实例化的类在内存中是不存在的,所以静态方法是不能访问非静态的全局变量,在类被实例化的时候,就是new 某个类的时候,在内存中给这个类开辟一些内存空间保存这个类的对象,这个时候就可以用静态方法去访问非静态的全部变量
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、局部变量可以定义在任何方法当中,就像你书写的那样。
2、静态方法不能使用非静态的全局变量,如下
public class Test {
private int a ;
public static void main(String args[]) {
a = 1; //这是不被允许的。
}
}
2、静态方法不能使用非静态的全局变量,如下
public class Test {
private int a ;
public static void main(String args[]) {
a = 1; //这是不被允许的。
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在静态方法中定义的变量都是静态变量。。在方法体外定义的变量前面不加static是不可以在静态方法中被调用的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
静态方法不可以调非静态变量,而a属于局部变量,方法内定义的,可以使用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询