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

设计模式之单例模式

这个时候类的构造函数是public公有的,你可以随意创建多个类的实例。所以,首先我们需要把构造函数改为private私有的,这样就不能随意new对象了,也就控制了多个实例的随意创建。...然后,定义一个私有的静态属性,来代表类的实例,它只能类内部访问,不允许外部直接访问。 最后,通过一个静态的公有方法,把这个私有静态属性返回出去,这就为系统创建了一个全局唯一的访问点。...总结为: 私有构造方法 指向自己实例的私有静态变量 对外的静态公共访问方法 单例模式分为饿汉式和懒汉式。它们的主要区别就是,实例化对象的时机不同。饿汉式,是在类加载时就会实例化一个对象。...同样的道理,我们是不是也可以通过定义一个静态内部类来保证类属性只被加载一次呢。...,获取单例对象 return Holder.singleton; } } 而且,JVM在加载外部类的时候,不会加载静态内部类,只有在内部类的方法或属性(此处即指singleton

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

    Java 语言基础 (类和对象, 方法和封装, static 关键字和继承, 多态和特殊类)

    之间 JavaBean -- 一种 Java 语言写的可重用组件 其它 Java 类可以通过反射机制, 来发现和操作这些 JavaBean 的属性 本质上是符合以下标准的 Java 类 类是公共的 有一个无参的公共的构造器...从 Java 5 开始允许返回子类类型 要求方法的访问权限不能变小, 可以相同或变大 要求方法不能抛出更大的异常 (异常机制) 访问控制符 修饰符 本类 同一个包中的类 子类 其他类 public 可以访问..., interface 的私有方法也不可以为 abstract private 不可以修饰 default, 因为 default 可能会被实现类重写 将私有方法写在接口中, 不让实现类看到, 有很好的安全性..., 可以将这个类定义为所服务的内部类 隐藏该类的实现细节, 并且可以方便的访问外部类的私有成员, 而不再需要提供公有的 get 和 set 方法 内部类的分类 普通内部类 -- Nested Inner...可以直接创建对象 访问外部类中与本类内同名的成员变量或方法时, 需要使用"类名."

    82430

    JAVA入门学习四

    c:实例化格式: 外部类名.内部类名 对象名 = 外部类对象.内部类对象; (注意有两个new 关键字) 成员私有内部类: a:其他类无法直接访问外部类中私有成员内部类, 需要访问内部类的上级(外部)类中的公共方法进行调用...; } } //本类的公共方法 public void print(){ System.out.println("私有内部类: 外部类中的公共方法 - 调用私有的内部类里面的方法...内部类可以访问外部类的私有成员number:1024 私有内部类: 外部类中的公共方法 - 调用私有的内部类里面的方法 私有内部类的公共方法 外部类是无法访问的,除非为本类公共方法调用 静态内部类:...#方法可以返回对象的内存地址,不管该对象的类是否重写了hashCode()方法。...getClass().getName() + "@" + Integer.toHexString(hashCode()); #左边类名 @ hashcode的十六机制整数 } 注意事项: toString 方法作用可以更方便的显示属性值

    45610

    JAVA入门学习四

    c:实例化格式: 外部类名.内部类名 对象名 = 外部类对象.内部类对象; (注意有两个new 关键字) 成员私有内部类: a:其他类无法直接访问外部类中私有成员内部类, 需要访问内部类的上级(外部)类中的公共方法进行调用...; } } //本类的公共方法 public void print(){ System.out.println("私有内部类: 外部类中的公共方法 - 调用私有的内部类里面的方法...内部类可以访问外部类的私有成员number:1024 私有内部类: 外部类中的公共方法 - 调用私有的内部类里面的方法 私有内部类的公共方法 外部类是无法访问的,除非为本类公共方法调用 静态内部类:...#方法可以返回对象的内存地址,不管该对象的类是否重写了hashCode()方法。...getClass().getName() + "@" + Integer.toHexString(hashCode()); #左边类名 @ hashcode的十六机制整数 } 注意事项: toString 方法作用可以更方便的显示属性值

    59130

    【Java数据结构】反射、枚举以及lambda表达式

    具体来说,反射机制允许在运行状态中 对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意方法和属性,并且能改变它的属性。...2.2反射主要应用场景 在运行时判断任意一个对象所属的类; 在运行时实例化任意一个类的对象; 在运行时获取任意类的名称、package信息、所有属性、方法、注解、类型、类加载器等; 在运行时获取任意对象的属性...,并且能改变对象的属性; 在运行时调用任意对象的方法。...//获取所有本类定义的成员变量,包括私有(返回一个数组) getField(变量名) //获取指定公共属性的Field对象 getDeclaredField(变量名) //获取指定包括私有,...,我们也可以通过反射拿到他的实例对象,那么枚举的构造方法也是私有的,我们是否可以拿到呢?

    8610

    Java学习笔记——面向对象编程(核心)

    方法的重载 (overload) 方法名相同,参数类型不同(个数,类型,顺序) 可变个数形参 (jdk5.0之后) 2 面向对象三大特征 2.1 封装 (Encapsulation) 将类的属性私有化...,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。...但一个父类可以派生出多个子类 2.2.4 方法的重写(override) 在子类中可以根据需要对从父类中继承来的方法进行改造。 在程序执行时,子类的方法将覆盖父类的方法。...要求 重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型。 重写方法不能使用比被重写方法更严格的访问权限。 重写和被重写的方法须同时为static的,或同时为非static的。...可以调用属性、方法、构造器(构造器相互调用,使用this()必须放在构造器的首行)。 super super可用于访问父类中定义的属性、成员方法,在子类构造方法中调用父类的构造器。

    41420

    Swift基础 访问控制

    但是,您可能希望将代码的某些部分标记为私有或私有文件,以便从应用程序模块中的其他代码中隐藏其实现详细信息。...重写可以使继承的类成员比其超类版本更容易访问。在下面的示例中,类A是一个公共类,其文件私有方法称为someMethod()。B类是A的子类,访问级别为“内部”。...常量、变量、属性和下标 常量、变量或属性不能比其类型更公开。例如,使用私有类型写入公共财产是无效的。同样,下标不能比其索引类型或返回类型更公开。...因此,您可以: 在原始声明中声明一个私人成员,并从同一文件中的扩展名访问该成员。 在一个扩展中声明一个私有成员,并从同一文件中的另一个扩展名访问该成员。...在扩展名中声明一个私有成员,并从同一文件中的原始声明访问该成员。 此行为意味着无论您的类型是否有私有实体,您都可以以同样的方式使用扩展来组织代码。

    15900

    -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态

    类:是一组相关的属性和行为的集合 对象:是该类事物的具体体现 成员变量与局部变量 在类中的位置不同   •成员变量 类中方法外   •局部变量 方法内或者方法声明上 在内存中的位置不同   •成员变量...继承 多个类中存在相同属性和行为时, 将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。...多个类可以称为子类,单独这个类称为父类或者超类。 子类可以直接访问父类中的非私有的属性和行为。 通过extends 关键字让类与类之间产生继承关系。   ...一个程序文件中只有一个package,可以有多个import。 用来导包中的类,不导入包中的包。 内部类 将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类)。...访问特点:   •内部类可以直接访问外部类中的成员,包括私有成员。   •而外部类要访问内部类中的成员必须要建立内部类的对象。

    69110

    第六章 面向对象编程(基础)

    初始化值 根据情况,可以显式赋值;也可以不赋值,使用默认值 5. 方法的重载 ‍ 方法重载:在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可。...: 外部类:public、缺省 成员变量、成员方法、构造器、成员内部类:public、protected、缺省、private 6.3 封装性的体现 ‍ 成员变量/属性私有化 ‍ 概述:私有化类的成员变量...,提供公共的 get 和 set 方法,对外暴露获取和修改属性的功能。 ‍...所谓 JavaBean,是指符合如下标准的 Java 类: 类是公共的 有一个无参的公共的构造器 有属性,且有对应的 get、set 方法 用户可以使用 JavaBean 将功能、处理、值、数据库访问和其他任何可以用...你拖动 IDE 构建工具创建一个 GUI 组件(如多选框),其实是工具给你创建 Java 类,并提供将类的属性暴露出来给你修改调整,将事件监听器暴露出来。

    15710

    Effective Java(第三版)——条目十五:使类和成员的可访问性最小化

    package-private——成员可以从被声明的包中的任何类中访问。从技术上讲,如果没有指定访问修饰符(接口成员除外,它默认是公共的),这是默认访问级别。...protected——成员可以从被声明的类的子类中访问(受一些限制,JLS,6.6.2),以及它声明的包中的任何类。 public——该成员可以从任何地方被访问。...为了测试将公共类的私有成员指定为包级私有是可以接受的,但是提高到更高的访问级别却是不可接受的。 换句话说,将类,接口或成员作为包级导出的API的一部分来促进测试是不可接受的。...在未导出的包中,公共和受保护的公共类的成员会产生两个隐式访问级别,这是普通公共和受保护级别的内部类似的情况。这种共享的需求是相对少见的,并且可以通过重新安排包中的类来消除。...如果将模块的JAR文件放在应用程序的类路径而不是其模块路径中,那么模块中的包将恢复为非模块化行为:包的公共类的所有公共类和受保护成员都具有其普通的可访问性,不管包是否由模块导出[Reinhold,1.2

    95240

    Java课程主要内容回顾

    public class 和普通类的区别: public class 是指公共可访问的类,其类名必须与文件名完全相同。 普通类是包级私有的,只能在同一个包内被访问。...在Java中,类可以被声明为私有的,但是有些限制: 私有内部类(Private Inner Class): 类可以嵌套在另一个类中,并且被声明为私有。...这样的类称为私有内部类,只能在包含它的外部类内部访问。 私有顶级类(Private Top-Level Class): 如果将类声明为顶级(非内部)类并且私有,那么只能在同一文件内的其他类中访问。...这个类无法被其他文件中的类所访问。 私有类可以在某种程度上提供更严格的访问控制,限制了该类的可见性范围。...Seter和Geter方法的作用? 私有属性可以通过公有的setter和getter方法进行读写控制,setter方法用于设置私有属性的值,getter方法用于获取私有属性的值。

    10710

    第五章:面向对象编程

    抽象类 什么时候考虑将类定义为抽象类? ​如果类中有些方法无法实现或者没有意义,可以将方法定义为抽象方法。类定义为抽象类。​这样在抽象类中只提供公共代码,具体的实现强行交给子类去做。...当多个类中有共同的属性和方法时,为了达到代码的复用,建议为这几个类提取出来一个父类,在该父类中编写公共的代码。如果有一些方法无法在该类中实现,可以延迟到子类中实现。这样的类就应该使用抽象类。...public:公共的,在任何位置都可以访问。 ‍ 类中的属性和方法访问权限共有四种:private、缺省、protected和public。...java中所有类都实现了这个类中的方法。 现阶段Object类中需要掌握的方法: toString:将java对象转换成字符串。 equals:判断两个对象是否相等。...内部类可以访问外部类的私有成员,这样可以将相关的类和接口隐藏在外部类的内部,从而提高封装性。 匿名内部类是指没有名字的内部类,通常用于定义一个只使用一次的类,比如在事件处理中。

    11811

    Effective Java要点笔记

    getInstance 约定俗成返回单例 newInstance 约定俗成多例 getType 一般把工厂方法写在其它类(如专门的工厂类) 可根据Type入参来从工厂拿对应单例 newType 一般把工厂方法写在其它类...,从抽离变化的角度来看,可以将builder设计成接口 public interface Builder { public T build(); } 缺点: 静态内部类builder明显代码量增加了...可以搞个private final 内部类 里面有个回收外部类实例资源的方法,外部类私有属性保持对内部类实例的一个引用。...尽可能地使每个类或者成员不被外界访问 对于包内顶层的类和接口,要么包级私有要么public, 一旦public开发者有责任永远支持它 如果包级私有的顶层类只被包内的一个类用到,要考虑使它成为那个类的私有嵌套类...,覆写是在运行时 返回类型为数组或集合的方法应该返回一个零长度的数组或者集合 为了正确地编写API文档,必须在每个被导出的方法,类,接口,构造器和字段声明之前增加文档注释 方法的文档注释应该描述它与客户端的约定

    44210

    Java学习笔记-全栈-Java基础-06-面向对象中的重点

    * * * 公共 封装办法: 对于属性,一般私有化,方便在类中实现对属性的对外控制(如判断合法化),避免多个用户对其不合法操作或更改代码时导致混乱。...抽象类中的构造方法不需要被实现,只会被自动调用。 抽象类中可以出现方法的实现(如构造方法)。 接口不提供任何方法的实现,完全面向规范。...4.内可调用外(作为成员,显然可以),外不能直接调用内(作为类,对外部类来说内部类没有new出来) 5.静态和非静态在内部类中不能同时出现(作为成员,要么在栈,要么在method area) 6.静态内部类只具有成员的性质...B).如果将变量或者方法声明为final,可以保证它们在使用中不被改变.   1)被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。   ...finalize:Java中的一个方法名。 Java技术使用finalize()方法在垃圾收集器将对象从内存中清除出去前,做必要的清理工作。

    41720

    【Java】06 面向对象基本特征

    public(公共访问权限):这是一个最宽松的访问控制级别,如果一个成员(包括成员变量、方法和构造器等)或者一个外部类使用 public 访问控制符修饰,那么这个成员或外部类就可以被所有类访问,不管访问类和被访问类是否处于同一个包中...,也可以增加原来父类所不具备的属性和方法,或者直接重写父类中的某些方法。...2.1.2 extends 关键字    在 Java 中,让一个类继承另一个类需要使用 extends 关键字,子类在继承父类的同时,也继承了父类中的属性和方法。...内部类可以直接访问外部类的成员,包括私有成员    外部类要想访问内部类的成员必须先创建内部类对象 4.2 局部内部类 4.2.1 语法 // 外部类 class 类名 { // 方法 修饰符...返回值类型 方法名( 参数列表 ) { class 类名 { //局部内部类 ··· } } } 4.2.2 注意    局部内部类定义在方法中

    46220

    Java中的反射(通过反射获取类的结构、invoke方法、获取注解)

    获取运行时类的完整结构 可以获取:包、修饰符、类型名、父类(包括泛型父类)、父接口(包括泛型父接口)、成员(属性、构造器、方法)、注解(类上的、方法上的、属性上的)。...>[] getClasses():返回所有公共内部类和内部接口。包括从超类继承的公共类和接口成员以及该类声明的公共类和接口成员。 public Class公共、保护、默认(包)访问及私有类和接口,但不包括继承的类和接口。 public Class运行时类的指定结构 3.1 调用指定的属性 在反射机制中,可以直接通过Field类操作类中的属性,通过Field类提供的set()和get()方法就可以完成设置和取得属性内容的操作。...如果代码中必须用反射,而该句代码需要频繁的被调用,那么请设置为true。 使得原本无法访问的私有成员也可以访问 参数值为false则指示反射的对象应该实施Java语言访问检查。 4.

    4.5K91

    消除JAVA编程中的坏味道

    ,并以外围实例为参数并从中复制数据.然后用writeReplace方法在序列化之前将外围类的实例变成了序列化代理,并在外围类的ReadObject方法中抛出异常,防止伪造.最后在ReadResolve方法中构造外围类的实例...属性 AccessibleObject.setAccessible方法通过反射访问私有方法 公有静态成员 双重检查锁 静态内部类 单元素枚举 public enum T{ A; int do()...为了继承而设计类会有一些实质性的限制,需要消除自用特性:case将每个可覆盖方法的代码移到一个私有的辅助方法中....替代方案,对于易混淆的重载使用命名模式,对于构造器重载使用静态工厂模式 对于每一个重载方法,至少有一个对应的参数在两个重载方法中具有根本不同的类型 让更具体化的重载方法把调用转发给更一般的重载方法....null,如果对象将在缺少外部同步的情况下被并发访问那么返回可识别的值是必要的,从性能的角度考虑可识别>状态测试,其余情况应当使用状态测试 对于可恢复的情况使用受检异常,对编程错误使用运行时异常 受检异常

    89621

    java单例模式代码实现方式_java单例模式实现方式

    标准的懒汉模式 class LazySingleton { // 私有成员属性 private LazySingleton lazySingleton; // 私有构造方法...// 公共的获取实例方法 public synchronized static LazySingleton getLazySingleton() { // 如果成员属性为空...,效率低 再次改进 class LazySingleton { // 私有成员属性,使用volatile可以保证代码的有序性,防止指令重排 private volatile static...LazySingleton lazySingleton; // 私有构造方法 private LazySingleton() { } // 公共的获取实例方法...; } } 运行结果: 因此,在工作中推荐大家使用静态类部类单例模式,可以有效的防止反射攻击与序列化带来的相关问题 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn

    53430
    领券