首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java---静态部类

之前写过一篇双重锁校验,这是延迟加载的一种模式,俗称懒汉模式,这次写一个静态部类,这个写法天生线程安全,并且引出反射攻击,废话不多说,上代码: public class StaticInnerClass...return InnerClass.staticInnerClass; } private StaticInnerClass(){ } } 这种静态部类实现方式...,它主要原理是:加载一个类时,其内部类不会同时被加载。...一个类被加载,当且仅当其某个静态成员(静态域、构造器、静态方法等)被调用时发生,也就是说内部类:InnerClass只有我们调用getInstance()的时候才会被加载。...这就是他线程安全的原因,通俗的说就是这个静态部类只能同时有一个线程去初始化它,其他的被阻塞,如果一个线程初始化了这个静态部类,那么其他的就不会再去初始化了。

16920

模式与静态方法_静态部类模式原理

本文主要介绍java的模式,以及详细剖析静态部类之所以能够实现的原理。OK,废话不多说,进入正文。 首先我们要先了解下单的四大原则: 1.构造私有。 2.以静态方法或者枚举返回实例。...我们常用的模式有: 饿汉模式、懒汉模式、双重锁懒汉模式、静态部类模式、枚举模式,我们来逐一分析下这些模式的区别。...故而,可以看出INSTANCE在创建过程中是线程安全的,所以说静态部类形式的可保证线程安全,也能保证的唯一性,同时也延迟了的实例化。...那么,是不是可以说静态部类就是最完美的模式了呢?...其实不然,静态部类也有着一个致命的缺点,就是传参的问题,由于是静态部类的形式去创建的,故外部无法传递参数进去,例如Context这种参数,所以,我们创建时,可以在静态部类与DCL模式里自己斟酌

48410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    java面试篇之手写静态部类实现

    为什么要使用的好处在之前的文章已经讲过了,建议先阅读这篇文章才疏学浅,写点文章~java模式,这次分享的主要是使用静态部类的方式实现。...下面我们使用静态部类的方式实现,代码可以跑在自己的IDE工具类上直接运行。...private static Singleton INSTANCE = new Singleton(); } } 我们通过多线程的方式进行模拟,通过运行时输出hashcode的值发现都一样,到这里静态部类实现方式的代码就完成了...希望这篇文章可以帮助到你,在面试时也是经常被面试官提起的,希望正在准备面试的你或者以后需要面试的可以得到帮助,喜欢文章的可以关注公众号,转发,分享。

    70331

    使用静态部类来创建

    我们都知道创建模式有懒汉,饿汉。但是我们还可以利用类的加载机制,和静态部类来创建静态部类什么时候加载?...//结论 调用构造方法时,外部类Outer被加载,但这时其静态部类StaticInner却未被加载。...扩展:静态部类创建 public class Singleton { private Singleton() {} static class SingletonHolder { private...故而,可以看出INSTANCE在创建过程中是线程安全的,所以说静态部类形式的可保证线程安全,也能保证的唯一性,同时也延迟了的实例化。...那么,是不是可以说静态部类就是最完美的模式了呢?其实不然,静态部类也有着一个致命的缺点,就是传参的问题,由于是静态部类的形式去创建的,故外部无法传递参数进去。

    97710

    Java设计模式-模式-静态部类

    静态部类特点 1)外部类装载的时候,静态部类不会状态 2)静态类所在的外部类使用内部类时,静态部类会装载 3)静态部类在装载时是线程安全的,只会装载一次 使用-静态部类优缺点分析 1)这种方式采用了类装载的机制来保证初始化实例时只有一个线程...2)静态部类方式在Singleton类被装载时并不会立即实例化,而是在需要实例化时,调用getInstance方法,才会装载SingletonInstance类,从而完成Singleton的实例化...3)类的静态属性只会在第一次加载类的时候初始化,所以在这里,JVM帮助我们保证了线程的安全性,在类进行初始化时,别的线程是无法进入的 4)优点:避免了线程不安全,利用静态部类特点实现延迟加载,效率高

    1.8K00

    【地铁上的设计模式】--创建型模式:模式(四)--静态部类

    什么是静态部类 静态部类是一种模式的实现方式,它使用一个私有的静态部类来持有对象,从而保证对象的唯一性。静态部类只有在被调用时才会被加载,同时创建唯一的对象。...由于静态部类只会被加载一次,因此它也具有懒加载的能力。静态部类既保证了线程安全,又具有较好的性能表现,是一种比较优秀的模式实现方式。...如何实现静态部类 实现静态部类的步骤如下: 创建一个外部类,构造方法为私有,防止外部类直接实例化。...C#实现 在C#中,静态部类实现方式与Java类似,只需要将内部类定义为私有嵌套类即可。...静态变量instance在静态初始化块中被初始化,保证了对象的唯一性和线程安全性。 总结 静态部类模式能够实现延迟加载、线程安全和高效访问,且实现简单,是模式中最优秀的一种实现方式。

    27920

    设计模式的正确写法(双重校验,静态部类,枚举)

    设计模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为的特殊类。通过模式可以保证系统系统中一个类只有一个实例。...属于创建型模式 特点: 模式类只有一个实例(对象) 模式类必须自己创建自己的唯一实例 模式类必须给所有其他对象提供这一实例 2.1 懒汉式 普通的懒汉式由于懒加载所以存在线程安全问题,这里给出有一种双重检查的实现方式...public static Singleton getInstance(){ reuturn LazyHolder.INSTANCE; } } 注意事项: 从外部无法访问静态部类...方法,使得静态部类LazyHolder被加载的时候。...因为这种方式是利用classLoader的加载机制来实现懒加载,并保证构建的线程安全。

    42220

    Java模式-懒汉式、恶汉式、静态部类、枚举以及线程安全问题

    Java的模式常见的分为懒汉式、饿汉式、静态部类、枚举 通过模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数额控制并节约系统资源。...这样在多线程的环境下会存在线程安全问题,JVM出于对效率的考虑,是在happens-before原则(out-of-order)乱序执行。...instance = new Singleton(); } } } return instance; } } 静态部类...外部类加载时并不需要立即加载内部类,内部类不被加载则不去初始化INSTANCE,故而不占内存。不仅能确保线程安全,也能保证的唯一性,同时也延迟了的实例化。...public void method(){ //TODO } } 特点: 枚举在java中与普通类一样,都能拥有字段与方法,而且枚举实例创建是线程安全的,在任何情况下,它都是一个

    1.1K20

    第20次文章:内部类+设计模式

    本周首先紧接上周没有写完的内部类,详情点击《第19次文章:类加载器的加密解密+内部类》,再加模式的实现。...-方法内部类不能访问定义它的方法的局部变量,除非这个变量被定义为final 本质原因:局部变量和内部类生命周期不一致所致! -方法内部类只能包含非静态成员!...-模式可以在系统设计全局的访问点,优化环共享资源访问,例如可以设计一个类,负责所有数据表的映射处理。 3、常见的5中模式实现方式: (1)主要: -饿汉式(线程安全,调用效率高。...并且可以天然的防止反射和反序列化漏洞) 4、模式的实现与检测 我们对5种模式都进行了相应的实现。下面我们主要对饿汉式和懒汉式进行一个详解。...不需要延时加载:枚举式好于饿汉式 -对象占用资源大,需要延时加载:静态部类式好于懒汉式

    46320

    再议模式和静态

    模式还是静态类,这是一个老话题了,从我刚开始接触 Java 的时候就看到这样的讨论。在这里我总结一下,也添加一点点新东西。...和 “非静态” 的内部类相比,它可以放置一些静态的成员变量和方法定义,而非静态类不可以;而且,静态部类不能访问外层类非静态的属性。...关于的继承细节,这里暂不讨论,有几种办法,有兴趣的同学可以自行阅读 JDK 的 Calendar 类。 4、可以实现自某接口,可以继承自某类。...5、可以比较方便地扩展为有限实例。根据需要,我可以通过工厂,生产出两个内部状态不同的对象——这在静态类中是难以做到的。...这种形式可以看做是的一个变体。 6、有人说,在使用过程中申请的资源可以被及时释放并回收内存,但是静态类不行。

    39910

    Java模式的不同写法(懒汉式、饿汉式、双检锁、静态部类、枚举)

    目录 1、饿汉模式 2、懒汉模式 3、双重校验锁【推荐】 4、静态部类【推荐】 5、枚举 6、模式的线程安全性 ---- Java中(Singleton)模式是一种广泛使用的设计模式。...适用于:如果某个使用的次数少,并且创建消耗的资源较多,那么就需要实现的按需创建,这个时候使用懒汉模式就是一个不错的选择。...【推荐】 除了上面的三种方式,还有另外一种实现的方式,通过静态部类实现。...不一样的是,它是在内部类里面去创建对象实例。 这样的话,只要应用中不使用内部类,JVM就不会去加载这个类,也就不会创建对象,从而实现懒汉式的延迟加载。...模式有很多种的写法,我总结一下: (1)饿汉式:线程安全 (2)懒汉式:非线程安全 (3)双检锁:线程安全 (4)静态部类:线程安全 (5)枚举:线程安全 如何选择 如果我们在程序启动后

    1.1K30

    模式 实现

    博客地址:https://ainyi.com/22 面试会经常遇到和工厂设计模式,本文讲解设计模式 定义 一个类中能创建一个实例,称之为 适用场景 频繁创建对象、管理对象是一件耗费资源的事,...(推荐写法) 还可以使用静态部类这种巧妙的方式来实现模式 原理: 当任何一个线程第一次调用 getInstance()时,都会使 SingletonHolder 被加载和被初始化,此时静态初始化器将执行...// 使用内部类的方式来实现懒加载 private static class LazyHolder { // 创建对象 private static final Krryblog...且采用 enum 声明后,该类会被编译器加上 final 声明,故该类是无法继承的 由于JVM类初始化是线程安全的,所以可以采用枚举类实现一个线程安全的模式 简单写法 防止多次实例化,即使是在面对复杂的序列化或者反射攻击的时候...(安全) 这种也较为推荐使用 总结 总的来说模式写法有5种: 饿汉式 简单懒汉式(在方法加锁) DCL双重检测加锁(进阶懒汉式) 静态部类实现懒汉式(推荐写法) 枚举方式(最安全、简洁写法,推荐写法

    1.2K20

    小谈静态类和模式

    静态类(Static Class)和(Singleton)都是在编程中用于实现特定类型的设计模式或代码组织方式。它们在不同的情境下有不同的用途和特点。...静态类常常用于实现一组相关的静态方法,通常用于组织工具方法或者辅助功能,而不需要维护实例状态。静态类在许多编程语言中都有类似的实现方式。 使用场景 提供一组通用的工具函数。...而类有一个唯一的实例,通过该实例访问其方法和属性。 状态维护: 静态类不维护任何实例状态,而可以维护状态并在应用程序中共享。 可扩展性: 静态类通常不能扩展,因为其方法是静态的。...类可以实现接口、继承或者使用其他方式进行扩展。 全局访问: 类通常用于提供全局访问点,以便在整个应用程序中共享状态。静态类的方法也可以通过类名直接访问,但没有类提供的灵活性和可控性。...静态类适用于不需要维护状态的情况,而适用于需要共享状态和资源的情况。选择使用哪种方式取决于你的应用程序的需求和设计目标。

    45910

    Python实现模式

    模式 1.什么是? 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为类,模式是一种对象创建型模式。 那么模式有什么用途呢?...举个常见的模式例子,我们平时使用的电脑上都有一个回收站,在整个操作系统中,回收站只能有一个实例,整个系统都使用这个唯一的实例,而且回收站自行提供自己的实例,因此回收站是模式的应用。...2.创建-保证只有1个对象 class Singleton(object): __instance = None def __new__(cls, name, age):...a.age = 30 # 给a指向的对象添加一个属性 print(b.age) # 获取b指向的对象的age属性 运行结果: 2946414454432 2946414454432 30 3.创建

    57220

    java实现模式

    它的缺点也很明显,即使这个没有用到也会被创建,而且在类加载之后就被创建,内存就被浪费了。 这种实现方式适合占用内存比较小,在初始化时就会被用到的情况。...如果某个使用的次数少,并且创建消耗的资源较多,那么就需要实现的按需创建,这个时候使用懒汉模式就是一个不错的选择。...Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } 4、静态部类...除了上面的三种方式,还有另外一种实现的方式,通过静态部类实现。...不一样的是,它是在内部类里面去创建对象实例。这样的话,只要应用中不使用内部类,JVM就不会去加载这个类,也就不会创建对象,从而实现懒汉式的延迟加载。

    50030
    领券