静态方法和静态变量是属于某一个类,而不属于类的对象。
class Point
{
int x,y;
static void output()
{
System.out.println("output() called");
}
public static void main(String[] args)
{
Point.output();
}
}
{
int x,y;
static void output()
{
System.out.println("output() called");
}
public static void main(String[] args)
{
Point.output();
}
}
这个程序是可以编译过的;
因此
静态方法和静态变量的引用直接通过类名引用。
在静态方法中不能调用非静态的方法和引用非静态的成员变量。反之,则可以。
可以用类的对象obj去调用静态的方法method(),如:obj.method()。
虽然静态方法和非静态实例化方法在内存中都是只有1份拷贝,但是他们是不同的。
class Point
{
int x,y;
static int z;
final double PI;
Point(int a,int b)
{
PI=3.1415926;
x=a;
y=b;
}
{
int x,y;
static int z;
final double PI;
Point(int a,int b)
{
PI=3.1415926;
x=a;
y=b;
}
...
}
正确的,因为会调用构造函数
class Point
{
int x,y;
static int z;
static final double PI;
Point(int a,int b)
{
PI=3.1415926;
x=a;
y=b;
}
{
int x,y;
static int z;
static final double PI;
Point(int a,int b)
{
PI=3.1415926;
x=a;
y=b;
}
...
}
错误的,必须
class Point
{
int x,y;
static int z;
static final double PI=3.1415926;
{
int x,y;
static int z;
static final double PI=3.1415926;
Point(int a,int b)
{
x=a;
y=b;
}
{
x=a;
y=b;
}
...
}
因为不属于对象,只属于类