static修饰符能修饰内部类,方法,变量,代码块。
静态 成员意味着该成员属于类级,而不依赖于类的实例,也不依赖于任何一个类的成员,可以不通过创建类的实例来使用静态成员。
静态变量在类被加载入时初始化,一个类只有一个静态变量的内存空间,而不会依赖于对象再次分配空间。局部变量不能被声明为静态变量。
静态方法只能访问静态变量(静态方法没有this变量)。静态方法只能被重写成静态的,不能被重写成非静态的。非静态方法不能重写成静态的。
例子:
以下为没有使用静态方法的:
public class d
{
public static void main(String args[])
{
Child c=new Child();
c.doStuff();
Parent p=new Parent();
p.doStuff();
p=c;
p.doStuff();
Parent a=new Child();
a.doStuff();
a.x=11;
a.doStuff();
p.doStuff();
Parent b=new Parent();
b.doStuff();
}
}
class Parent
{
Parent(){System.out.println("Parent init~~~");}
int x=100;
public void doStuff()
{
System.out.println("Parent~!~!~");
System.out.println(x);
}
}
class Child extends Parent
{
Child(){System.out.println("Child init~~~");}
int x=200;
public void doStuff()
{
System.out.println("Child~!~!~");
System.out.println(x);
}
}
输出结果为:
Parent init~~~
Child init~~~
Child~!~!~
200
Parent init~~~
Parent~!~!~
100
Child~!~!~
200
Parent init~~~
Child init~~~
Child~!~!~
200
Child~!~!~
200
Child~!~!~
200
Parent init~~~
Parent~!~!~
100
而当使用静态方法时:
public class d
{
public static void main(String args[])
{
Child c=new Child();
c.doStuff();
Parent p=new Parent();
p.doStuff();
p=c;
p.doStuff();
Parent a=new Child();
a.doStuff();
a.x=11;
a.doStuff();
p.doStuff();
Parent b=new Parent();
b.doStuff();
}
}
class Parent
{
Parent(){System.out.println("Parent init~~~");}
static int x=100;
public static void doStuff()
{
System.out.println("Parent~!~!~");
System.out.println(x);
}
}
class Child extends Parent
{
Child(){System.out.println("Child init~~~");}
static int x=200;
public static void doStuff()
{
System.out.println("Child~!~!~");
System.out.println(x);
}
}
输出结果为:
Parent init~~~
Child init~~~
Child~!~!~
200
Parent init~~~
Parent~!~!~
100
Parent~!~!~
100
Parent init~~~
Child init~~~
Parent~!~!~
100
Parent~!~!~
11
Parent~!~!~
11
Parent init~~~
Parent~!~!~
11