Effective Java笔记(4)通过私有构造器强化不可实例化的功能

STM32H743IIT6+USB3300高速HID通讯实战:从CUBEMX配置到调试避坑全记录 本文详细记录了基于STM32H743IIT6微控制器与USB3300 PHY芯片实现高速USB HID通信的完整实战过程。内容涵盖从硬件选型、STM32CubeMX工程配置(重点规避引脚映射等常见陷阱)、自定义报告描述符编写,到驱动层数据收发实现与高级调试技巧的全链路解析,旨在帮助开发者快速构建稳定、高效的嵌入式高速数据通道。 阅读详情

        有时可能需要编写只包含静态方法和静态域的类 。 这些类的名声很不好,因为有些人在面向对象的语言中滥用这样的类来编写过程化的程序,但它们也确实有特别的用处 。 我们可以利用这种类,以 java. lang. Math 或者 java. util. Arrays 的方式,把基本类型的值或者数组类型上的相关方法组织起来 。 我们也可以通过 java .util .Collections的方式,把实现特定接口的对象上的静态方法,包括工厂方法组织起来 。(从Java 8 开始,也可以把这些方法放进接 口中,假定这是你自己编写的接口可以进行修改 。)最后,还可以利用这种类把 final 类上的方法组织起来,因为不能把它们放在子类中 。

        这样的工具类( utility class )不希望被实例化,因为实例化对它没有任何意义 。 然而 ,在缺少显式构造器的情况下,编译器会自动提供一个公有的 、无参的缺省构造器( default constructor ) 。对于用户而言,这个构造器与其他的构造器没有任何区别 。 在已发行的 API中常常可以看到一些被无意识地实例化的类 。

        企图通过将类做成抽象类来强制该类不可被实例化是行不通的 。该类可以被子类化,并且该子类也可以被实例化 。这样做甚至会误导用户,以为这种类是专门为了继承而设计的 然而,有一些简单的习惯用法可以确保类不可被实例化 。 由于只有当类不包含显式的构造器时,编译器才会生成缺省的构造器,因此只要让这个类包含一个私有构造器,它就不能被实例化:

// Noninstantiable utility class
public class UtilityClass {
    // Suppress default constructor for nonins tantiability
    private UtilityClass() {
        throw new AssertionError();
    }
    ... // Remainder omitted
}

        由于显式的构造器是私有的,所以不可以在该类的外部访问它 。AssertionError 不是必需的,但是它可以避免不小心在类的内部调用构造器 。 它保证该类在任何情况下都不会被实例化 。 这种习惯用法有点违背直觉,好像构造器就是专门设计成不能被调用一样 。因此,明智的做法就是在代码中增加一条注释,如上所示 。

        这种习惯用法也有副作用,它使得一个类不能被子类化 。 所有的构造器都必须显式或隐式地调用超类( superclass )构造器,在这种情形下,子类就没有可访问的超类构造器可调用了 。

PaddleOCR全版本完整指南:从入门到精通,全面解析安装部署与高级应用 摘要 本文详细介绍了PaddleOCR的完整安装与使用指南。首先讲解了环境准备步骤,包括Python 3.11虚拟环境创建和PaddlePaddle框架的CPU/GPU版本安装。接着介绍了PaddleOCR库的安装方式,可选功能模块(文档解析、信息抽取、翻译等)及其依赖组。通过示例代码演示了PPStructureV3文档解析功能的基本用法,并提供了安装验证方法。最后针对常见问题(Windows中文用户名报错、模型下载问题)给出解决方案。文章为从入门到精通的PaddleOCR用户提供了全面的技术指导。 阅读详情

相关推荐

Jenkins+docker 微服务实现自动化部署安装和部署过程

本文详细介绍了如何使用Docker部署Jenkins自动化服务器。主要内容包括:1)拉取Jenkins官方或BlueOcean镜像;2)创建容器并配置端口映射、数据卷挂载;3)设置防火墙规则;4)配置清华大学镜像加速;5)安装必要插件;6)SSH密钥配置;7)构建触发器设置;8)编写自动化构建脚本。通过Docker部署Jenkins可以简化安装流程,确保环境一致性,并利用容器特性实现快速启动和管理。文章提供了完整的配置步骤和注意事项,帮助用户快速搭建CI/CD环境。

qq_33665793的博客 1688

java构造器:

在 Java 中,构造器(Constructor)是一种特殊的方法,用于创建和初始化对象。构造器的名称与类名相同,它没有返回类型(包括void),也不需要使用return命令来返回值。在创建对象时,new关键字会自动调用对应类的构造器来创建对象并执行初始化操作。在上面的示例中,ClassName类有一个私有成员变量num,并定义了一个构造器,它接受一个整数参数,并在对象创建时将其赋值给成员变量num。voidthis()如果一个类需要进行特殊处理的初始化操作,就需要定义相应的构造器来完成这些操作。

qq_38040571的博客 1378

【CTFSHOW】web入门 黑盒测试

文章目录写在前面web380web381web382web383web384web385web386web387web388web389web390web391web392web393web394web395参考资料 写在前面 一直没搞过渗透,先学学黑盒测试吧 web380 进入题目发现是一个关于灯泡的悲伤故事,点进去,看到跳转到page_1.php页面。 我们访问page.php试试: 发现报错:$id.php,可以猜想需要传名称为id的参数,来访问id.php。我们访问page.php?id=1试试

7ruth0hn的博客 1897

final 基础使用

1 修饰类当某个类的整体定义为 final 时,就表明了你不能打算继承该类,而且也不允许别人这么做。即这个类是不能有子类的。注意:final 类中的所有方法都隐式为 final,因为无法覆盖他们,所以在 final 类中给任何方法添加 final 关键字是没有任何意义的。这里顺道说说 final 类型的类如何拓展?比如 String 是 final 类型,我们想写个 MyString 复用所有 String 中方法,同时增加一个新的 toMyString() 的方法,应该如何做?

weixin_65492216的博客 273

STM32实战:5分钟搞定MXL90614红外测温模块的I2C驱动(附完整代码)

本文提供了一份快速集成MLX90614红外测温模块的STM32实战指南。通过详细的软件I2C驱动代码,重点解析了SMBus通信协议、CRC校验及温度数据转换,帮助开发者避开常见陷阱,实现5分钟内完成模块驱动并读取准确温度值。

wasm7browser的博客 353

unity C# 计算3D空间任意多边形面积,距离,角度测量工具

unity C# 计算3D空间任意多边形面积,距离,角度 using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.UI; using System; /// /// 划线面积,距离,角度 /// public class UnderlinedMeasureTool : MonoBehaviour { /// /// 相机 /// public Camera _c

qq_22972867的博客 2224

java的构造器详解

java的构造器详解

qq_983030560的博客 2067

[deprecated]第九章:SVM机制: 9-2 Linux HMM原理与实现详解

Linux内核HMM(异构内存管理)子系统为异构计算平台提供统一内存管理机制,支持CPU与GPU等设备共享虚拟地址空间,实现零拷贝数据访问。其核心功能包括:1)统一虚拟地址空间,设备可直接访问CPU进程内存;2)实时页表同步与失效通知,确保地址空间一致性;3)支持设备端page fault处理;4)管理多种内存类型(系统内存、设备私有内存等)。HMM通过mmu_interval_notifier机制感知地址空间变化,提供标准API简化驱动开发,显著提升异构计算性能和数据传输效率。

图形/计算GPU的驱动与虚拟化技术分享园地 2547

Java:Effective java学习笔记之 通过私有构造器强化不可实例化的能力

Java 通过私有构造器强化不可实例化的能力通过私有构造器强化不可实例化的能力参考 通过私有构造器强化不可实例化的能力 并非所有的类都是需要实例化的。有时候,我们可能需要编写至包含静态方法和静态域的类。这些类的名声很不好,因为有些人在面向对象的语言中滥用这样的类来编写过程化的程序。 尽管如此,它们也确实有它们特有的好处: 1.利用这种类,以java.lang.Math或者java.util.Arrays的方式,把基本类型的值或者数组类型上的相关方法组织起来. 2.我们也可以通过java.util.Coll

JMW1407的博客 766

【华为OD】华为性格测试(综合测试)高分策略

1、性格测试非常重要,是一次否决制,18 个月有效期,所以态度一定要认真对待,不要随便乱选;2、做题原则:正向原则,积极乐观向上3、时间为 25-30 分钟,会频繁出现重复选项重复出现的题目注意一致性。

笑着的程序员的博客 3万+

【AI Agent系列】【阿里AgentScope框架】0. 快速上手:AgentScope框架简介与你的第一个AgentScope程序

这是我们学习的第四款智能体框架了。前面我们学习了 AutoGPT、MetaGPT、LangGraph 等智能体应用开发框架,各有优缺点。今天我们开始学习AgentScope这一款多智能体开发框架。卷起来吧,多看看,多用用,没坏处。

同学小张的博客 5425

Java中私有构造器的作用

在Java中,所有的类成员都可以设置访问控制关键字,包括:private,public,protected,package,来对类成员的访问权限进行控制。   构造器作为Java类的一个特殊的成员同样可以设置关键字来控制其访问权限。在大多数情况下,我们一般把构造器设置为公有成员,即public的,在默认情况下,如果不写任何关键字,其访问权限也是public。这样,在我们新建一个类的对象

一个程序猿的博客 8374

【实战篇】【硅基流动API+Cherry Studio搭建个人知识库全流程解析:从零到精通的超详细指南】

在人工智能技术高速发展的今天,基于大语言模型的知识库已成为开发者提效的必备工具。然而云端服务存在响应延迟、数据隐私、硬件依赖等痛点。通过硅基流动API与的深度整合,我们既能享受大模型的强大能力,又能实现本地化部署与高效管理。本文将从环境配置到高阶调优,手把手带你构建企业级知识库系统。

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1082

解读 Java 经典巨著《Effective Java》90条编程法则,第4条:通过私有构造器强化不可实例化的能力

《Effective Java》第三版中的第4条是“通过私有构造器强化不可实例化的能力”。其主要目的是防止类被实例化,从而保证该类只能用于提供静态方法或字段。这个设计模式常用于工具类,比如 `java.lang.Math` 类,因为这些类的实例化没有实际意义,同时避免潜在的错误和不必要的资源开销。

赵士杰——成功并非一蹴而就,而是在持之以恒的努力中逐渐实现。 1064

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

《Effective Java》第4条:通过私有构造器强化不可实例化的能力

也就是说,弊端就是被私有化构造器的类,不能被继承了,相当于是违背了Java的三大思想中的一个,不过没关系,我们之所以这么用,目的也不是为了让子类继承,更多的是需要一个工具来帮我们做事情,所以,该怎么用就怎么用吧!比如上面的例子,电商平台货物的状态,也可以通过接口来写,而且更加方便,我也更加推荐大家使用这种方式来写公共的常量类,因为接口里的常量默认都是public static final的,不用再去写了,如下代码。其次,抽象类还会被误解为是一个专门用来被继承的类,实际上我们的目的并不是需要它被继承。

TD_FAlmK的博客 569

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Effective Java:第四条--通过私有构造器强化不可实例化的能力

本文探讨了如何确保工具类(Utility Class)不能被实例化。工具类(如Math、Arrays等)仅包含静态方法和字段,实例化毫无意义。默认情况下,编译器会生成公有构造器,导致类可被错误实例化。文章指出将类声明为abstract是错误做法,因其可被继承。正确方法是为工具类添加私有构造器,并在其中抛出AssertionError,同时建议用final修饰类以防止继承。这种设计既阻止了外部实例化,又明确了工具类的设计意图,是最可靠的实现方式。

m0_46557728的博客 846

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

《Effective Java》阅读笔记4 通过私有构造器强化不可实例化的能力

1.序 在第三节中,我们学习了如何通过不同的方法强化Singleton,但并非所有的类都是需要实例化的。有时候,我们可能需要编写至包含静态方法和静态域的类。这些类的名声很不好,因为有些人在面向对象的语言中滥用这样的类来编写过程化的程序。 尽管如此,它们也确实有它们特有的好处: 1.利用这种类,以java.lang.Math或者java.util.Arrays的方式,把基本类型的值或者数组类型上的相关方法组织起来. 2.我们也可以通过java.util.Collections的方式,把实现特定接口的对象上的

weixin_41563161的博客 327

《Effective Java》4、通过私有构造器强化不可实例化的能力

有时候,你可能需要编写只包含静态方法和静态域的类作为工具类,这样的工具类不希望被实例化,实例化对它没有意义。 但是在缺少显式构造器的情况下,编译器会提供一个公有的、无参的缺省构造器。 错误做法:做成抽象类强制该类不可被实例化,这是行不通的,该类可以被子类化,且子类也可以被实例化。 解决办法:让这个类包含私有构造器。 //Noninstantiable utility class public class JDBCUtil { //Suppress default constructor for .

Yisnow.的博客 187

Effective Java——通过私有构造器强化不可实例化的能力

有时候你会想要编写一个只包含一组静态方法和静态字段的类。这种类名声很不好,因为有些人为了避免使用面向对象的思维方式而滥用这样的类(some people abuse them to avoid thinking in terms of objects),但是他们确实有它们特有的用处。我们可以使用这种类,以java.lang.Math或者java.util.Arrays的方式对原始值或数组的相关方法组织起来。它们还可以用于以java.util.Collections的方式,把实现特定接口的对象上的静态方法(.

菜园子丶For丨丶Tomorrow的博客 166

Effective Java学习-通过私有构造器强化不可实例的能力

本文是对《Effective Java第2章第4条的内容进行介绍和解读。条建议通过私有构造器来强化不可实化的能力,以防止类被意外地实例。这种技术通常被用在工具类或者包含静态方法和静态字段的类上。

weixin_36639192的博客 466

Effective第三版 中英 | 第二章 创建和销毁对象 | 通过私有构造器强化不可实例化的能力

大家好,这里是 Rocky 编程日记 ,喜欢后端架构及中间件源码,目前正在阅读 effective-java 书籍。同时也把自己学习该书时的笔记,代码分享出来,供大家学习交流,如若笔记中有不对的地方,那一定是当时我的理解还不够,希望你能及时提出。前人述备矣,我只是知识的搬运工,effective 书籍源码均在开源项目 java-diary 中的 code-effective-third 模块中源代码仓库地址: https://gitee.com/Rocky-BCRJ/java-diary.git。

qq_42605751的博客 642

Effective Java3.4-通过私有构造器强化不可实例化的能力

4 通过私有构造器强化不可实例化的能力 主要内容:讲述存在一些类不希望被实例化的时候,应该使用私有构造器。 主要目标:实现自己的工具类的时候,要注意实现私有构造器 实际应用场景:java.util.Math,java.util.Collections Effective Java知识点摘录+白话说明 企图通过将类做成抽象类来强制该类不可被实例化是行不通的 。 这样的抽象类是可以被继承的,既然能被继承,那就说明了可以通过子类的实例化间接将父类实例化(我不想被实例化,但我儿子实例化导致我也跟着被实例化了

JunxuanBo 254

《Effective Java》学习笔记 - (4) 通过私有构造器强化不可实例化的能力

有时候一些类只提供静态方法,通常是一些工具类,这些类不希望被实例化,那么我们就可以通过私有构造器来强化不可实例化的能力 有些类只需要包含静态方法和静态域,比如 java.lang.Math 或者 java.util.Arrays,把基本类型的值或者数组类型上的相关方法组织起来。我们也可以通过 java.util.Collections 的方式将实现特定接口的对象上的静态方法,包括工厂方法组织起来。...

Jwasx的博客 267

Effective Java:通过私有构造器强化不可实例化的能力

1 工具类(utility class) 只包含静态方法和静态域的类,例如: java.lang.Math、java.lang.Arrays等,把基本类型的值或者数据类型上的相关方法组织起来 java.util.Collections等,把实现特定接口的对象上的静态方法,包括工厂方法组织起来 2 显示声明私有构造器 这样的工具类,对它们实例化没有任何意义,因此可以显示声明一个私有的构造函数 ...

添仔哥哥 340

一文读懂《Effective Java》第4条:通过私有构造器来强化工具类不可实例化的能力...

点击上方 蓝字 关注我们随着计算机革命发展,“不安全”的编程方式逐渐成为编程代价高昂的主因之一。初始化和清理(cleanup)是涉及安全的两个问题。C++引入了构造器(construct...

Diligence is the mother of success. 304

Effective Java笔记:用私有构造器或者枚举类型强化 Singleton 属性

是一个经典的设计模式和实践建议。Singleton(单例模式)是很常见的设计模式,用于确保一个类全局只有一个实例存在。很多早期的实现方式,比如懒加载的双重检查锁定,会出现线程安全问题。Singleton 模式确保某个类只有一个实例,并提供全局访问点访问它。懒汉式在第一次需要时实例化对象,可以节省内存,适合对象创建代价较高、使用频率较低的场景。对于单纯的全局实例管理(例如工具类、配置类),JVM 本身的强大枚举机制已经完全足够。饿汉式是在类加载时就创建好 Singleton 实例,以确保线程安全。

eclipseC的博客 934
上一篇: Effective Java笔记(1)用静态工厂方法代替构造器
下一篇: Effective Java笔记(2)遇到多个构造器参数时要考虑使用构建器
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值