package project7;
//静态和非静态方法调用本类与非本类的静态和非静态的规则
public class Static {
//定义本类静态变量
public static int value=10;
//定义本类非静态变量
public int var=20;
//定义静态方法
public static void StaticFun3() {
//这是待调用的静态方法
}
public static void StaticFun1() {
//静态方法调用本类静态方法或变量
//直接调用方法或者变量名
//思考:在同一个类中,不用再根据类名去找到这个静态量
StaticFun3();
int a=value;
//静态方法调用本类非静态方法或变量
//通过类的实例名调用
Static son1=new Static();
son1.StaticFun4();
int b=son1.value;
//静态方法调用非本类静态方法或变量
//通过类名调用
//思考:正是因为静态变量永远只有一个内存空间,所以在调用时,不需要再创建类的实例,
//可以直接使用类名调用
Static2.Fun5();
int x=Static2.m;
//静态方法调用非本类非静态方法或变量
//通过实例调用
//总结:静态方法在调用非静态量时,必须先创建实例。再根据实例名去调用这个非静态量。
//创建的实例类似桥梁的作用
Static2 son2=new Static2();
son2.Fun6();
int y=son2.n;
}
//定义非静态方法
public void StaticFun4() {
//待调用的非静态方法
}
public void StaticFun2() {
//非静态方法
//非静态方法调用本类静态量时,通过类名或者直接调用都行
int i=value;
Static.StaticFun3();//这是本类的一个静态方法
StaticFun3();
//非静态方法调用本类非静态量时,直接调用,不能再加上本类名
int j=var;//var是本类非静态量
//Static.StaticFun4();//这是本类的一个非静态方法,这里通过类名调用会报错
//思考:可能是因为通过类名调用不了非静态量,只能直接调用
StaticFun4();
//非静态方法调用非本类静态时,通过类名调用
//静态真是个好东西,就像对你不离不弃的人
int k=Static2.m;
Static2.Fun5();
//非静态方法调用非本类非静态量时,通过实例调用
//非静态量有点行踪不定,必须通过实例来找到它
Static2 son3=new Static2();
int p=son3.n;
son3.Fun6();
}
}
Static2类的代码如下:
package project7;
//创建非本类静态/非静态属性/方法
public class Static2 {
//创建静态变量,静态方法
public static int m=24;
public static void Fun5() {
//待调用的非本类静态方法
}
//创建非静态变量,非静态方法
public int n=28;
public void Fun6() {
//待调用的非本类非静态方法
}
}