Java中非静态方法可以直接引用静态方法(变量)以及非静态方法(变量),静态方法也可以直接引用静态方法(变量),但是静态方法不能直接引用非静态方法(变量),需要先定义一个非静态方法(变量)的对象,然后用对象来引用该非静态方法(变量)。
例如:
/**
* java中包含主函数的类必须是公共类,一个文件中只能
* 有一个公共类,并且公共类名必须要和文件名相同
*/
public class A {
String x;
static String y="ping";
void a1Function()
{
System.out.println("a1Function");
}
static void a2Function()
{
System.out.println("a2Function");
}
public static void main(String[] args) {
// a1Function(); //错误,不能对类型 Second 中的非静态方法 a1Function()进行静态引用
A aa=new A();
aa.a1Function();//正确,利用定义非静态类的对象来引用非静态类
// System.out.println("x="+x);//错误,不能对非静态字段 x 进行静态引用
System.out.println("x="+aa.x);//正确
System.out.println("y="+y);//正确,可以直接引用静态变量y
/*
* 必须为B.z,上一行中因为是引用主类中的静态变量所以可以省略类名,直接引用y,也可写成A.y
*/
System.out.println("z="+B.z); //正确,可以直接引用B类中的静态变量z
// System.out.println("m="+B.m); //错误,不能对非静态字段 B.m 进行静态引用
B.b1Function();//正确
B bb=new B();
bb.b2Function();//正确
}
}
class B
{
static String z="zhou";
String m="wang";
static void b1Function()
{
System.out.println("b1Function");
}
void b2Function()
{
System.out.println("b2Function");
}
}
结论:
静态表示属于类,在类定义的同时它就已经存在了,所以可以直接拿来使用。而非静态的则要在用类定义对象之后,new一个空间给它才可以使用。