class Ca
{
int a;
static int b;
public static void m1()
{
a=10;
b=10;
}
public void m2()
{
a=5;
b=5;
}
public static void m3()
{
【代码】//调用m1方法
【代码】//调用m2方法
}
}
class Cb
{
public static void main(String args[])
{
Ca s1=new Ca();
Ca s2=new Ca();
Ca.b=5;
s1.b=6;
s2.b=7;
System.out.println(Ca.b);
System.out.println(s1.b);
System.out.println(s2.b);
}
}
那两段代码我怎么打都是错。求教谢谢帮忙O(∩_∩)O哈!
其次public static void m3()
{
【代码】//调用m1方法
【代码】//调用m2方法
}这个里面永远不能调用非静态的m2方法
因为m3是静态的方法。
{
【代码】//调用m1方法
【代码】//调用m2方法
}
}你把m3定义成静态,静态方法的意思就是不用实例化一个对象,只要用类名.方法名就可以直接调用的方法(因为静态的东西在类加载的时候就会在内存中“存在”——可用)。
ok,我们来看,你调用m1方法没问题,m1是静态的,你调用它没问题,因为m1可以确保你调用他的时候在内存中存在可用。而你的m2方法不是静态的,也就是说他是实例方法,要调用一个实例方法需要先创建它们的对象才能用他们,你可以理解为要对象创建了,这个实例方法才会在内存中存在(其实是早就存在只是没对象创建它们是不可用的)。由于静态的东西M3是会先现在内存中存在然后供人使用,而非静态的m2,则没有对象创建就无法供人使用,于是这就会出现:“在静态里调用不能用的东西,因为这东西“不存在(其实是不能用)”,所以java做了这样的限制来避免出现这种情况,这个规则就是:在静态的上下文(方法)不能调用非静态的东西。你可以把非静态方法M2换成一个非静态的变量,如int i =2;这个i,这样更好理解:
无法在M3中使用i 是因为M3这个方法运行时i在内存中还没有分配内存空间(不存在)
class Ca {
static int a;
static int b;
public static void m1()
{
a=10;
b=10;
}
public void m2()
{
a=5;
b=5;
}
public static void m3()
{
//【代码】//调用m1方法
//【代码】//调用m2方法
}
}
public class Cb {
public static void main(String args[]) {
Ca s1=new Ca();
Ca s2=new Ca();
Ca.b=5;
s1.b=6;
s2.b=7;
System.out.println(Ca.b);
System.out.println(s1.b);
System.out.println(s2.b); }
}
好了,这中程序要细心,可能是你基础不是很扎实哦。
也就是说,静态的方法和属性在类被加载的时候就会被相对应的声明和初始化
!只要在程序中使用到了这个类,这个类的静态属性和方法就会被声明和初始化!和这个类的对象无关!
引用一个
每个对象对她的修改都是影响所有人的=。=