A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xingkong123 中级黑马   /  2014-11-25 21:50  /  1180 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

是否可以从一个static方法内部发出对非static方法的调用?

点评

这个问题,自己写一个简单的代码,就可以测试出来,自己动手试一试  发表于 2014-11-25 22:00

11 个回复

倒序浏览
不可以的,static的方法在虚拟机启动的时候要先创建,你想想,static的方法创建了,其他的方法还没创建呢,就开始调用了,当然不行了
回复 使用道具 举报
以前老师常说的一句话:静态只能调用静态,非静态成员可以调用非静态成员也可以调用静态成员,这是死规定。不关非静态成员有没有创建,静态成员调用非静态成员都是错误的。

关于为什么静态成员不能调用非静态成员?
因为静态成员总是比非静态成员创建的早,当静态成员存在的时候,非静态还可能不存在,所以规定静态成员不能调用非静态成员。

关于静态成员为什么比非静态成员创建的早?
因为静态成员当加载类的时候就已经被创建了,非静态只有在创建该类对象的时候才会被创建。
回复 使用道具 举报 1 0
必然是不可以的,非静态的方法往往会涉及到类中的成员,而静态方法是不操作对象的特有数据的,也就是不需要操作类中的成员。
回复 使用道具 举报
本帖最后由 韩邦龙 于 2014-11-26 23:09 编辑

不可以,静态是随着类的加载而存在于方法区中,优先于对象先加载,而非静态随着对象的建立而存在对象里面。所以当静态方法访问对象时,对象还不存在,所以静态方法只能访问静态方法。同时静态内部不可以使用this,super字样,因为没有对象。希望能解决你的疑问。
回复 使用道具 举报
不可以 静态方法不可以调用非静态
回复 使用道具 举报
不可以的,静态变量先于非静态创建
回复 使用道具 举报
chensc 金牌黑马 2014-11-28 18:58:23
8#
学习学习!
回复 使用道具 举报
abclulu 中级黑马 2014-11-30 11:24:15
9#
不可以的 。。。。。。。。。
回复 使用道具 举报
当然不可以啊, static方法只能调用static方法啊 , 原因楼上说的很全了已经
回复 使用道具 举报
不行,静态方法优先于对象加载,而非静态变量必须要随着对象的加载而加载。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马