面向对象进阶(static、单例、代码块、继承)

170 阅读2分钟

面向对象进阶(static、单例、代码块、继承)

静态关键字:static

static的作用、修饰成员变量的用法

  • 作用:

    • static是静态的意思,可以修饰成员变量,表示该成员变量只在内存中只存储一份,可以被共享访问、修改
  • 成员变量可以分为2类

    • 静态成员变量(有static修饰,属于类,内存中加载一次)
    public class User {
    	// 静态成员变量    
    	public static String onlineNumber= 161;
    }
    

    访问:类名.静态成员变量

    • 实例成员变量(无static修饰,存在于每个对象中)
    public class User {    
    	public static String onlineNumber= 161;    
    	// 实例成员变量    
    	private String name;    
    	private int age;
    }
    

    访问:对象.实例成员变量

static的注意事项总结[面试热点]

  • 静态方法只能访问静态的成员,不可以直接访问实例成员。
  • 实例方法可以访问静态的成员,也可以访问实例成员。
  • 静态方法中是不可以出现this关键字的。

static应用知识:代码块

  • 格式:static{}
  • 特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发、只执行一次
  • 使用场景:在类加载的时候做一些静态数据初始化的操作,以便后续使用。

static应用知识:单例

可以保证系统中,应用该模式的这个类永远只有一个实例,即一个类永远只能创建一个对象。

  • 饿汉单例模式

    • 在用类获取对象的时候,对象已经提前为你创建好了。

    • 设计步骤:

      • 定义一个类,把构造器私有
      • 定义一个静态变量存储一个对象
      /** a、定义一个单例类 */
      public class SingleInstance {    
      	/** c.定义一个静态变量存储一个对象即可 :属于类,与类一起加载一次 */    
      	public static SingleInstance instance = new SingleInstance ();    
      	/** b.单例必须私有构造器*/   
      	private SingleInstance (){       
      		System.out.println("创建了一个对象");    
      		}
      	}
      
  • 懒汉单例模式

    • 在真正需要该对象的时候,才去创建一个对象(延迟加载对象)。

    • 设计步骤:

      • 定义一个类,把构造器私有。
      • 定义一个静态变量存储一个对象。
      • 提供一个返回单例对象的方法
/** 定义一个单例类 */
class SingleInstance{    
	/** 定义一个静态变量存储一个对象即可 :属于类,与类一起加载一次 */    
	public static SingleInstance instance ; // null    
	/** 单例必须私有构造器*/    
	private SingleInstance(){}    
	/** 必须提供一个方法返回一个单例对象  */    
	public static SingleInstance getInstance(){
	        ...       
	        return ...;    
        }
    }