static-静态成员、代码块、单例设计模式

面向对象所需要的知识

 static

 static是静态变量,可以修饰成员变量、成员方法。

使用方法:类名.类变量,对象.类变量。

成员变量的执行原理

类变量:属于类,与类一起加载一次,在内存中只有一份,可以 被类和类的对象所有。

成员变量:属于对象,每个对象都有一份,只能用对象访问 

使用场景 

如果某个数据只需要一份,且希望能够被共享(访问、修改),则数据可以定义成类变量来记录。 

成员方法的执行原理

类方法可以通过对象和类访问,而实例方法只能通过对象访问。

使用场景

作为工具类使用

工具类:工具类中的方法都是一些类方法,每个方法都是用来完成一个功能的,工具类是给开发人员共同使用的。

好处:提高了代码复用;调用方便,提高了开发效率。

为什么工具类中的方法要用类方法,而不用实例方法
  • 实例方法需要创建对象来调用,此时对象知识为了调用方法,对象占内存,这样会浪费内存。
  • 类方法,直接用类名调用即可,调用方便,可以节省内存。
  • 工具类没有创建对象的需求,建议将工具类的构造器进行私有。

static的注意事项

  1. 类方法中可以直接访问类的成员,不可以直接访问实例成员,因为实例成员属于对象。
  2. 实例方法中可以直接类的成员和实例成员。
  3. 实例方法中可以出现this关键字,类方法中不可以出现this关键字,因为this是要获得当前对象的

 代码块

  •  代码块是类的5大成分之一(成员变量、构造器、方法、代码块、内部类)。

代码块分为两种   

  • 静态代码块
  1. 格式:  static{}
  2. 特点:类加载是自动执行,由于类只会加载一次,所以静态代码块也只会执行一次
  3. 作用:完成类的初始化,例如:对类变量的初始化赋值

如下图

Tips :如何分页显示文件--右键点击需要分页的文件名,选择split vertically或者Split Horizontally就可以同时显示两个页面啦

  • 实例代码块
  1. 格式:{}
  2. 特点:每次穿管对象是,执行实例代码块,并在构造器前执行
  3. 作用:和构造器一样,都是来完成对象的初始化的,例如:对实例变量的初始化赋值。

static的应用知识——单例设计模式 

什么是设计模式 ?

单例设计模式
  •  确保一个类只有一个对象

 1.饿汉式单例模式

   写法

  •  把类的构造器私有。
  • 定义一个类变量记住类的一个对象。
  • 定义一个类方法,返回对象。

代码示例

package com.zz.staticSingleInstance;

public class A {
    //单例三部曲 ,这样就可以实现单例模式

    //2.定义一个类变量记住类的一个对象
    private static  A a = new A();

    //1.必须私有类的构造器
    private A(){

    }

    //3.定义一个类方法返回类的对象
    public static A getObject(){
        return a;
    }
}

 测试类

package com.zz.staticSingleInstance;

public class Test {
    public static void main(String args[]){
        A a1 = A.getObject();
        A a2 = A.getObject();

        System.out.println(a1);
        System.out.println(a2);
    }
}

执行结果: 

 应用场景

 如任务管理器,可以避免浪费内存。

2.懒汉式单例设计模式

  •  拿对象时,才开始创建对象

 写法

  • 把类的构造器私有
  • 定义一个类变量用于存储对象
  • 提供一个类方法,保证返回的是同一个对象

 代码实现

package com.zz.staticSingleInstance;

public class B {
    //懒汉式单例设计模式
    //2.定义一个类变量来存储类的一个对象
    private static B b;

    //1.将构造器私有
    private B(){
    }

    //3.定义一个类方法,保证第一次调用才创建一个对象,返回的是同一个对象
    public static B getInstance(){
        if(b == null){
            b = new B();
            System.out.println("第一次创建对象");
        }
        return b;
    }
}

测试

package com.zz.staticSingleInstance;

public class Test2 {
    public static void main(String args[]){
        B b1 = B.getInstance();
        B b2 = B.getInstance();
        System.out.println(b1 == b2);
    }
}

 结果

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值