使用单例是为了像一些工具,不用去重复的new,而静态代码块,可以在类加载的时候就执行。

static块的执行发生在“初始化”的阶段。

public class T4 {static {//静态代码块System.out.println("Tom");}public static void hahah (){System.out.println("123");}public static void main(String[] args) {// TODO Auto-generated method stub//T4.hahah();
        }}

可以看出,控制台这里已经输出了

Tom

换一种玩法:

public class T4 {public static void main(String[] args) {// TODO Auto-generated method stub//T4.hahah();//MongoDbUntil.getDateName();//MongoDbUntil.getDateName();
        }}class T5{static {//静态代码块System.out.println("Tom");}public static void hahah (){System.out.println("123");}}

这里发现,就不会进行输出,也就是说,是从类被状态,或者说被调动的时候,才会触发这个静态代码块。

那这里就刚好可以和单例配合起来使用。

下面就用我的mongo的工具栏来展示吧。

package com.sun.util;import java.util.ArrayList;
import java.util.List;import org.bson.Document;import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;/*** @author  szy * @version 创建时间:2018-5-5 下午12:07:17* */
public class MongoDbUntil {private static String databaseName;private static  MongoClient mongoClientInstance;private static  MongoDatabase database;static{//库名databaseName = "test";try {mongoClientInstance = getInstance();database = mongoClientInstance.getDatabase(databaseName);System.out.println("MongoDatabase-1 inof is : "+database.getName());//表里表里的集合for (String name : database.listCollectionNames()) {System.out.println("test表里的集合有:"+name);}System.out.println("Connect to database successfully!");} catch (Exception e) {// TODO: handle exception
            e.printStackTrace();}}private static MongoClient getInstance(){if(mongoClientInstance == null){mongoClientInstance  = new MongoClient("localhost", 27017);}return mongoClientInstance;}public static String getDateName(){database = mongoClientInstance.getDatabase(databaseName);System.out.println("MongoDatabase-2 inof is : "+database.getName());return null;}/*** 插入一条mongo记录* @param coll*/public static void InsertMongoDataByOne(String CollName){//获得一个集合对象 MongoCollection<Document> coll = database.getCollection(CollName);//如果在集合中插入相同的_id,会报错  index: _id_ dup key: {Document document = new Document("_id", 2002).append("title", "MongoDB Insert Demo").append("description","database").append("likes", 30).append("by", "yiibai point").append("url", "http://www.yiibai.com/mongodb/");//再插入一条不指定id的,会自动分配一个_idDocument document2 = new Document("title", "MongoDB Insert Demo").append("description","database").append("likes", 30).append("by", "yiibai point").append("url", "http://www.yiibai.com/mongodb/");coll.insertOne(document2);//往集合对插入一体爱记录
        coll.insertOne(document);}/*** 多行插入* @param coll*/public static void InsertMongoDataByList(String CollName){//获得一个集合对象 MongoCollection<Document> coll = database.getCollection(CollName);//多行插入List<Document> documents = new ArrayList<Document>();Document a1 = new Document("title", "2018");Document a2 = new Document("title", "2019");documents.add(a1);documents.add(a2);coll.insertMany(documents);System.out.println("Document inserted successfully");}}

可以发现,静态代码块只会进入一次,而刚好那时候被初始化了。

静态代码块和单例混合相关推荐

  1. Java笔记017-类变量和类方法、理解main方法语法、代码块、单例设计模式、final关键字

    目录 面向对象编程(高级部分) 类变量和类方法 类变量-提出问题 传统方法解决 问题分析: 类变量快速入门 类变量内存布局 什么是类变量 如何定义类变量定义语法: 如何访问类变量 定义语法: 类变量使 ...

  2. 类变量类方法,main方法,代码块,单例设计模式,final,抽象类

    一.类变量和类方法 1.类变量 也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量. 1).定 ...

  3. 单例设计模式介绍||单例设计模式八种方式——1) 饿汉式(静态常量) 2) 饿汉式(静态代码块) 3) 懒汉式(线程不安全) 4) 懒汉式(线程安全,同步方法)

    单例模式 单例设计模式介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法). 比如Hibernate的 ...

  4. java 静态代码块 多线程,Java多线程编程笔记10:单例模式

    立即加载:"饿汉模式" 立即加载就是指使用类的时候已经将对象创建完毕,常见的实现方法就是直接new实例化.也就是在调用方法前,实例就被创建了.示例代码如下所示: class MyO ...

  5. java静态代码块和实例代码块

    一.静态代码块 1.什么是静态代码块? 用static修饰的代码块是静态代码块.它是在类加载时加载的,并且只会加载一次. 2.静态代码块的语法 static { java语句: java语句: } 3 ...

  6. java中静态代码块详解

    参考博客:https://blog.csdn.net/qq_36792191/article/details/103988565 1.静态代码块基本知识 **(1)静态代码块:**执行优先级高于非静态 ...

  7. java子类代码块_java中父类子类静态代码块、构造代码块执行顺序

    父类静态(代码块,变量赋值二者按顺序执行) 子类静态 父类构造代码块 父类构造方法 子类构造代码块 子类构造方法 普通方法在实列调用的时候执行,肯定位于上面之后了 //父类A public class ...

  8. 静态方法static,静态代码块

    为什么工具类中的方法不用实例方法做? 1.实例方法需要创建对象调用 2.此时用对象只是为了调用方法,这样只会浪费内存. 工具类定义时的其他要求: 由于工具里面都是静态方法,直接用类名即可访问,因此,工 ...

  9. CGB2005 JT7-8(文件 图片上传 uuid生成文件名 静态代码块,反向代理,Nginx,Host文件,tomact集群实现项目发布 ,nginx负载均衡种类)

    注意事项 1.京淘文件上传 文件上传api 京淘图片上传 利用静态代码块赋值 图片上传优化(动态赋值) uuid去掉横线 2.反向代理机制(正向反向代理说明) nginx学习 nginx实现反向代理 ...

最新文章

  1. Nat. Mach. Intell. | 生物医学关系抽取的机器学习新框架
  2. ipa包中图片进行了Compress之后的主要处理和作用
  3. (C++ STL)list的实现
  4. mysql mysql的所有查询语句和聚合函数(整理一下,忘记了可以随时看看)
  5. 浅析“字典--NSDirctionary”理论
  6. 拿 C# 搞函数式编程
  7. Linux下配置OpenLDAP服务记录
  8. matlab合成音乐原理,matlab 做音乐合成
  9. c++ list排序_STL之list
  10. FastSpring.NET V2.05 final 发布[集成Spring.net NHibernate Ajax]
  11. easyExcel 处理ExcelDataConvertException异常,获取异常的数据行列值等信息
  12. Labelimg讲解
  13. 摸鱼:窗口最小化等快捷键
  14. 删除win10自带微软中文输入法
  15. mfc上位机网络接收图片并显示_基于UDS on CAN的BootLoader上位机
  16. 数据脱敏的场景与价值【总结】
  17. js 获得明天0点时间戳_开群通知!昨日提示厦门信达、申通地铁、国林科技、隆盛科技全部涨停!明天这只龙头股有望继续涨停!...
  18. Linux之阻塞与非阻塞IO
  19. html中如何把一个div放到页面底部,html – 如何将DIV锚定到页面的底部?
  20. 基于规则的中文地名识别系统的设计与实现

热门文章

  1. Chrome 打包扩展程序
  2. java怎么看具体被挂起的线程_Java知多少(65)线程的挂起、恢复和终止
  3. 闪退没由报错_使命召唤:(cod16)出现的闪退问题以及解决办法
  4. linux+arm+移除X11,关于ARM GTK/X11的问题,懂的指点一下
  5. linux编程排序,Linux下简单的c编程——选择法排序
  6. linux tar压缩权限,LINUX 文件/组/帮助/权限/文件压缩/管道
  7. project facets中没有dynamic_C++强制类型转换操作符 dynamic_cast
  8. vue中指令的编译过程
  9. vfp生成菜单时文件不存在_如何在VFP项目中创建菜单
  10. php负载均衡如何获得真实ip,nginx负载均衡后端RS中获取真实ip