关于Java中的static的若干问题

sdkjdxsf 2010-03-24 06:54:37
首先在Java中main函数要被定义为static,那么静态函数和静态对象只能被静态函数所调用,main函数作为静态的函数,是怎么调用其它函数的,难道说其他的函数都是静态的,这似乎不可能。其中的原理忘知道的网友相告。谢谢!!!!
...全文
181 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jonah_lin 2010-03-25
  • 打赏
  • 举报
回复
学习中,准备早点资料去系统了解。
jacky花园 2010-03-25
  • 打赏
  • 举报
回复
对,静态的和实例的需要研究下.
SS_YI123 2010-03-24
  • 打赏
  • 举报
回复
静态方法和静态变量既可以在静态方法中使用,也可以再实例方法中使用,实例方法和实例变量可以在实例方法中使用,若要在静态方法中使用就必须创建包含该方法的类的对象。
qybao 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 sdkjdxsf 的回复:]
首先在Java中main函数要被定义为static,那么静态函数和静态对象只能被静态函数所调用,main函数作为静态的函数,是怎么调用其它函数的,难道说其他的函数都是静态的,这似乎不可能。其中的原理忘知道的网友相告。谢谢!!!!
[/Quote]
这个不是很好理解吗?
所谓static方法里不能调用非Static方法,是指在static方法中不通过中间手段直接调用非static方法。
比如,

class C {
void B() {
//do something here
}
static void A() {
B(); //不通过任何手段直接调用B,这是不允许的
}
}

但是,如果通过中间手段,即实例化一个类,然后通过该实例化的对象就可以访问该非static方法(函数)了。
比如,

class C {
void B() {
//do something here
}
static void A() {
//B(); //不通过任何手段直接调用B,这是不允许的
C c = new C(); //通过实例化一个类
c.B(); //然后通过该对象去调用方法,是可以的
}
}

static方法也较静态方法或类方法,即该类被加载到JVM时,该方法也加载了,而类加载时,非static方法也叫实例方法是不被加载的,必须要实例化后才能调用
littleJP 2010-03-24
  • 打赏
  • 举报
回复
静态函数和静态对象只能被静态函数所调用 这句话就是错的啊 静态函数和静态对象可以被非static方法使用
East271536394 2010-03-24
  • 打赏
  • 举报
回复
Static 一般有二个用法:
初始化用。 定义成static 属性或static 方法,还有一个就是static 块。
afunx 2010-03-24
  • 打赏
  • 举报
回复
静态方法只能调用静态域或静态方法。因为静态域在执行时,会首先被分配内存。而非静态的实例化变量,并没有被分配内存。若你调用静态方法的参数,是非静态的实例化变量,若你还未实例化,那它没有被分配内存空间。则静态方法所要调用的参数,在内存中找不到,自然报错。
在静态方法中直接调用未实例化的动态方法,也是类似的道理。
建议楼主仔细研读一下静态域与静态方法的基础知识。我也是看过多次,以及很多演练之后,才逐渐明白的。
BigKing911 2010-03-24
  • 打赏
  • 举报
回复
首先在 main中调用静态方法楼主肯定是没有问题的!
静态方法中调用静态方法这是理所当然的事情。
而在main中调用示例方法的时候是通过类来建立类的实例,通过将类的对象来引用
来调用示例方法。
wzju64676266 2010-03-24
  • 打赏
  • 举报
回复
那就实例化啊大哥!
peiqu123 2010-03-24
  • 打赏
  • 举报
回复
同意楼上的观点。。。JVM启动时先加载静态变量和静态方法。。。非静态需创建对象后才能调用。。。
小贝壳666 2010-03-24
  • 打赏
  • 举报
回复
main函数作为静态的函数,调用其它函数A和B,A定义为static,B被定义为Class C中的非静态方法
JVM启动时会将定义为static的方法加载到内存中,所以这些方法可以直接调用。
而B方法为非静态方法,内存中也不存在B,故不可以直接调用。只能先创建对象C到内存中,通过C.B()来调用B方法。直接调用B编译是不会通过的。
knightzhuwei 2010-03-24
  • 打赏
  • 举报
回复
你回去再理解一下静态函数是不是真的只能调用静态对象和函数
Y569778402 2010-03-24
  • 打赏
  • 举报
回复
静态的直接用类来调classname.methodname
非静态的实例化类 后用对象来调

62,620

社区成员

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

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