黑马程序员技术交流社区
标题: 为什么主方法中只能调用静态方法 [打印本页]
作者: 小学生0987 时间: 2012-11-7 13:23
标题: 为什么主方法中只能调用静态方法
为什么主方法中只能调用静态方法
作者: 王自强 时间: 2012-11-7 13:26
主函数是静态的,静态只能调用静态成员
作者: 徐军涛 时间: 2012-11-7 13:57
因为主函数是静态的
Static关键字的注意事项:
1, 静态只能访问静态
2, 主函数是静态的。
3, 静态随着类的加载而加载,随着类的消失而消失。
4, 静态中在静态中不允许出现this、super关键字(静态先于对象存在)。
5, 被静态修饰的成员变量,被所有对象共享。
6, 静态成员可以直接被类名调用。
作者: 甘建文 时间: 2012-11-7 14:13
因为主函数是静态的,所以只能调用静态成员了!
作者: HeiMa-黄倲江 时间: 2012-11-7 14:14
哥们飘过
作者: 邹海洋 时间: 2012-11-8 02:27
作者: 崔利鹏 时间: 2012-11-8 08:38
static修饰的方法或者变量,还有静态代码块是在类加载的时候声明的。所以main方法想直接调用其他方法的话,其他方法也要加上static关键字,如果不加的话。main方法调用的时候其他方法还没加载,就找不到他,就会报错。没加static关键字的方法或者变量是在类创建实例的时候声明的。所以他们属于类对象的方法,只能通过类的实例来调用。
作者: 黑马-zhangping 时间: 2012-11-8 09:58
因为主函数是静态函数,静态函数只能调用静态函数,而非静态方法可以调用非静态方法和静态方法。
作者: 黑马周磊 时间: 2012-11-8 10:23
如果主函数是静态的,程序一运行,静态方法就加载了,而其它非静态方法或变量都还不存在。所以静态的函数只能调用已经被虚拟机加载了的静态函数或静态变量,它调用不了还没被加载的非静态函数或变量。
作者: 刘学宾 时间: 2012-11-8 10:23
主函数是静态的,故此他只能调用静态的成员。
作者: 会飞的鱼 时间: 2012-11-8 12:46
- public class Test {
- //public static void main(String...args) { ①
- public static void main(String[] args) { //②
- Test t=new Test();
- t.main("a");
- main(1);
- main(new int[]{1,2,3});
- }
- public void main(String a) { //③
- System.out.println(a);
- }
- public static void main(int a){ //④
- System.out.println(a);
- }
- public static void main(int[] a){ //⑤
- for(int i:a){
- System.out.print(i+"\t");
- }
- }
- public static void main(Object[] objs){ //⑥
- for(Object obj:objs){
- System.out.println(obj.getClass().getName());
- }
- }
- }
复制代码 首先明确一点,主main()函数就是我们的程序的入口,主main()函数虽然写在一个类里面,但它并不属于这个类!!注意这个主字。
而且主main()函数只有两种写法:就是上面的①和②。不信你把这两个注释,只留③④⑤⑥任意一个都会报找不到函数入口。
因为主main()不属于我们的类,但它又是一个入口,第一个执行,而且又不能用我们的类的对象去'.'点出来,所以就加了个static修饰,以后怎么调用就是jvm的事了。
至于主main()函数并不是说只能调用static方法,你new一个对象,然后调用它的非static方法也是可以的。只是说调用不属于某个对象的方法,因为它没有对象,不能点出了,所以必须加个static修饰(加了static以后可用类名'.'出来)。
而上面的③④⑤⑥看起来是对主main()的重载,其实跟他没半毛钱关系,要真是对它的重载,那岂不是有多个主main()了。
其实他们都属于Test类,只是在Test类里面进行重载而已。
作者: 梁枝武 时间: 2012-11-8 12:48
主方法可以直接调用主函数所在类中定义的static方法
主方法可以调用主函数所在类中定义的非static方法,但不是直接调用,需要创建主函数所在类的实例,用实例引用调用
主方法可以调用所在类外的类的static方法,可以直接用方法所在的类名来调用
对于主方法所在类外的其他非static方法调用只有创建对应对象来调用了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |