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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘沛霞 中级黑马   /  2013-5-3 15:23  /  2956 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘沛霞 于 2013-5-6 12:09 编辑

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

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1

查看全部评分

17 个回复

正序浏览
我前几天这样给同学讲过,给你解释一下:
new对象之后可以访问,是因为,在new之后,内存中就有了成员方法(包括你static的那个)、成员变量、构造方法等,就是说这个对象享受这个类的全套服务,所以它当然可以访问static方法了。
但是,如果在static方法A中没有对象,这个方法就像一个围墙,你在围墙里光听说过有个叫static B()的方法,但是没有它的联系方式,你联系不到它,所以你就不能调用。
回复 使用道具 举报

如果问题解决请再次编辑,修改为已解决,若还有疑问,请继续追问
回复 使用道具 举报
static方法就好比上帝,非static方法就好比普通人,上帝能看到你,庇护你。你却看不到上帝,没有丝毫的交流
回复 使用道具 举报
可以的。静态的可以调用任何方法。而非静态的只能调用非静态的。非静态的数据产生在堆中。(JAVA中随着对象而产生)
回复 使用道具 举报
是不是我可以这么理解  因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。
回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
声明为static的方法有几条限制:
一它们仅能调用其他的static的方法;
二它们只能访问static数据;
三它们不能以任何形式引用this或super 。
回复 使用道具 举报
不可以直接调用。
以冠以修饰字static的方法称为类方法,没有冠以static修饰字的方法是实例方法。
1。实例方法可以互相调用,并可以调用类方法。
2。类方法也能相互调用,但不能直接调用实例方法,除非类方法引入局部对象,然后通过局部对象调用实例方法。
3。类方法能直接引用类变量,不能引用实例变量。
4。实例方法可引用实例变量,也可引用类变量。
回复 使用道具 举报
曹睿翔 发表于 2013-5-3 15:57
第二贴收尾,第三贴马上出,愿意的话把你收集的问题发帖也行,我整理
谢了 ...

没事。。 老曹你太辛苦了。
这又当爹当妈。。 辛苦了。
回复 使用道具 举报
殇_心。 发表于 2013-5-3 15:52
没看到活动。明天得去打酱油了。。 这2天没空。

第二贴收尾,第三贴马上出,愿意的话把你收集的问题发帖也行,我整理
谢了
回复 使用道具 举报
曹睿翔 发表于 2013-5-3 15:51
这个态度好,非常赞,要不来参加我的“第三贴”问题收集吧?有兴趣没

没看到活动。明天得去打酱油了。。 这2天没空。
回复 使用道具 举报
殇_心。 发表于 2013-5-3 15:47
哈哈。  必须滴。
这些就算给 黑马 的道友解解小问题呗。
等下纠结死了。 可不好``` ...

这个态度好,非常赞,要不来参加我的“第三贴”问题收集吧?有兴趣没
回复 使用道具 举报
曹睿翔 发表于 2013-5-3 15:46
其实吧,别伤心,遇到难点的给你加分啊

哈哈。  必须滴。
这些就算给 黑马 的道友解解小问题呗。
等下纠结死了。 可不好```
回复 使用道具 举报
殇_心。 发表于 2013-5-3 15:34
静态不能直接调用非静态。

下面有个实现方式:

其实吧,别伤心,遇到难点的给你加分啊
回复 使用道具 举报
楼上正解,
你就这样记吧:
静态的东西是优先于对象存在的。
对象还不存在时如何调用还未实例化的变量或者方法呢
回复 使用道具 举报
这个是可以的,只需要new一个对象出来就行了,写了一个最简单的小例子测试一下,发现是可以的。
public class Test3 {
        public static void sayHelle(){
                new Test3().eat();
        }
        public void eat(){
                System.out.println("吃饭..............");
        }
        public static void main(String[] args) {
                Test3 test = new Test3();
                test.sayHelle();
        }
}

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 路一直都在!

查看全部评分

回复 使用道具 举报
本帖最后由 殇_心。 于 2013-5-3 15:36 编辑

静态不能直接调用非静态。

下面有个实现方式:
测试代码如下:
class Demo
{

        public static void main(String[] args)
        {
         new Demo().fun();//静态调用非静态。
        }
        public void fun()//非静态方法
        {
         
        }

}

评分

参与人数 1黑马币 +6 收起 理由
曹睿翔 + 6 神马都是浮云

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马