java没有直接的静态类这种东西,一个类可以为static的情况只是他作为另一个类的成员,static表明他可以不用建立实例被访问而已,这样的内部类完全没有内部类的特点1 内部类可以访问所在外部类的成员变量和方法,而静态内部类却不能2 内部类可以使用Outter.this作为外部类引用,但静态内部类不能使用3 静态内部类就如同外部类的一个静态成员,他只能访问外部类的静态成员和静态方法4 在外部类外必须使用Outter.Inner外部类名和内部类名都要使用,楼上所说的不需要建立对象, 指的是不需要建立外部类实例, 比如BigOuter.Nested n = New BigOuter.Nested();
这个问题从俩个方面很好的就能够理解1、静态的特性静态是不需要建立对象而直接进被虚拟机放入方法区(三大区:栈内存、堆内存、方法区)2、类如何被使用类被使用的前提就是有已经被建立的对象 通过上面两点综合去理解静态类就是当程序一旦被执行,静态类直接被放入方法区,可以直接通过类名进行调用,而不需要建立类的对象。
在Java世界里,经常被提到静态这个概念,static作为静态成员变量和成员函数的修饰符,意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见。最近一个项目里频繁用到static修饰的内部类,再读了一下《Effective Java》才明白为什么会用static来修饰一个内部类也就是本文的中心——静态类。如果一个类要被声明为static的,只有一种情况,就是静态内部类。如果在外部类声明为static,程序会编译都不会过。在一番调查后个人总结出了3点关于内部类和静态内部类(俗称:内嵌类)1.静态内部类跟静态方法一样,只能访问静态的成员变量和方法,不能访问非静态的方法和属性,但是普通内部类可以访问任意外部类的成员变量和方法2.静态内部类可以声明普通成员变量和方法,而普通内部类不能声明static成员变量和方法。3.静态内部类可以单独初始化: Inner i = new Outer.Inner();普通内部类初始化:Outer o = new Outer();Inner i = o.new Inner();