关于一个静态变量的问题

dyy830606 2008-03-31 07:35:36
我在父类里边定义一个变量,在子类的main函数中调用,提示非静太变量不能在静态 的变量中使用,难道非要将父类中的变量定义为静太的才能在子类的main函数中使用么.能不能具体的分析一下内存,说明一下为什么!
...全文
211 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyiwu 2008-04-06
  • 打赏
  • 举报
回复
或者你这样理解试试看:
你把static方法看作方法体内没有this关键字的方法。
java的类中的实例方法都会隐含的为其中的调用本类的方法和变量加this关键字。this关键字代表此类的实例自己。在static方法中,没有this关键字(没法加this),在其中无法调用本类的方法和变量。
这个是《Think in Java》里说的,希望对你有帮助。
54powerman 2008-04-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 java2000_net 的回复:]
那是因为你的main是static,当然只能直接访问static的变量啦!
[/Quote]
mark!
回答问题就要这样,不需要一句废话。:)
tsliyangyang 2008-04-05
  • 打赏
  • 举报
回复
class B{
int a=3;
}
public class Sum extends B{
public static void main(String[] args){
Sum s=new Sum();
System.out.println(s.a);
}
}
用的时候实例化一下就可以了。
YOYO1984 2008-04-05
  • 打赏
  • 举报
回复
其实我觉得 你在学习java的时候应该重点 学习一下程序在内存中的状态是怎么样的,那样会对你有很大帮助。你的思路会很清晰

你在子类的main方法中定义一个子类的对象,然后子类对象就可以直接到用父类的变量了。很简单
liuqianqian 2008-04-05
  • 打赏
  • 举报
回复
可以学习一下!呵呵
main方法式静态的,所以要直接使用变量,变量就应该设置成静态的!
我觉得不用在这个地方较真,要绝对相信你的代码,代码说什么就是什么,要什么就给什么!
jojo_m 2008-04-05
  • 打赏
  • 举报
回复
学习了,但貌似回答问题都没说到点子上,湖里糊涂中。。
loyoathlon 2008-04-04
  • 打赏
  • 举报
回复
静态方法的执行在对象实例化之前
非静态属性赋值在对象实例化之后

试问 静态方法如何调用非静态属性?
如果静态方法调用非静态方法 非静态方法自然可以访问非静态属性
那么等于是 静态方法调用了非静态属性……
所以静态方法也不可以调用非静态方法
jimmy54 2008-04-04
  • 打赏
  • 举报
回复
学习了
左师佑图 2008-04-04
  • 打赏
  • 举报
回复

学习了
whmjxa 2008-04-04
  • 打赏
  • 举报
回复
你可以创建一个该类的对象,通过此对象在静态方法中调用非静态变量
dyy830606 2008-04-04
  • 打赏
  • 举报
回复
好多牛人啊,呵呵
hoszone 2008-03-31
  • 打赏
  • 举报
回复
类变量属于某一个事例的,类静态变量是属于类的,所有的事例都共用这个静态变量

如 class Test 有一个类变量 t1,一个静态变量t2
t1的使用如下
Test t = new Test();
int temp = t.t1;
t2 的使用
int temp1 = Test.t2;
dyy830606 2008-03-31
  • 打赏
  • 举报
回复
我记者只发了一个帖子啊,怎么出来了两个,晕 ,这个是真货
f12014 2008-03-31
  • 打赏
  • 举报
回复
顶个 本人也遇到拉同样的问题
Gump09 2008-03-31
  • 打赏
  • 举报
回复
1
静态变量和方法从属于类,而实例变量和方法从属于实例。
前面的方法是static,后面的方法不是静态的????
-----------------------------------------------
静态==static 是说在翻译时把英文static翻译为静态

2
类变量是类的静态变量???
-----------------------------------------------
对 类变量是类的静态变量

3
什么时候加在的F中的静态变量
-----------------------------------------------
F中的静态变量是在读取F 的class文件时就加载了的。
dyy830606 2008-03-31
  • 打赏
  • 举报
回复
静态变量和方法从属于类,而实例变量和方法从属于实例。
前面的方法是static,后面的方法不是静态的????
类变量是类的静态变量???
类方法有隐含指针指向class对象(而不是实例对象)。 这句不太明白是不是说静态的方法再没有声明对象的时候就已经连上了,可以访问类中的静态属性和方法.所以非静态的属性和方法在编译的时候出错,还有,可能是编译原理上的东西,我想知道,new出来的新对象,在编译期间执行么?还是到运行的时候才生成,静态变量和方法呢,在编译期间都做了写什么,代码都放到相映的内存中去了么


你的意思是不是
静态的变量存放在数据区,所有的类都共享同一个静态变量,如父类F子类S,子类S中有main方法,我想问什么时候加在的F中的静态变量,是在NEW一个新的对象的时候加在的,还是在那之前的声明一个对象F F的时候,还是在加在main方法的时候,顺序搞不太清.
Gump09 2008-03-31
  • 打赏
  • 举报
回复
静态变量和方法从属于类,而实例变量和方法从属于实例。
也就是说如果一个类还没有被创建实例那么它的实例变量是找不到的。
而静态变量和方法是可以使用的。所以类方法只能引用类变量。

类变量随着class字节流文件的加载而加载。
类方法有隐含指针指向class对象(而不是实例对象)。
所以它可以通过引用class对象而得到类变量的值。.
而实例变量的值是随着实例生成而生成的。
类方法无法通过隐含指针去得到实例引用所以无法得到实例变量的值。

dyy830606 2008-03-31
  • 打赏
  • 举报
回复
对啊,我明白我的main方法是静态的,我就是想问问,如果子类中的用了main方法调用父类的属性,是不是必须用静态的
soief 2008-03-31
  • 打赏
  • 举报
回复
那是因为你的main是static,当然只能直接访问static的变量啦!
却是这样的
dyy830606 2008-03-31
  • 打赏
  • 举报
回复
好象main方法必须是静态的吧,HelloWorld没用静态的通不过
加载更多回复(2)

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧