当前位置: 技术问答>java相关
静态方法的问题,我就是弄不懂,??????
来源: 互联网 发布时间:2015-01-15
本文导语: public class AutoInc { public static void main(String[] args) { int i = 1; prt("i : "+i ); prt("++i : " + ++i); // Pre-increment prt("i++ : " + i++); // Post-increment prt("i : " + i); prt("--i : " +...
public class AutoInc {
public static void main(String[] args) {
int i = 1;
prt("i : "+i );
prt("++i : " + ++i); // Pre-increment
prt("i++ : " + i++); // Post-increment
prt("i : " + i);
prt("--i : " + --i); // Pre-decrement
prt("i-- : " + i--); // Post-decrement
prt("i : " + i);
}
static void prt(String s) {
System.out.println(s);
}
} 如果将static void prt(String s) {的static去掉,编译时出现
can't make static reference to method void prt()
why???????
public static void main(String[] args) {
int i = 1;
prt("i : "+i );
prt("++i : " + ++i); // Pre-increment
prt("i++ : " + i++); // Post-increment
prt("i : " + i);
prt("--i : " + --i); // Pre-decrement
prt("i-- : " + i--); // Post-decrement
prt("i : " + i);
}
static void prt(String s) {
System.out.println(s);
}
} 如果将static void prt(String s) {的static去掉,编译时出现
can't make static reference to method void prt()
why???????
|
去掉static, prt 就成了class AutoInc 的成员函数,成员函数必须通过实例名来调用,比如:
new AutoInc ().prt(...)
而静态方法不需要实例化的对象 就可以调用了,他在类载入以后就可以用了
new AutoInc ().prt(...)
而静态方法不需要实例化的对象 就可以调用了,他在类载入以后就可以用了
|
静态方法内只能访问静态的方法或变量,因为main是静态的所以要求prt也是静态的。
因为静态方法不需要一个类的实例,所以只能访问静态的成员。
|
静态方法是对类而言的,它对所有类的实例来说是一样的:
1。它不能调用非静态方法和非静态成员变量。因为静态方法还没有实例化的对象的时候就
可以调用了,而非静态方法和非静态成员变量是对某个特定的实例来说的,而这时,实
例还没生成,所以不能调用了
2。但是非静态方法可以调用静态方法和静态成员变量。原因如上
1。它不能调用非静态方法和非静态成员变量。因为静态方法还没有实例化的对象的时候就
可以调用了,而非静态方法和非静态成员变量是对某个特定的实例来说的,而这时,实
例还没生成,所以不能调用了
2。但是非静态方法可以调用静态方法和静态成员变量。原因如上