这里的静态,指以static关键字修饰的,包括类,方法,块,字段。
非静态,指没有用static 修饰的。
静态有一些特点:
1.全局唯一,任何一次的修改都是全局性的影响
2.只加载一次,优先于非静态
3.使用方式上不依赖于实例对象。
4.生命周期属于类级别,从JVM 加载开始到JVM卸载结束。
可参考 :http://blog.csdn.net/zhandoushi1982/article/details/8453522/。
关于静态内部类(嵌套类)和非静态内部类的区别,可参考:
http://www.jb51.net/article/74838.htm
(1)内部静态类不需要有指向外部类的引用。但非静态内部类需要持有对外部类的引用。
(2)非静态内部类能够访问外部类的静态和非静态成员。静态类不能访问外部类的非静态成员。他只能访问外部类的静态成员。
(3)一个非静态内部类不能脱离外部类实体被创建,一个非静态内部类可以访问外部类的数据和方法,因为他就在外部类里面。
/*下面程序演示如何在java中创建静态内部类和非静态内部类*/
classOuterClass{private static String msg = "GeeksForGeeks";//静态内部类
public static classNestedStaticClass{//静态内部类只能访问外部类的静态成员
public voidprintMessage() {//试着将msg改成非静态的,这将导致编译错误
System.out.println("Message from nested static class: " +msg);
}
}//非静态内部类
public classInnerClass{//不管是静态方法还是非静态方法都可以在非静态内部类中访问
public voiddisplay(){
System.out.println("Message from non-static nested class: "+msg);
}
}
}classMain
{//怎么创建静态内部类和非静态内部类的实例
public static voidmain(String args[]){//创建静态内部类的实例
OuterClass.NestedStaticClass printer = newOuterClass.NestedStaticClass();//创建静态内部类的非静态方法
printer.printMessage();//为了创建非静态内部类,我们需要外部类的实例
OuterClass outer = newOuterClass();
OuterClass.InnerClass inner= outer.newInnerClass();//调用非静态内部类的非静态方法
inner.display();//我们也可以结合以上步骤,一步创建的内部类实例
OuterClass.InnerClass innerObject = new OuterClass().newInnerClass();//同样我们现在可以调用内部类方法
innerObject.display();
}
}