关于static静态方法的问题!

sungju 2010-02-16 07:34:52
大家都知道静态方法不能调用非静态方法, 如下面的代码:由于main方法有static关键字 所以它是静态方法 当他调用了非静态的cc()方法以后 在编译的时候肯定会出错 我想问一下为什么静态方法调用非静态方法会出错?
class a{
pubic static void main(String[] args){

cc();
}

void cc(){
System.out.println("cc");
}

}
...全文
78 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhudongdong007 2010-02-16
  • 打赏
  • 举报
回复
一个静态的东西,就是类的东西,它是随着类的存在而存在的,
不是依靠对象,而非静态方法是对象的方法。你没有创建对象
就不能用静态方法去调用非静态方法。

如果调用了并且没有实例化。就相当于一个存在的东西里面包含不存在的东西。这样是不行的。
既然已经存在,为什么里面有不存在呢,不是矛盾么?
好好的理解一下吧!楼主加油。
kimiH 2010-02-16
  • 打赏
  • 举报
回复
首先非静态方法的调用是必须通过 对象.非静态方法. 而静态方法是公用的,不一定非要通过对象调用 .
所以静态方法不能调用非静态方法,但是非静态方法可以调用静态方法
bbb332 2010-02-16
  • 打赏
  • 举报
回复
非静态方法必须要有对象 静态方法是公用的,不一样非要有对象
所以静态方法不能调用非静态方法,但是非静态方法可以调用静态方法
njzdl 2010-02-16
  • 打赏
  • 举报
回复
译时确定与运行时确定,就好比,静态内存与动态内存的关系,是相对的,视上下文环境而定。




例如:

在用户程序中,堆空间分配动态内存,栈空间分配的相对来说是静态内存;

数据段和代码段属于静态内存,堆和栈相对来说都是动态内存;

内核中的静态变量和代码属于静态内存,整个用户程序相对来说都是动态内存。




同理:

常数值在编译时就确定,变量值要到运行时才确定;

局部变量相对于栈基址的偏移,编译时就确定,堆空间变量的相对位置也要运行时才确定;

静态变量在用户空间的地址【虚拟地址】编译时就确定,而非静态变量运行时才确定;


sungju 2010-02-16
  • 打赏
  • 举报
回复
引用 5 楼 njzdl 的回复:
静态方法编译期完成,
你可以想象下在实体还没生成的情况下如何调用?

这位朋友能不能具体点说明一下 在程序编译期 静态方法的状况
njzdl 2010-02-16
  • 打赏
  • 举报
回复
静态方法编译期完成,
你可以想象下在实体还没生成的情况下如何调用?
sungju 2010-02-16
  • 打赏
  • 举报
回复
引用 2 楼 njzdl 的回复:
静态方法是类共有的, 非静态的每个类都有
静态方法访问类名.方法名, 非静态的, 实体对象.方法名

这些我都知道 我想要知道的是为什么静态方法调用非静态方法会出错!!!!
sungju 2010-02-16
  • 打赏
  • 举报
回复
引用 1 楼 knightzhuwei 的回复:
非静态方法必须要有对象 静态方法不一样非要有对象
所以静态方法不能调用非静态方法 非静态方法可以调用静态方法

这个不是实质性的答案哦 …… ^^!
njzdl 2010-02-16
  • 打赏
  • 举报
回复
静态方法是类共有的, 非静态的每个类都有
静态方法访问类名.方法名, 非静态的, 实体对象.方法名
knightzhuwei 2010-02-16
  • 打赏
  • 举报
回复
非静态方法必须要有对象 静态方法不一样非要有对象
所以静态方法不能调用非静态方法 非静态方法可以调用静态方法

62,614

社区成员

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

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