日期:2014-05-20  浏览次数:20733 次

静态和非静态方法使用问题
学习JAVA有几个月了,但是写程序的时候用是否使用静态方法还是不很了解。往往是先写非静态方法,然后因为程序提示要用静态方法,再改成静态方法。感觉在猜谜。
书上说的STATIC方法就象牧羊人角色,负责看护与其隶属的同一类型的实例群。有高人给点代码指点下么?

------解决方案--------------------
静态变量是和类相关的,在该类加载的时候,便载入虚拟机。和类相关不和具体的某个实例相关。也可以理解为该类所有实例共享的全局变量。调用时候直接用类名调用。
------解决方案--------------------
解释都在注释里,楼主自己看....
class Chinese {
static void sing() {
System.out.println("卓彬");
}

void singOurCountry() {
sing();
// 类中的成员方法也可以直接访问静态成员方法
}
}

public class TestChinese {
public static void main(String[] args) {
Chinese.sing();
// 上面的程序代码直接使用了"类名.成员"的格式
Chinese ch = new Chinese();
ch.sing();
// 上面的程序代码直接使用了"对象名.成员"的格式
ch.singOurCountry();
}
}
------解决方案--------------------
也就是说,如果是静态的方法,就可以直接使用"类名.方法名",而如果不是静态的话,就不可以这样用,只能先定义一个对象,然后用"对象.方法名",是这样的吗?
探讨
解释都在注释里,楼主自己看....
class Chinese {
static void sing() {
System.out.println("卓彬");
}

void singOurCountry() {
sing();
// 类中的成员方法也可以直接访问静态成员方法
}
}

public class TestChinese {
public static void main(String[] args) {
Chinese.sing();
// 上面的程序代码直接使用了"类名.成员"的格式
Chinese ch = new Chinese();
ch.sing();
// 上面的程序代码…

------解决方案--------------------
利用静态方法得一个单实例的设计模式,看能不能抛砖引玉
Java code
class A{
    private A(){}
    
    private static A instance = new A();
    
    public static A makeA(){
        return instance;
    }
}

------解决方案--------------------
public class Test{
private int nostatic;
private static int sstatic;
public void MyMethod(){
nostatic=2;//正确,非静态方法可以访问非静态成员
sstatic=3;//正确,非静态方法可以访问静态成员
System.out.println("我是非静态方法!nostatic="+nostatic+" sstatic="+sstatic);
}
public static void StaticMethod(){
// nostatic=4; 不正确,静态方法不可以访问非静态成员
sstatic=5;//正确,静态方法可以访问静态成员
System.out.println("我是静态方法!sstatic="+sstatic);

}

public static void main(String[]args){
  
Test test=new Test();
test.MyMethod();//静态方法直接用类名调用
Test.StaticMethod();//非静态方法要先把类实例化,用对象调用

}
 

}