static关键字:
static修饰类变量时,变量称为静态变量(类变量),它不属于任何对象
static修饰类方法时,方法称为静态方法,静态方法中只能使用调用静态方法或静态变量
非静态方法可以调用静态方法或静态变量,静态方法不能调用非静态方法或非静态变量
static静态语句块,在类被加载时执行,且只会执行一次,优先于构造方法的执行
单例模式:
类只有一个实例对象
自己创建对象(外部不能创建)
身外部提供已创建实例
//StaticTest.java
public class StaticTest { public static void main(String[]args) { Account.number1++; //静态方法通过类调用(也可以通过对象调用,但一般不使用对象调用,那样没啥意义) Account.showNumber1(); Account acc=new Account(); //非静态方法只能通过对象调用 acc.showNumber2(); SingleTon singleTon=SingleTon.getInstance(); singleTon.show(); singleTon=SingleTon.getInstance(); singleTon.show(); } } //静态变量、静态方法示例 class Account { public Account(){ System.out.println("构造方法"); } public static int number1=1;//静态变量 public int number2=5; static{//静态语句块 System.out.println("静态语句块"); } public static void showNumber1(){//静态方法 System.out.println(number1); } public void showNumber2(){//普通成员方法 System.out.println(number2); } } //单例类 class SingleTon { //private static SingleTon instance=new SingleTon();//饿汉式,开始就产生对象 private static SingleTon instance=null;//懒汉式,调用才产生 public static SingleTon getInstance() { if(instance == null) instance=new SingleTon();//懒汉式,调用才产生 return instance; } //构造函数私有,外部不能使用new创建类对象 private SingleTon() { System.out.println("SingleTon私有构造函数"); } public void show(){ System.out.println("这里是单例类成员方法"); } }
执行效果: