Java程序中我们经常用到static这个修饰符,可以用static来修饰类的成员变量和方法。当然 static是不允许用来修饰局部变量。
用static修饰以后,意味着这个方法或类被所有的实例共享。
用static来修饰符一个类不经常使用,但是看到有些类中经常用static来修饰符一个内部类,即静态内部类。
我们先来下面两个例子:
1:定义个普通类,加上static修饰符,
加上static 修饰符,编译不通过。
2:在一个类中定义两个内部类,一个用static修饰,一个类不用。看看调用的方式
内部类中用static来修饰一个类ClassB,在调用时很方便,而不用static修饰的类ClassA,正确的调用比较麻烦,如果直接new 会出现编译时的错误。
3:还发现了一个问题,居然static修饰的方法和属性可以用this来访问,请看下面例子。
1 public class StaticTest {
2 public static void main(String[] args) {
3 new StaticTest().methodA();
4 }
5
6 private void methodA() {
7 int value = 3;
8
9 System.out.println(this.value);
10 this.methodB();
11
12 System.out.println(StaticTest.value);
13 StaticTest.methodB();
14 }
15
16 static int value = 1;
17 static void methodB() {
18 System.out.println("methodB...");
19 }
20 }
虽然有警告提示,但是还是输入了正确的结果:
33
methodB...
33
methodB...
之前一直以为static修饰的方法和属性只能通过类名来访问!!!
static在修饰一个类,这个类只能是静态内部类,而内部类只要是一个类的内部使用,无需外部类资源,并且内部类可以单独创建的时候会考虑采用静态内部类的设计。