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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xieshuhua 中级黑马   /  2012-5-14 21:28  /  2949 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class luck {
               
                static void ss(){
                    int []i={1,4};
                    i[0]++;
                    System.out.println(i[0]);
                    }
            public static void main(String[] args) {
                    ss();
}
}
这段程序中ss前面加了一个static修饰符,如果没有就不能编译通过,请问为什么会出现这种情况,求助下。。。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

12 个回复

倒序浏览
ss在引用的时候必须加()我想这只是格式的问题吧。
回复 使用道具 举报
public class luck {
               
                static void ss(){
                    int []i={1,4};
                    i[0]++;
                    System.out.println(i[0]);
                    }
            public static void main(String[] args) {
                    ss();
           }
}
如果ss()这个方法不写static 的话  就要 把  luck 类 new 一下,然后用对象名.ss()才能使用,  
要是ss() 这个方法直接是static的话 ,就可以直接调用,因为静态类可以直接调用静态类。

在同一个类中,如果是特殊的main方法调用其他实例方法,都需要先将类实例化,在通过“对象名。方法名”进行调用,而调用static静态类方法,则不需要,直接调用该方法即可,因为main()方法是一个典型的静态方法,它同样遵循一般静态方法的规则,规则就是静态方法可以直接调用同一个类的静态方法


ss() 后面这个括号 是表示 它是一个方法

评分

参与人数 2技术分 +1 黑马币 +5 收起 理由
xieshuhua + 5 非常正确!!太感谢了。我的思路有点乱,没.
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
因为static方法不能直接调用非static方法。而main是static的,所以在ss()前面必须加上static
回复 使用道具 举报
public static void main(String[] args) {
                    ss();      //这里没有创建类的对象,属于调用静态方法,静态方法必须使用static声明。故ss()方法必须使用static静态声明。
}
回复 使用道具 举报
因为main方法是static的,静态的方法中只能调用静态的方法或者通过对象调用方法
回复 使用道具 举报
main方法是处理器的入口方法,他本身没有指向的,要指向luck里的ss方法,只有2个方法,实例化对象或static。
你可以试下实例化
回复 使用道具 举报
这样就可以了,new luck().ss();那方法ss()前边就不用加static了,因为你在静态方法里直接引用了一个非静态方法。静态方法在程序加载时候就在内存里了,而非静态方法不会存在,你用一个已经存在的main去调用还没有的ss当然不行了。
回复 使用道具 举报
张亭 中级黑马 2012-5-14 21:51:53
9#
因为主函数是static 的,static方法只能调用static方法,所以ss前面必须加static修饰符才能被主函数访问
回复 使用道具 举报
成员用static修饰表明该成员属于该类 是类成员 在类装载是被classload加载进方法区  ss()方法定义时头前没加static修饰符修饰的话代表该方法为成员方法 属于该类对象 不能在类集方法里直接调用只有该类对象才可以调用  而static void main()是类级方法被jvm加载时那时候还没有对象所有不能直接调用静态成员  2中解决方式 把成员修饰成静态(ss()方法修饰成静态方法也就是加static)  或者通过创建该类对象通过对象调用(new lock().ss();)  静态成员的作用率为该类 生存周期为类装载到类结束  成员的作用率为该对象 生存周期对象的创建 到对象变成垃圾也就是无引用指向该对象
回复 使用道具 举报
没分了,全部给二楼了,但是下面的回答的也很好,谢谢你们了。
回复 使用道具 举报
手慢 没回复上  我的分啊{:soso_e109:}
回复 使用道具 举报
public class luck {
               
                static void ss(){
                    int []i={1,4};
                    i[0]++;
                    System.out.println(i[0]);
                    }
            public static void main(String[] args) {
                    ss();
           }
}
如果ss()这个方法不写static 的话  就要 把  luck 类 new 一下,然后用对象名.ss()才能使用,  
要是ss() 这个方法直接是static的话 ,就可以直接调用,因为静态类可以直接调用静态类。

在同一个类中,如果是特殊的main方法调用其他实例方法,都需要先将类实例化,在通过“对象名。方法名”进行调用,而调用static静态类方法,则不需要,直接调用该方法即可,因为main()方法是一个典型的静态方法,它同样遵循一般静态方法的规则,规则就是静态方法可以直接调用同一个类的静态方法


ss() 后面这个括号 是表示 它是一个方法


这位同学的解释是正解,补充一下:静态方法ss()只能被同一个类的静态方法直接调用,其他类的静态方法必须加上类名才能调用ss();
另外,不支持直接new出一个新类,在软件开发中会造成数据流失(新类里是没数据的)。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马