静态代码块和单例混合
使用单例是为了像一些工具,不用去重复的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");}}
可以发现,静态代码块只会进入一次,而刚好那时候被初始化了。
静态代码块和单例混合相关推荐
- Java笔记017-类变量和类方法、理解main方法语法、代码块、单例设计模式、final关键字
目录 面向对象编程(高级部分) 类变量和类方法 类变量-提出问题 传统方法解决 问题分析: 类变量快速入门 类变量内存布局 什么是类变量 如何定义类变量定义语法: 如何访问类变量 定义语法: 类变量使 ...
- 类变量类方法,main方法,代码块,单例设计模式,final,抽象类
一.类变量和类方法 1.类变量 也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量. 1).定 ...
- 单例设计模式介绍||单例设计模式八种方式——1) 饿汉式(静态常量) 2) 饿汉式(静态代码块) 3) 懒汉式(线程不安全) 4) 懒汉式(线程安全,同步方法)
单例模式 单例设计模式介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法). 比如Hibernate的 ...
- java 静态代码块 多线程,Java多线程编程笔记10:单例模式
立即加载:"饿汉模式" 立即加载就是指使用类的时候已经将对象创建完毕,常见的实现方法就是直接new实例化.也就是在调用方法前,实例就被创建了.示例代码如下所示: class MyO ...
- java静态代码块和实例代码块
一.静态代码块 1.什么是静态代码块? 用static修饰的代码块是静态代码块.它是在类加载时加载的,并且只会加载一次. 2.静态代码块的语法 static { java语句: java语句: } 3 ...
- java中静态代码块详解
参考博客:https://blog.csdn.net/qq_36792191/article/details/103988565 1.静态代码块基本知识 **(1)静态代码块:**执行优先级高于非静态 ...
- java子类代码块_java中父类子类静态代码块、构造代码块执行顺序
父类静态(代码块,变量赋值二者按顺序执行) 子类静态 父类构造代码块 父类构造方法 子类构造代码块 子类构造方法 普通方法在实列调用的时候执行,肯定位于上面之后了 //父类A public class ...
- 静态方法static,静态代码块
为什么工具类中的方法不用实例方法做? 1.实例方法需要创建对象调用 2.此时用对象只是为了调用方法,这样只会浪费内存. 工具类定义时的其他要求: 由于工具里面都是静态方法,直接用类名即可访问,因此,工 ...
- CGB2005 JT7-8(文件 图片上传 uuid生成文件名 静态代码块,反向代理,Nginx,Host文件,tomact集群实现项目发布 ,nginx负载均衡种类)
注意事项 1.京淘文件上传 文件上传api 京淘图片上传 利用静态代码块赋值 图片上传优化(动态赋值) uuid去掉横线 2.反向代理机制(正向反向代理说明) nginx学习 nginx实现反向代理 ...
最新文章
- Nat. Mach. Intell. | 生物医学关系抽取的机器学习新框架
- ipa包中图片进行了Compress之后的主要处理和作用
- (C++ STL)list的实现
- mysql mysql的所有查询语句和聚合函数(整理一下,忘记了可以随时看看)
- 浅析“字典--NSDirctionary”理论
- 拿 C# 搞函数式编程
- Linux下配置OpenLDAP服务记录
- matlab合成音乐原理,matlab 做音乐合成
- c++ list排序_STL之list
- FastSpring.NET V2.05 final 发布[集成Spring.net NHibernate Ajax]
- easyExcel 处理ExcelDataConvertException异常,获取异常的数据行列值等信息
- Labelimg讲解
- 摸鱼:窗口最小化等快捷键
- 删除win10自带微软中文输入法
- mfc上位机网络接收图片并显示_基于UDS on CAN的BootLoader上位机
- 数据脱敏的场景与价值【总结】
- js 获得明天0点时间戳_开群通知!昨日提示厦门信达、申通地铁、国林科技、隆盛科技全部涨停!明天这只龙头股有望继续涨停!...
- Linux之阻塞与非阻塞IO
- html中如何把一个div放到页面底部,html – 如何将DIV锚定到页面的底部?
- 基于规则的中文地名识别系统的设计与实现
热门文章
- Chrome 打包扩展程序
- java怎么看具体被挂起的线程_Java知多少(65)线程的挂起、恢复和终止
- 闪退没由报错_使命召唤:(cod16)出现的闪退问题以及解决办法
- linux+arm+移除X11,关于ARM GTK/X11的问题,懂的指点一下
- linux编程排序,Linux下简单的c编程——选择法排序
- linux tar压缩权限,LINUX 文件/组/帮助/权限/文件压缩/管道
- project facets中没有dynamic_C++强制类型转换操作符 dynamic_cast
- vue中指令的编译过程
- vfp生成菜单时文件不存在_如何在VFP项目中创建菜单
- php负载均衡如何获得真实ip,nginx负载均衡后端RS中获取真实ip