Java程序中我们经常用到static这个修饰符,可以用static来修饰类的成员变量和方法。当然 static是不允许用来修饰局部变量。
用static修饰以后,意味着这个方法或类被所有的实例共享。
用static来修饰符一个类不经常使用,但是看到有些类中经常用static来修饰符一个内部类,即静态内部类。

我们先来下面两个例子:

1:定义个普通类,加上static修饰符,

java 类里面的static java static class_修饰符

加上static 修饰符,编译不通过。

2:在一个类中定义两个内部类,一个用static修饰,一个类不用。看看调用的方式

java 类里面的static java static class_java_02

内部类中用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在修饰一个类,这个类只能是静态内部类,而内部类只要是一个类的内部使用,无需外部类资源,并且内部类可以单独创建的时候会考虑采用静态内部类的设计。