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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小学生0987 中级黑马   /  2012-11-7 13:23  /  3739 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么主方法中只能调用静态方法

评分

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

查看全部评分

11 个回复

倒序浏览
主函数是静态的,静态只能调用静态成员
回复 使用道具 举报
因为主函数是静态的
Static关键字的注意事项:
1, 静态只能访问静态
2, 主函数是静态的。
3, 静态随着类的加载而加载,随着类的消失而消失。
4, 静态中在静态中不允许出现thissuper关键字(静态先于对象存在)。
5, 被静态修饰的成员变量,被所有对象共享。
6, 静态成员可以直接被类名调用。
      

评分

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

查看全部评分

回复 使用道具 举报
因为主函数是静态的,所以只能调用静态成员了!

评分

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

查看全部评分

回复 使用道具 举报
哥们飘过
回复 使用道具 举报
邹海洋 来自手机 中级黑马 2012-11-8 02:27:59
地板
回复 使用道具 举报
static修饰的方法或者变量,还有静态代码块是在类加载的时候声明的。所以main方法想直接调用其他方法的话,其他方法也要加上static关键字,如果不加的话。main方法调用的时候其他方法还没加载,就找不到他,就会报错。没加static关键字的方法或者变量是在类创建实例的时候声明的。所以他们属于类对象的方法,只能通过类的实例来调用。

评分

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

查看全部评分

回复 使用道具 举报
因为主函数是静态函数,静态函数只能调用静态函数,而非静态方法可以调用非静态方法和静态方法。
回复 使用道具 举报
如果主函数是静态的,程序一运行,静态方法就加载了,而其它非静态方法或变量都还不存在。所以静态的函数只能调用已经被虚拟机加载了的静态函数或静态变量,它调用不了还没被加载的非静态函数或变量。

评分

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

查看全部评分

回复 使用道具 举报
主函数是静态的,故此他只能调用静态的成员。
回复 使用道具 举报
  1. public class Test {
  2.          //public static void main(String...args) { ①
  3.          public static void main(String[] args) { //②
  4.                Test t=new Test();
  5.                t.main("a");
  6.                main(1);
  7.                main(new int[]{1,2,3});
  8.          }
  9.         public void main(String a) { //③
  10.                System.out.println(a);
  11.         }
  12.         public static void main(int a){ //④
  13.                 System.out.println(a);
  14.        }
  15.        public static void main(int[] a){ //⑤
  16.              for(int i:a){
  17.                   System.out.print(i+"\t");
  18.             }
  19.       }
  20.       public static void main(Object[] objs){ //⑥
  21.            for(Object obj:objs){
  22.                System.out.println(obj.getClass().getName());
  23.           }
  24.      }
  25. }
复制代码
首先明确一点,main()函数就是我们的程序的入口,main()函数虽然写在一个类里面,但它并不属于这个类!!注意这个字。
而且main()函数只有两种写法:就是上面的①和②。不信你把这两个注释,只留③④⑤⑥任意一个都会报找不到函数入口。
因为main()不属于我们的类,但它又是一个入口,第一个执行,而且又不能用我们的类的对象去'.'点出来,所以就加了个static修饰,以后怎么调用就是jvm的事了。
至于main()函数并不是说只能调用static方法,你new一个对象,然后调用它的非static方法也是可以的。只是说调用不属于某个对象的方法,因为它没有对象,不能点出了,所以必须加个static修饰(加了static以后可用类名'.'出来)。
而上面的③④⑤⑥看起来是对main()的重载,其实跟他没半毛钱关系,要真是对它的重载,那岂不是有多个主main()了。
其实他们都属于Test类,只是在Test类里面进行重载而已。



回复 使用道具 举报
主方法可以直接调用主函数所在类中定义的static方法
主方法可以调用主函数所在类中定义的非static方法,但不是直接调用,需要创建主函数所在类的实例,用实例引用调用
主方法可以调用所在类外的类的static方法,可以直接用方法所在的类名来调用
对于主方法所在类外的其他非static方法调用只有创建对应对象来调用了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马