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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 火焱 初级黑马   /  2012-6-16 08:30  /  1742 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 火焱 于 2012-6-16 08:50 编辑
  1. class  Test  
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.         int x = 1, y = 2;
  6.         sum(x, y);//代码错误
  7.     }
  8.      
  9.     int sum2(int x, int y)
  10.     {
  11.         return x+y;
  12.     }
  13.     int sum3(int x, int y, int z)
  14.     {
  15.         return sum2(sum2(x, y), z);
  16.     }
  17. }
复制代码
如上代码,类定义中的方法之间可以不新建对象而互相调用,而main方法中只能创建对象后再通过对象调用函数,这是为什么?

5 个回复

倒序浏览
本帖最后由 李盼 于 2012-6-16 08:48 编辑

因为main函数是static的,也就是静态的,静态方法内部只能直接调用其他静态方法,如果你在其他方法前也加static修饰,就可以直接调用了,否则就需要先new对象,再用对象调用!

其原因是静态方法,或者静态变量是类一加载,就存在于内存之中,并且只有一份,所有该类的对象都使用这一份。它是属于类,不属于对象!所以其他类也可以用类名.方法名调用。
而普通方法和变量是随着实例对象的创建才加载的,每个对象都有自己独一份。你在写代码的时候,普通方法调用普通方法,类加载的时候还没执行,而是等到创建了对象,再执行,那么也就是该对象的一个方法调用该对象的另一个方法,当然就没问题了。
而你在写代码时,静态方法调用普通方法,此时这个普通方法是哪个对象的呢?都还不确定,怎么能调用呢?所以只能先创建对象,再调用对象的该方法!

评分

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

查看全部评分

回复 使用道具 举报
main方法是静态的,你要想直接调用类内部的方法,可以把它定义成静态的即可。
回复 使用道具 举报
李盼 发表于 2012-6-16 08:33
因为main函数是static的,也就是静态的,静态方法内部只能直接调用其他静态方法,如果你在其他方法前也加st ...

谢谢你的详细简答,我想我明白了,嘿嘿~只是,你这些知识是从哪儿学来的呢,看书?
回复 使用道具 举报
火焱 发表于 2012-6-16 08:48
谢谢你的详细简答,我想我明白了,嘿嘿~只是,你这些知识是从哪儿学来的呢,看书? ...

老师的视频里面有讲解的,我是看视频知道的。我没有买过java书,是从4月份开始自学的,一直都是看毕老师和张老师的视频!
回复 使用道具 举报
你的程序没有自己检查过:
1,此程序中没有定义sum(x,y)方法
2,假若main中定义的为sum2(x,y)方法,在dos命令下编译会发现提示"无法从静态上下文中引用非静态方法"
【此处说明如果主函数要调用类中的方法有两个途径:(1)要么将要定义的方法声明为static;(2)创建类的对象,调用方法】
3,类中的方法是存在于方法区中,不用跑到栈中去拿对象
以上几点是我个人观点,希望对你有帮助

评分

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

查看全部评分

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