单例模式详解及java常用类

【单例模式】

确保某一个类,只能产生一个实例。

设计思路:

====将构造函数私有化,确保类外部,不能使用new关键字自行创建对象。

====在类内部实例化一个对象,并通过静态方法返回。

(1)饿汉式单例模式

优点:线程安全

缺点:在类加载的时候,就实例化对象,提前占用系统资源

 1 class Dog{
 2
 3     private Dog(){
 4
 5         System.out.println("小蠢狗");
 6     }
 7
 8     private static Dog cutedog=new Dog();
 9
10     public static Dog getInstanca(){
11         return cutedog;
12     }
13
14 }

(2.)懒汉式单例模式:

优点:解决了饿汉式单例,一加载就提前占用资源的问题。

缺点:线程不安全

 1 class Dog{
 2
 3     private Dog(){
 4
 5         System.out.println("小蠢狗");
 6     }
 7
 8     private static Dog cutedog=null;
 9
10     public static Dog getInstanca(){
11         if (cutedog==null) {
12             cutedog=new Dog();
13         }
14         return cutedog;
15     }
16
17 }

(3.)线程锁懒汉式模式

通俗来说,就是在懒汉式单例模式的方法上加锁

synchronized:将一个方法或者代码块进行加锁,同一时间只允许一个线程访问

使用同步块对方法进行加锁,确保懒汉式单例,可以线程安全

缺点:效率低下

 1 class Dog{
 2
 3     private Dog(){
 4
 5         System.out.println("小蠢狗");
 6     }
 7
 8     private static Dog cutedog=null;
 9
10     public static synchronized Dog getInstanca(){
11         if (cutedog==null) {
12             cutedog=new Dog();
13         }
14         return cutedog;
15     }
16
17 }

(4.)双重加锁懒汉模式

只有第一次Dog为null时,才进行线程锁,当后续Dog不为null时,说明第一次已经赋值了,·产生了一个实例,就无需线程锁,可以允许多个线程同时拿走dog

class Dog{

    private Dog(){

        System.out.println("小蠢狗");
    }

    private static Dog cutedog=null;

    public static synchronized Dog getInstanca(){
        if (cutedog==null) {
            synchronized (Dog.class) {
                if (cutedog==null) {
                    cutedog=new Dog();
                }
            }
        }
        return cutedog;
    }

}

(5.)静态内部类实现单例

优点:解决了饿汉式提前占用资源的问题,解决了懒汉式线程不安全的问题,静态内部类只有当被调用的时候才开始首次被加载。

 1 class Dog{
 2
 3     private Dog(){
 4
 5         System.out.println("小蠢狗");
 6     }
 7
 8     private static class KIttyDod{
 9         private static Dog cutedog=new Dog();
10     }
11     public static Dog getInstance(){
12         return KIttyDod.cutedog;
13     }
14
15 }

【Math】

;?Math位于Java.lang包中

(1.)Math.abs(); 求绝对值

(2.)Math.cbrt(); 求立方根

(3.)Math..sprt();求平方根

(4.)Math.max/min(double1,double2); 返回两个值中最大最小值

(5.)Math.pow(a,b); 求a的b次方

(6.)Math.floor();返回小于指定浮点数的一个整数,返回的是double类型,例如10.0

Math.ceil();------大于---------

(6.)Math.round();四舍五入,返回一个整数类型,如果传入double,返回long,传入float,返回int

(7.)Math.rint();返回最接近参数的整数,如果10.5与10和11同时接近,返回偶数

(8.)Math.random();返回[0.1,1.0)之间的double随机值

【求一个数保留几位小数】

double a=23.22122222;

double b=Math.round(a*Math.pow(10, 3))/Math.pow(10, 3);

System.out.println(b);

【Date】

/**实例化

* 空参构造,默认取到当前时间

*/

Date date=new Date();

Date d=new Date();

/**

* 传入一个long类型的时间戳,取到指定时间。

* date.getTime(); 取到一个时间的时间戳,从0时区,1970年1月1日0:0:0到当前时间毫秒数。

*/

System.out.println(d);

(1.)equals();比对两个时间是否相等

(2.)a.before(b); 检测一个时间是不是在制定时间之前

after(): --------------------------------------之后

(3.)a.compare to(b); 前面>参数 返回1 前面<小于参数,返回-1 相等,返回0

(4.)setTime();传入一个长整型(时间戳),重新设置时间

(5.)toString();格式化日期转义格式yyyy-mm-dd。

【SimpleDateFormat】

对日期格式进行实例化。

实例化对象时,传入格式化参数,用字母代表对应部分。

*  字母  日期或时间元素  表示  示例

* y  年  Year  1996; 96

* M  年中的月份  Month  July; Jul; 07

* d  月份中的天数  Number  10

* E  星期中的天数  Text  Tuesday; Tue

* H  一天中的小时数(0-23)  Number  0

* h  am/pm 中的小时数(1-12)  Number  12

* m  小时中的分钟数  Number  30

* s  分钟中的秒数  Number  55

(1.)format();用于传人一个Date类型的参数,并返回格式化之后的字符串

Date date=new Date();

SimpleDateFormat sf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss E" );

String s=sf.format(date);

System.out.println(s);

(2.)sf.parse("2018年04月13日 14:08:15 星期五");将字符串格式的时间,转成Date类型,要求传入的字符串格式,必须与实例化时的模式,保持一致。

(3.)toPattern();返回当前格式化的模式字符串。

【Calendar日历类】

Calendar ca=Calendar.getInstance();

(1.)Calendar日历类是一个抽象类,不能直接通过new拿到对象,必须使用Calendar.getInstance();拿到一个Calendar日历类对象

(2.)ca.getTime(); 返回一个日期对象

(3.)ca.add(int field, int amount) ; 根据日历的规则,将指定的时间量添加或减去给定的日历字段。

【Random随机数类】

取随机数,有两种构造:

--------------空参构造------------

Random ran=new Random();

--------------传入一个种子数--------只要种子数相同,那么在相同次数取到的随机数肯定相同,这是伪随机数。

Random ran=new Random(100);

Random ran=new Random(System.currentTimeMillis());

System.currentTimeMillis();拿到当前时间戳,这样就是取随机数了。

(1.)nextInt(); 随机获得一个整数

(2.)nextInt(n); 随机获得从0到n随机数,含0不含n

随机生成两位随机数: System.out.println(ran.nextInt(90)+10);

原文地址:https://www.cnblogs.com/cuteboy/p/8848088.html

时间: 2024-11-05 20:16:17

单例模式详解及java常用类的相关文章

9种Java单例模式详解(推荐)

单例模式的特点 一个类只允许产生一个实例化对象. 单例类构造方法私有化,不允许外部创建对象. 单例类向外提供静态方法,调用方法返回内部创建的实例化对象.  懒汉式(线程不安全) 其主要表现在单例类在外部需要创建实例化对象时再进行实例化,进而达到Lazy Loading 的效果. 通过静态方法 getSingleton() 和private 权限构造方法为创建一个实例化对象提供唯一的途径. 不足:未考虑到多线程的情况下可能会存在多个访问者同时访问,发生构造出多个对象的问题,所以在多线程下不可用这种

事件驱动模型实例详解(Java篇)

或许每个软件从业者都有从学习控制台应用程序到学习可视化编程的转变过程,控制台应用程序的优点在于可以方便的练习某个语言的语法和开发习惯(如.net和java),而可视化编程的学习又可以非常方便开发出各类人机对话界面(HMI).可视化编程或许是一个初学者开始对软件感兴趣的开始,也可能是一个软件学习的里程碑点,因为我们可以使用各类软件集成开发环境(IDE)方便的在现成的界面窗口上拖放各类组件(Component),这类组件包括我们常见的按钮(Button),单选按钮(Radio Button),复选框

各种Notification详解,含工具类

                                                                 昨天一天只写了两篇文章,效率超低.追其原因呢,其实我一直在研究notification的实现方式,今天研究完了给大家分享一下.本来想写个工具类来封装一下代码的,但是我发现notification的个性化元素太多了,做成一个方法的话参数又多的要死,于是我就将比较常见的方法做了封装,写了个不是很规整的工具类,至于内部的逻辑啊,点击跳转的事件啊,大家下载demo后看看代码应

Java基础 —— Java常用类

Java常用类: java.lang包: java.lang.Object类: hashcode()方法:返回一段整型的哈希码,代表地址. toString()方法:返回父类名+"@"+哈希码(一般用于覆盖). equals()方法:返回"=="操作的布尔值(一般用于覆盖). finalize()方法:用于对象的销毁(不受人为控制,由JVM调用,遵从垃圾回收机制). clone()方法:用于对象之间的拷贝(深拷贝). getClass()方法:返回对象的字节码文件对

一大波Java来袭(三)Java常用类

本文简单介绍集中Java常用类 不同种类的工具用于处理不同的工作.比如:厨房中的工具用于烹饪:农场中的工具用于养殖--对于Java的学习中处理不同的工作也要采用不同的工具.如:处理数学函数问题用Math类.针对文件的操作采用File类--这也充分体现了Java面向对象的特点 一.字符串类(重点理解内存模型) (一)String Java.lang.String字符串常量,具有不可变性. (二)StringBuffer Java.lang.StringBuffer字符串可变量,是线程安全的. (三

&lt;转&gt;详解DNS的常用记录(上):DNS系列之二

详解DNS的常用记录(上) 在上篇博文中,我们介绍了DNS服务器的体系结构,从中我们了解到如果我们希望注册一个域名,那么必须经过顶级域名服务器或其下级的域名服务器为我们申请的域名进行委派,把解析权委派到我们的DNS服务器上,这样我们才可以获得对所申请域名的解析权.本文中我们将再进一步,假设我们已经为公司成功申请了一个域名hexun.com,现在hexun.com的解析权被委派到公司的DNS服务器202.99.16.1,那我们在202.99.16.1服务器上该进行什么样的配置呢? 一 安装DNS服

JAVA 常用类System以及Properties类的使用

package ioTest.io1; import java.util.Iterator; import java.util.Properties; import java.util.Set; /* * System: * API描述:public final class System extends Object * System 类包含一些有用的类字段和方法.它不能被实例化. * 在 System 类提供的设施中,有标准输入.标准输出和错误输出流:对外部定义的属性和环境变量的访问: * 加

java常用类之String类

public class StringTest{ /* * 1.字符串类: String . * 1) 什么是字符串? * 用一对双引号将一个或多个字符括起来组成的字符系列.例如: "A" "ABC" * 特殊的串: 一对连续的双引号.即: "" ,它称之为空串.也称之为长度为0的字符串. * * 2) 字符串的特性: * a) 字符串属于引用类型,一个字符串就是一个对象. * b) 字符串是不变的. * c) 字符串中每一个字符都有一个索引号(

java常用类之封装类

public class BaseTypeClassTest { /*  *   常用类  *   1.基本类型的封装类:  在Java语言中,八种基本类型均对应着一个封装类.  *   *    byte ====>>>  Byte  *    short ===>>>  Short  *    int =====>>>  Integer  *    long ====>>>  Long  *   *    float ===>