Java中的static关键字,可以修饰变量、类、代码块和方法
1、static关键字修饰变量
static int age = 1; // 静态变量 // 访问 对象.age 类名.age
2、static关键字修饰方法
1 /** 2 * 静态方法 3 */ 4 public static void SayHello() { 5 System.out.println("Hello world"); 6 }
3、static关键字修饰的静态代码块
1 /** 2 * 静态代码块,如果没有创建该对象,也会执行静态代码块 3 */ 4 static { 5 System.out.println("静态代码块"); 6 }
另外这里注意一下非静态代码块和静态代码块的区别?
静态代码块,如果没有创建该对象,也会执行静态代码块
如果创建对象,那么先执行静态代码块,再执行非静态代码
1 /** 2 * 如果创建对象,那么先执行静态代码块,再执行非静态代码 3 */ 4 5 { 6 System.out.println("非静态代码块"); 7 } 8 9 /** 10 * 静态代码块,如果没有创建该对象,也会执行静态代码块 11 */ 12 static { 13 System.out.println("静态代码块"); 14 }
4、static修饰的静态内部类
当Singleton类加载时,静态内部类SingletonHolder没有被加载到内存中,只有当调用getUniqueInstance,方法触发加载静态内部类
1 /** 2 * 3 */ 4 package common; 5 6 /** 7 * <p>Description:</p> 8 * 9 * @author Administrator 10 * @date 2019年1月7日下午12:59:02 11 * @version 1.0 12 */ 13 public class Singleton { 14 15 /** 16 * 声明为private避免调用默认构造方法创建对象 17 */ 18 private Singleton() { 19 20 } 21 22 /** 23 * 声明为 private 表明静态内部该类只能在该 Singleton 类中被访问 24 */ 25 private static class SingletonHolder { 26 private static final Singleton INSTANCE = new Singleton(); 27 } 28 29 public static Singleton getUniqueInstance() { 30 return SingletonHolder.INSTANCE; 31 } 32 33 public static void main(String[] args) { 34 // 当Singleton类加载时,静态内部类SingletonHolder没有被加载到内存中,只有当调用getUniqueInstance,方法触发加载 35 Singleton single = Singleton.getUniqueInstance(); 36 37 } 38 39 }