黑马程序员技术交流社区
标题:
static的一个小问题,很苦恼
[打印本页]
作者:
xieshuhua
时间:
2012-5-14 21:28
标题:
static的一个小问题,很苦恼
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修饰符,如果没有就不能编译通过,请问为什么会出现这种情况,求助下。。。
作者:
xieshuhua
时间:
2012-5-14 21:29
ss在引用的时候必须加()我想这只是格式的问题吧。
作者:
任睦强
时间:
2012-5-14 21:46
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() 后面这个括号 是表示 它是一个方法
作者:
王德南
时间:
2012-5-14 21:49
因为static方法不能直接调用非static方法。而main是static的,所以在ss()前面必须加上static
作者:
朱晓辉
时间:
2012-5-14 21:50
public static void main(String[] args) {
ss(); //这里没有创建类的对象,属于调用静态方法,静态方法必须使用static声明。故ss()方法必须使用static静态声明。
}
作者:
wangrenjie
时间:
2012-5-14 21:50
因为main方法是static的,静态的方法中只能调用静态的方法或者通过对象调用方法
作者:
wangrenjie
时间:
2012-5-14 21:51
main方法是处理器的入口方法,他本身没有指向的,要指向luck里的ss方法,只有2个方法,实例化对象或static。
你可以试下实例化
作者:
高云飞
时间:
2012-5-14 21:51
这样就可以了,new luck().ss();那方法ss()前边就不用加static了,因为你在静态方法里直接引用了一个非静态方法。静态方法在程序加载时候就在内存里了,而非静态方法不会存在,你用一个已经存在的main去调用还没有的ss当然不行了。
作者:
张亭
时间:
2012-5-14 21:51
因为主函数是static 的,static方法只能调用static方法,所以ss前面必须加static修饰符才能被主函数访问
作者:
黑马罗坚
时间:
2012-5-14 22:01
成员用static修饰表明该成员属于该类 是类成员 在类装载是被classload加载进方法区 ss()方法定义时头前没加static修饰符修饰的话代表该方法为成员方法 属于该类对象 不能在类集方法里直接调用只有该类对象才可以调用 而static void main()是类级方法被jvm加载时那时候还没有对象所有不能直接调用静态成员 2中解决方式 把成员修饰成静态(ss()方法修饰成静态方法也就是加static) 或者通过创建该类对象通过对象调用(new lock().ss();) 静态成员的作用率为该类 生存周期为类装载到类结束 成员的作用率为该对象 生存周期对象的创建 到对象变成垃圾也就是无引用指向该对象
作者:
xieshuhua
时间:
2012-5-14 22:12
没分了,全部给二楼了,但是下面的回答的也很好,谢谢你们了。
作者:
冯心程
时间:
2012-5-15 13:21
手慢 没回复上 我的分啊{:soso_e109:}
作者:
徐炯
时间:
2012-5-16 10:27
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出一个新类,在软件开发中会造成数据流失(新类里是没数据的)。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2