java中有不少的关键字,这些关键字在面试的时候仍是在编写的时候的使用以及原理的了解都会显示出一个开发人员的技术水平。
static做为java中的关键字,能够修饰变量,方法,类,代码块,还有一个被忽略的功能就是静态导包。
static修饰变量就是常常据说的静态变量,这个变量不属于一个对象,属于一个类,在类加载的时候就被分配了内存。在内存中只有一个复制。调用方法也只能是Class.变量名,实力变量(非static修饰的变量)存在多个复制,可是须要注意的事不能再方法体中定义一个静态变量html
static修饰方法代表这个方法属于一个类,若是没有被修饰,则说明这个方法就是对象的方法。注意的是在static方法中不能使用this和super关键字(有可能调用这个方法的时候,类中的对象尚未被建立出来)。静态方法最重要的一个是实现一个单例。然而单例又分为饿汉式和懒汉式,下面分别来展现两种单例模式:java
1:饿汉式(在尚未调用的时候就建立)面试
public class SingleTonDemo2 { private static SingleTonDemo2 instance=new SingleTonDemo2(); private static SingleTonDemo2 getInstance(){ return instance; } }
2:饱汉式(在调用的时候在new对象)this
public class SingleTonDemo { private static SingleTonDemo instance=null; public SingleTonDemo(){}; public static SingleTonDemo getInstance(){ instance=new SingleTonDemo(); return instance; } }
静态代码块是独立于静态方法和静态变量的,通常的做用就是给静态变量赋值,静态代码块的执行时间是当类被加载后就执行,若是有多个代码块,则会按照前后顺序执行。好比下面的静态代码块:code
private static int a; static{ a=4;}
静态内部类通常是指被static修饰的内部类,通常能够作初始化变量的值,和初始化内存的一些值。静态内部内不能定义的和实力类相同的名字,并且是在外部类实例化后在去实例化内部类。这里须要注意他的调用方式。以下:htm
public class StaticInnerClass { private static int a=4; static class innerClass{ void printNum(){ System.out.println(a); }} public static void main(String[] args) { StaticInnerClass.innerClass innerclass= new StaticInnerClass.innerClass(); innerclass.printNum(); }}
使用import static 代替import