黑马程序员技术交流社区

标题: 纠结的小问题 [打印本页]

作者: 杨丽静    时间: 2014-1-16 22:42
标题: 纠结的小问题
静态方法不能调用非静态方法,地球人都知道啊,关键是为什么啊谁能用通俗的语言解释下啊

作者: 孤独的天奇    时间: 2014-1-16 22:56
1. 静态方法随着类的加载而加载,跟对象没关
2. 非静态方法,只有new对象时,才会加载到方法区
3. 用类名直接调用静态方法,此时还没有对象,因此也就不能调用非静态方法啦
作者: 赵珏    时间: 2014-1-16 22:57
因为调用非静态方法必须建立对象, 通过对象来调用, 而静态方法不用, 直接通过类名就能调用了.

如果静态方法中调用了一个非静态方法, 那在没有建立对象之前它去哪找这个非静态方法呢?
作者: mrwise1991    时间: 2014-1-16 23:05
        因为静态方法可以用类名直接访问,这个时候是没有创建对象的,而我们地球人也都知道,非静态方法是依赖于对象的,没有对象是不能访问的,所以很显然了,静态方法是不能调用非静态方法的。

         当然,如果你够机灵的话,你也会发现这也不是绝对的:如果你传递一个对象的引用到静态方法里(静态方法可以创建器自身的对象),然后通过这个引用,你就可以调用非静态方法和访问非静态数据成员了,但通常要达到这样的效果(访问非静态成员),你只需要写一个非静态方法即可。
作者: qisikudingcha    时间: 2014-1-16 23:09
static修饰的静态方法,他只在类第一次加载时进行初始化。而非静态变量是属于对象的,在对象没有实例化时,没有被分配内存空间,所以你在静态方法中引用,静态方法在初始化的时候,在内存中找不到非静态方法
作者: 范晓冲    时间: 2014-1-16 23:17
要想使用非静态方法,只能通过对象来调用,即使用非静态方法之前必须得保证其所属类的实例对象已经存在。对于静态方法的调用,既可以通过对象来调用,也可以通过类名来调用。
静态方法在类加载时,被加载到内存中,而此时,类的实例(也就是对象)还没有产生,因此无法通过对象调用非静态方法。





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