大侠进来看一个类和实例的例子
我对类变量,类方法,实例变量,实例方法之间的引用理解有限,大侠们看一下我这个例子哪个地方欠妥?谁能指点一下下?感激不尽
//有关类变量,类方法,实例变量,实例方法的调用例子
public class A{
int a=1;
static int b=2;
void m1(){//实例方法m1,可以直接调用类变量b和实例变量a
System.out.println(a+ " "+b);
}
static void m2(){//类方法m2,可以直接调用类变量b,用实例引用实例变量s.a
A s=new A();
System.out.println(s.a+ " "+b);
}
void m3(){//实例方法m3,可以直接调用类方法m2和实例方法m1
m1();
m2();
}
static void m4(){//类方法m4,可以直接调用类方法m2,用实例引用实例方法s.m1
A s=new A();
s.m1();
m2();
}
public static void main(String[] args){
A s=new A();
s.m1();
s.m2();
s.m3();
s.m4();
}
}
------解决方案--------------------类方法不用声明为静态的,声明为静态的是为了高效的利用内存,以及公共的变量的地址引用,不是象你这样的即声明为Static 又还要用类对象去调用是不科学的!!!!
------解决方案--------------------你写的都是静态方法,除了m1以外
你可以指定为动态方法的嘛!然后用this来引用咯
------解决方案--------------------如果是static 类型的.如果两个类在同一个包里(你没学可以不管这句话),一般情况下来说不new 就可以直接调用
------解决方案--------------------可以把static理解成全局的(也就是一直存在的:确切的说是伴随着类的存在)
new出来的实例不是全局的;
关系:
全局的可以调用全局的,非全局的可以调用非全局的
非全局的可以可以调用全局的,全局的不可以调用非全局的(你说的s.a是s调用了a,属于非全局的调用非全局的)
------解决方案--------------------关系:
1.全局的可以调用全局的,非全局的可以调用非全局的
2.非全局的可以可以调用全局的,全局的不可以调用非全局的。
一般只使用关系1, 尽量别用2。
如,你的例子中,A.m2(),s.m2()都是合法的,但是后者容易使人产生歧义