黑马程序员技术交流社区

标题: 关于关于static调用 [打印本页]

作者: 刘沛霞    时间: 2013-5-3 15:23
标题: 关于关于static调用
本帖最后由 刘沛霞 于 2013-5-6 12:09 编辑

是否可以从一个static方法内部发出对非static方法的调用?
作者: 殇_心。    时间: 2013-5-3 15:34
本帖最后由 殇_心。 于 2013-5-3 15:36 编辑

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

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

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

}
作者: 一直在路上    时间: 2013-5-3 15:35
这个是可以的,只需要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();
        }
}

作者: 刘海东    时间: 2013-5-3 15:38
楼上正解,
你就这样记吧:
静态的东西是优先于对象存在的。
对象还不存在时如何调用还未实例化的变量或者方法呢
作者: 曹睿翔    时间: 2013-5-3 15:46
殇_心。 发表于 2013-5-3 15:34
静态不能直接调用非静态。

下面有个实现方式:

其实吧,别伤心,遇到难点的给你加分啊
作者: 殇_心。    时间: 2013-5-3 15:47
曹睿翔 发表于 2013-5-3 15:46
其实吧,别伤心,遇到难点的给你加分啊

哈哈。  必须滴。
这些就算给 黑马 的道友解解小问题呗。
等下纠结死了。 可不好```
作者: 曹睿翔    时间: 2013-5-3 15:51
殇_心。 发表于 2013-5-3 15:47
哈哈。  必须滴。
这些就算给 黑马 的道友解解小问题呗。
等下纠结死了。 可不好``` ...

这个态度好,非常赞,要不来参加我的“第三贴”问题收集吧?有兴趣没
作者: 殇_心。    时间: 2013-5-3 15:52
曹睿翔 发表于 2013-5-3 15:51
这个态度好,非常赞,要不来参加我的“第三贴”问题收集吧?有兴趣没

没看到活动。明天得去打酱油了。。 这2天没空。

作者: 曹睿翔    时间: 2013-5-3 15:57
殇_心。 发表于 2013-5-3 15:52
没看到活动。明天得去打酱油了。。 这2天没空。

第二贴收尾,第三贴马上出,愿意的话把你收集的问题发帖也行,我整理
谢了
作者: 殇_心。    时间: 2013-5-3 15:59
曹睿翔 发表于 2013-5-3 15:57
第二贴收尾,第三贴马上出,愿意的话把你收集的问题发帖也行,我整理
谢了 ...

没事。。 老曹你太辛苦了。
这又当爹当妈。。 辛苦了。
作者: 海不扬波    时间: 2013-5-3 16:50
不可以直接调用。
以冠以修饰字static的方法称为类方法,没有冠以static修饰字的方法是实例方法。
1。实例方法可以互相调用,并可以调用类方法。
2。类方法也能相互调用,但不能直接调用实例方法,除非类方法引入局部对象,然后通过局部对象调用实例方法。
3。类方法能直接引用类变量,不能引用实例变量。
4。实例方法可引用实例变量,也可引用类变量。
作者: chouwayメ    时间: 2013-5-3 18:03
声明为static的方法有几条限制:
一它们仅能调用其他的static的方法;
二它们只能访问static数据;
三它们不能以任何形式引用this或super 。
作者: 曹睿翔    时间: 2013-5-4 06:58
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
作者: 刘沛霞    时间: 2013-5-4 08:37
是不是我可以这么理解  因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。
作者: 〃Mr.Zぐ    时间: 2013-5-4 12:15
可以的。静态的可以调用任何方法。而非静态的只能调用非静态的。非静态的数据产生在堆中。(JAVA中随着对象而产生)
作者: yp324    时间: 2013-5-4 12:16
static方法就好比上帝,非static方法就好比普通人,上帝能看到你,庇护你。你却看不到上帝,没有丝毫的交流
作者: 曹睿翔    时间: 2013-5-4 23:32

如果问题解决请再次编辑,修改为已解决,若还有疑问,请继续追问
作者: liuelxiwd    时间: 2013-5-5 12:25
我前几天这样给同学讲过,给你解释一下:
new对象之后可以访问,是因为,在new之后,内存中就有了成员方法(包括你static的那个)、成员变量、构造方法等,就是说这个对象享受这个类的全套服务,所以它当然可以访问static方法了。
但是,如果在static方法A中没有对象,这个方法就像一个围墙,你在围墙里光听说过有个叫static B()的方法,但是没有它的联系方式,你联系不到它,所以你就不能调用。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2