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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨丽静 中级黑马   /  2014-1-16 22:42  /  1193 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

静态方法不能调用非静态方法,地球人都知道啊,关键是为什么啊谁能用通俗的语言解释下啊

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

5 个回复

倒序浏览
1. 静态方法随着类的加载而加载,跟对象没关
2. 非静态方法,只有new对象时,才会加载到方法区
3. 用类名直接调用静态方法,此时还没有对象,因此也就不能调用非静态方法啦
回复 使用道具 举报
因为调用非静态方法必须建立对象, 通过对象来调用, 而静态方法不用, 直接通过类名就能调用了.

如果静态方法中调用了一个非静态方法, 那在没有建立对象之前它去哪找这个非静态方法呢?

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
        因为静态方法可以用类名直接访问,这个时候是没有创建对象的,而我们地球人也都知道,非静态方法是依赖于对象的,没有对象是不能访问的,所以很显然了,静态方法是不能调用非静态方法的。

         当然,如果你够机灵的话,你也会发现这也不是绝对的:如果你传递一个对象的引用到静态方法里(静态方法可以创建器自身的对象),然后通过这个引用,你就可以调用非静态方法和访问非静态数据成员了,但通常要达到这样的效果(访问非静态成员),你只需要写一个非静态方法即可。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
static修饰的静态方法,他只在类第一次加载时进行初始化。而非静态变量是属于对象的,在对象没有实例化时,没有被分配内存空间,所以你在静态方法中引用,静态方法在初始化的时候,在内存中找不到非静态方法
回复 使用道具 举报
要想使用非静态方法,只能通过对象来调用,即使用非静态方法之前必须得保证其所属类的实例对象已经存在。对于静态方法的调用,既可以通过对象来调用,也可以通过类名来调用。
静态方法在类加载时,被加载到内存中,而此时,类的实例(也就是对象)还没有产生,因此无法通过对象调用非静态方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马