static 应用知识——代码块、单例

1.代码块

在java类下,使用{}括起来的代码被称为代码块,定义在类中方法外。

代码块分为两种:

(1)静态代码块:

格式:static{}

特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发,只执行一次

使用场景:在类加载的时候做一些静态数据初始化的操作,以后便于使用

(2)构造代码块(使用较少):

格式:{}

特点:每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并且在构造器执行前执行(无static修饰,属于对象,每次构建对象时,都会触发一次执行。

使用场景:初始化实例资源

例如如下代码:

publiac class StaticText{
    public StaticText(){
         System.out.println("无参构造器被触发执行");
    }
    //实例代码块
    {
       System.out.println("实例代码块被触发执行");
    }
    public static void main(String[] args){
         StaticText s1=new StaticText();
         StaticText s2=new StaticText();
   }
}


//此代码执行结果是:
实例代码块被触发执行
无参构造器被触发执行
实例代码块被触发执行
无参构造器被触发执行      

案例:初始化一副牌

public class StaticText2{
    //1.定义一个静态的集合,这样这个集合只加载一次
    public static ArrayList<String> cards=new ArrayList<>();
    //2.在程序正常运行main方法前,把54张牌放进去,对其进行初始化
    static{
       // 因为元素类型确定了,个数也确定了,所以定义一个数组存储全部的点数
       String[] sizes={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
       //定义一个数组存储全部花色
       String[] colors={"♠️","❤️","♦️","♣"};
       //遍历点数
       for(int i=0;i<sizes.length;i++){
            //sizes[i]
            //遍历花色
            for(int j=0;j<colors.length:j++){
                //colors[j]
               String card=sizes[i]+colors[j];
               cards.add(card);
            }
        }
        //单独加入大小王
          cards.add("大🃏");
          cards.add("小🃏");
        System.out.println(cards);
    }

    
    public static void main(String[]args){
    }
}
 

2.单例

保证一个类只能创建一个对象

单例实现方式很多,这里写两种:

(1)饿汉单例模式:

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

设计步骤:

定义一个类,把构造器私有。

定义一个静态变量存储一个对象。

public class SingleInstance1{
    //2.饿汉单例是在获取对象前,对象已经提前创建好了,这个对象只能是一个,所以定义静态成员变量
    public static SingleInstance1 instance=new SingleInstance1();
    
    //1.把构造器私有化
    private SingleInstance1(){
    }
}
     

(2)懒汉单例模式:

在真正需要该对象的时候,才去创建一个对象

设计步骤:

定义一个类,把构造器私有化

定义一个静态变量存储一个对象

提供一个返回单例对象的方法

public class SingleInstance2{
    //2.定义一个静态的成员变量用于存储一个对象,只加载一次,只有一份(最好私有化)
    private static SingleInstance2 instance;
    //3.提供一个方法,用于返回单例对象
    public static SingleInstance2 getInstance(){
       if(instance==null){
          instance=new SingleInstance2();
       }
      return instance;
    }


    //1.私有化构造器
    privata SingleInstance2(){
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值